Automatic Runner Stopwatch

https://youtu.be/o7wovVjnk50

Pada minggu ke 9 kuliah IMKA kami diberikan tugas untuk merancang sebuah proyek arduino dengan memanfaatkan dua buah seven segment. Kami berfikir cukup panjang tentang proyek apa yang akan dibuat. Dengan mempertimbangkan ide-ide yang ada dan komponen yang tersedia, kami memutuskan untuk membuat Automatic Runner Stopwatch.

Automatic Runner Stopwatch akan mulai menghitung waktu pelari ketika pelari itu melewati sensor PIR (Passive Infra Red) dan akan berhenti jika pelari tersebut melewati sensor PIR tersebut kembali, sehingga dapat dihitung waktu yang diperlukan untuk pelari dapat mengelilingi satu putaran ( satu lap).

 

proximity_pir-diagram.png

Sensor PIR ini menggunakan perbedaan suhu yang terekam dalam sensor, sehingga apabila benda mati yang berlalu atau tertangkap sensor maka tidak akan mentrigger stopwatch untuk menyala. Terdapat suatu masalah saat kami mengerjakan proyek ini yaitu karena area deteksi dari sensor PIR ini berbentuk cone, akan terlalu lebar area yang terdeteksi, sehingga kami mencoba mengakalinya dengan membuat selubung menggunakan kertas yang berfungsi sebagai kacamata kuda dari sensor.

S__21159943.jpg

Alat-alat yang digunakan dalam proyek ini adalah

  • Arduino Uno
  • Breadboard
  • Kabel Jumper
  • Sensor PIR
  • Seven Segment
  • Resistor 225 Ohm

Berikut adalah code dari rangkaian tersebut

int a = 2; //Untuk menyalakan segmen “a”
int b = 3; //Untuk menyalakan segmen “b”
int c = 4; //Untuk menyalakan segmen “c”
int d = 5; //Untuk menyalakan segmen “d”
int e = 6; //Untuk menyalakan segmen “e”
int f = 7; //Untuk menyalakan segmen “f”
int g = 8; //Untuk menyalakan segmen “g”
int D2 = 9; //Segmen ke-2
int D3 = 10; //Segmen ke-3

int inputPIR = 11; // pin input untuk sensor PIR
int reset_button = 12; // pin button
int ledPin = 13; // pin LED
int pirLastState = 0; // kondisi memulai, asumsi tak ada gerakan terdeteksi
int valPIR = 0; // variabel untuk membaca status pin
int valButton = 0;
int display_number = 0; // variabel untuk waktu sekarang yang akan ditampilkan sebagai output
int number = 0;
bool isStart = false; // kondisi orang telah start

void setup() {
pinMode(a, OUTPUT); //A
pinMode(b, OUTPUT); //B
pinMode(c, OUTPUT); //C
pinMode(d, OUTPUT); //D
pinMode(e, OUTPUT); //E
pinMode(f, OUTPUT); //F
pinMode(g, OUTPUT); //G
pinMode(D2, OUTPUT); //D2
pinMode(D3, OUTPUT); //D3
pinMode(inputPIR, INPUT); // deklarasi sensor sebagai input
pinMode(reset_button, INPUT); // deklarasi button sebagai input

Serial.begin(9600);
}

void displayDigit(int digit)
{
//Kondisi untuk menyalakan segmen a
if(digit!=1 && digit != 4)
digitalWrite(a,HIGH);

//Kondisi untuk menyalakan segmen b
if(digit != 5 && digit != 6)
digitalWrite(b,HIGH);

//Kondisi untuk menyalakan segmen c
if(digit !=2)
digitalWrite(c,HIGH);

//Kondisi untuk menyalakan segmen d
if(digit != 1 && digit !=4 && digit !=7)
digitalWrite(d,HIGH);

//Kondisi untuk menyalakan segmen e
if(digit == 2 || digit ==6 || digit == 8 || digit==0)
digitalWrite(e,HIGH);

//Kondisi untuk menyalakan segmen f
if(digit != 1 && digit !=2 && digit !=3 && digit !=7)
digitalWrite(f,HIGH);

//Kondisi untuk menyalakan segmen g
if (digit!=0 && digit!=1 && digit !=7)
digitalWrite(g,HIGH);
}

void displayNumber()
{
digitalWrite(D2, LOW);
digitalWrite(D3, HIGH);

turnOff();
displayDigit(display_number/10);
delay(1);

digitalWrite(D2, HIGH);
digitalWrite(D3, LOW);

turnOff();
displayDigit(display_number%10);
delay(1);
}

void turnOff()
{
digitalWrite(a,LOW);
digitalWrite(b,LOW);
digitalWrite(c,LOW);
digitalWrite(d,LOW);
digitalWrite(e,LOW);
digitalWrite(f,LOW);
digitalWrite(g,LOW);
}

void loop(){
valPIR = digitalRead(inputPIR); // membaca nilai input
valButton = digitalRead(reset_button);
if(valPIR == 1 && pirLastState==1){
pirLastState = 1;
valPIR = 0;
}
else{
pirLastState = valPIR;
}
Serial.println(valPIR);
if(valPIR == 1){
isStart = !isStart;
}
if(isStart){
number++;
}
displayNumber();

display_number=number/100;
if(display_number > 59){
number = 0;
}

if(valButton == HIGH){
number = 0;
}
}

Leave a comment