Scopul acestui proiect este de a realiza un ceas cu alarmă bazat pe plăcuța de dezvoltare Arduino Uno.
Ceasul va afișa în permanență ora curentă și va oferi posibilitatea de a seta o alarmă peste X minute, în funcție de inputul utilizatorului (folosind câteva butoane).
De asemenea, întregul sistem va fi montat peste un șasiu ale cărui roți sunt controlate de Arduino, astfel încât atunci când alarma se declanșează, sistemul se deplasează în față și în spate, până când alarma este oprită sau amânată. În acest fel, utilizatorul este “forțat” să facă mai mult decât să apese un simplu buton pentru a dezactiva alarma, așa cum se întâmplă de exemplu cu alarma telefonului mobil, așadar este o alarmă mai eficientă decât cele clasice!
Schema bloc ce cuprinde toate modulele acestui proiect este următoarea:
În centrul întregului sistem se află plăcuța Arduino Uno, ce comunică cu toate celelalte componente. La ea sunt sunt legate, folosind două motherboard-uri pentru realizarea conexiunilor, 3 butoane și buzzer-ul. De asemenea, Arduino comunică cu ecranul LCD, pe care se afișează ora curentă și informații ajutătoare în momentul setării unei alarme, dar și cu modulul RTC ce furnizează ora curentă, folosind pentru ambele protocolul I2C. În ultimul rând, Arduino comunică cu driverul de motoare L298N, ce este conectat la rândul său cu cele 4 motoare ale roților.
Componente folosite:
Schema electrică este următoarea:
Mediu de dezvoltare: Arduino IDE
Biblioteci utilizate: Wire.h, LiquidCrystal_I2C.h (pentru controlul ecranului LCD), DS3231.h (pentru citirea datelor de la modulul RTC)
Programul este gândit să funcționeze ca un automat cu stări (FSM) ce are 4 stări: starea inițială în care doar se afișează data și ora curentă, starea în care se setează alarma, starea în care alarma este setată și se așteaptă ca aceasta să înceapă să sune și în cele din urmă starea în care alarma sună.
Fiecare apăsare de buton generează o întrerupere. În fiecare rutină de tratare a întreruperii, se schimbă starea curentă sau un contor asociat cu numărul de minute selectate pentru alarmă. Fiecare buton folosește un debouncer software pentru a detecta corect apăsarea.
Timer-ul pentru alarmă este configurat folosind regiștri să aibă o frecvență de 0.5Hz și are asociată o rutină de tratare a întreruperii pentru atingerea valorii din registrul OCR1A.
Motoarele sunt grupate câte două (cele din față și cele din spate) și sunt controlate prin PWM, utilizând funcția analogWrite() din framework.
În funcția principală (loop) se interoghează starea curentă și în funcție de aceasta se afișează un anumit mesaj pe ecran, se pornesc sau nu motoarele și buzzer-ul și se citesc date de la modulul RTC, dacă este nevoie.
Link Github cu codul proiectului: Cod proiect
Fiind primul proiect hardware la care am lucrat, provocările au fost destul de multe, însă pot spune că am învățat o mulțime de lucruri noi (configurări folosind regiștri în Arduino, cum să pun laolaltă un sistem destul de complex astfel încât să fie cât mai compact, cum trebuie alimentat un astfel de sistem, etc.), iar rezultatul final a fost foarte satisfăcător. De asemenea, pe viitor pot adăuga diverse alte funcționalități la acest proiect.
Laboratoarele utilizate sunt următoarele: