This is an old revision of the document!
Autor : Dinu Eduard - Adiel
Proiectul consta in implementarea unui ceas de tip SportWatch.
Acesta contine integrat un senzor de luat temperatura si o alarma pentru sport. Alarma va suna timp de 30 secunde, iar un LED se va aprinda daca senzorul detecteaza o temperatura prea ridicata.
In schema de mai jos se poate observa inputul si outputul proiectului legat la ARDUINO. Exista 2 inputuri : citirea facuta de senzor si timpul configurat de noi.\\
Sunt 3 iesiri : sunetul facut de Buzzer cand trebuie sa sune alarma la o anumita ora, LED-ul care se va aprinde cu rosu daca temperatura este in zona de pericol, Ora, minutul si secunda afisata pe ecran.\\
Piesele necesare sunt : 1. Arduino 2. 1 Breadboard mare / 2 Breadboard mici 3. 1 Buzzer 4. 1 ecran LCD 5. 1 senzor de temperatura TMP36 6. 1 LED 7. 3 rezistente 8. fire 9. Potentiometru
Ecranul LCD trebuie sa fie suficient de mare pentru a afisa Ora Minutul Secunda.
In prima faza, proiectul este implementat in tinkercad etapa de software(codarea). Dupa ce testarea proiectului in Tinkercad se termina cu success, se implementeaza fizic.
S-a folosit LiquidCrystal pentru LCD. Functiile folosite sunt :
tone, setcursor, print, analogread, digitalWrite.
Am definit functii ajutatoare :
1.ConfigClock si ConfigAlarm : seteaza parametrii interni(de la ce ora, minut, secunda incepe ceasul sa afiseze respectiv cand este alarma)
2.toneBuzzer : apeleaza functia tone cu o perioada data parametru, o frecventa si un pin preselectat.
3. temperature: verifica daca senzorul detecteaza o temperatura prea ridicata pentru a face sport, caz in care aprinde LED ul.
4. Check Alarm: verifica daca timpul curent coincide cu alarma, in caz afirmativ porneste buzzer ul timp de 30 secunde.
#include <LiquidCrystal.h> LiquidCrystal lcd(12, 11, 5, 4, 3, 2); int button; int h=1; int m=45; int s=00; int flag=1; //PM int sensePin = A0; //This is the Arduino Pin that will read the sensor output int sensorInput; //The variable we will use to store the sensor input double temp; //The variable we will use to store temperature in degrees. int alarmMin = 21; int alarmHour = 19; void setup() { Serial.begin(9600); lcd.begin(16, 2); pinMode(7, OUTPUT); pinMode(6, INPUT); pinMode(8, OUTPUT); configClock(21,32,50); configAlarm(21,33); } void temperature() { sensorInput = analogRead(A0); temp = (double)sensorInput / 1024; //find percentage of input reading temp = temp * 5; //multiply by 5V to get voltage temp-= 0.5; temp = temp * 100; //Convert to degrees Serial.println(temp); if(temp > 20) { digitalWrite(8, HIGH); } else digitalWrite(8, LOW); } void configClock(int hour, int mins, int secs) { h = hour; m = mins; s = secs; } void configAlarm(int alarmH, int alarmM) { alarmMin = alarmM; alarmHour = alarmH; } void toneBuzzer(int duration) { tone(7, 220, duration); } void checkAlarm(int min, int hour, int sec) { if(min == alarmMin && hour == alarmHour && sec < 30) toneBuzzer(1000); } void loop() { lcd.setCursor(0,0); lcd.print("Time "); if(h<10)lcd.print("0"); lcd.print(h); lcd.print(":"); if(m<10)lcd.print("0"); lcd.print(m); lcd.print(":"); if(s<10)lcd.print("0"); lcd.print(s); if(flag==0) lcd.print(" AM"); if(flag==1) lcd.print(" PM"); lcd.setCursor(0,1);// for Line 2 lcd.print("Precision Clock"); delay(987);// temperature(); s=s+1; if(s==60){ s=0; m=m+1; } if(m==60) { m=0; h=h+1; } if(h==13) { h=1; flag=flag+1; if(flag==2)flag=0; } checkAlarm(m, h, s); }
Ecranul LCD afiseaza cu succes timpul cu precizie, LED ul se lumineaza in caz de pericol, iar alarma suna corespunzator.</note>
===== Concluzii =====
Consider ca proiectul este important deoarece foloseste in scop didactic cunostinte de intreruperi, senzori.
===== Jurnal =====
Main intai am rezolvat partea de afisaj timp. Apoi am rezolvat partea de alarma. In final am facut partea de senzor de temperatura si LED.
===== Bibliografie/Resurse =====