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 =====