Tema 4 - Sistem de alarmă Micro:bit

Scopul acestei teme este realizarea unui sistem de alarmă configurabil folosind plăcuța Micro:bit.

Informații generale

Deadline: 24 Mai, 23:55
Punctaj: 2 puncte din nota
Incarcarea temei: Github

Cunoștințe evaluate

  • Controlul perifericelor Micro:bit;
  • Stocarea de date pe Micro:bit;
  • Calculul timpului pe Micro:bit.

Reguli

  1. Tema trebuie sa contina un fisier Readme in care sa explicati cum ati facut tema (-0.1p).
  2. Aveti voie sa folositi doar limbajul MicroPython.
  3. O tema care este implementata doar pentru a trece testele, va fi depunctată.
  4. Tema trebuie să poată fi rulată pe Micro:bit.

Copierea

Tema se rezolva individual. Orice tentativa de copiere va rezulta in 0p pentru tema respectiva. Vom utiliza si sisteme automate de detectare a copierii. Daca avem dubii, va vom adresa intrebari suplimentare legate de tema.

Intrebari

Daca aveti intrebari legate de tema, va rugam sa scrieti un issue pe repository-ul de github repository cu titlul de forma [alarm] <titlul intrebarii voastre>.

NU PUBLICATI COD SURSA. Acesta va fi considerata copiere si se va penaliza cu 0p pe tema pentru voi.

Daca doriti sa primiti un email cand se pun intrebari noi sau cand apar raspunsuri, accesati github repository si faceti click pe Watch.

Sistemul de alarmă

Sistemul de alarmă va avea următorul comportament:

  • poate fi configurat prin intermediul de comenzi introduse în interfața serială (terminal);
  • poate fi armat prin apăsarea unei anumite secvențe de butoane;
  • poate fi dezarmat prin apăsarea unei anumite secvențe de butoane;
  • poate fi configurat să se dezarmeze automat după un anumit interval de timp;
  • va scoate un sunet dacă sistemul este mișcat timp de 2 secunde;
  • va stoca log-uri privind armarea/dezarmarea.

Tema va fi testată manual pe baza unei liste de comportamente așteptate.

Configurarea sistemului

Sistemul va fi configurat folosind terminalul. Pentru a initia conexiunea la terminal, e suficient sa se apese orice tasta (hint: uart), dupa care sistemul va afișa un prompt de forma “alarm cmd>” care permite introducerea unor comenzi de configurare a sistemului. In momentul in care sistemul primeste comenzi in terminal, el nu va fi in stare de functionare (nu va face nimic altceva decat sa execute comenzi).

Conexiunea la terminal se inchide folosind comanda exit.

Vom detalia restul comenzilor în continuare.

Profile utilizatori

Sistemul poate salva 3 profile diferite de utilizatori. Pentru fiecare utilizator se vor salva următoarele informații:

  • name - numele utilizatorul;
  • pin - un cod de 4 cifre folosit pentru a arma/dezarma alarma.

Pentru a configura profilele de utilizatori se vor folosi următoarele comenzi:

  • profile add name pin - adaugă un nou profil; dacă profilul a fost adăugat cu succes se va afișa mesajul Profile added.; dacă există deja un profil cu același nume, pin-ul se va modifica; dacă se încearcă adăugarea unui al 4-lea profil, se va afișa mesajul: Could not save profile. Limit exceeded.; dacă pinul nu are 4 cifre se va afișa mesajul Could not save profile. Invalid pin.
  • profile delete name - șterge profilul identificat prin nume; dacă ștergerea s-a efectuat cu succes se va afișa textul: Profile deleted; dacă ștergerea nu s-a putut efectua pentru că nu există profilul, se va afișa mesajul: Could not delete profile. Profile name does not exist.

Sistemul poate fi armat și dezarmat de oricare dintre utilizatorii stocați în sistem.

Timp de armare

Sistemul permite configurarea timpului de armare. Acesta se măsoară în minute și reprezintă durata în care un sistem rămâne armat. De exemplu, dacă timpul de armare are valoarea 30, la 30 de minute după armare, alarma se va dezarma automat.

Dacă nu este schimbat, timpul de armare implicit are valoarea 1.

Pentru a seta timpul de armare se folosește comanda arm time val.

Armare

Pentru a arma sistemul de alarmă se vor apăsa concomitent butoanele A și B, moment în care matricea de LED-uri va intra în modul de introducere pin.

Dacă pinul este introdus corect se va semnala armarea prin afișarea unei fețe zâmbitoare, iar dacă pin-ul nu este corect, se va afișa o față tristă.

După semnalarea armării, până la dezarmare, sistemul va avea toată matricea de LED-uri aprinsă.

Introducere pin

Când sistemul intră în modul de introducere pin, el va începe prin a afișa valoarea 0 folosind matricea de LED-uri și va permite incrementearea valorilor folosind butoanele A și B. Prin apăsarea tastei A se pot incrementa valorile, iar prin apăsarea tastei B se pot micșora valorile. Dacă incrementarea ajunge la valoarea maximă (9), ea va continua cu 0,1,2, etc. Comportamentul este similar dacă decrementarea ajunge la valoarea 0.

Pentru a selecta o valoare, se va atinge logo-ul Micro:bit-ului.

Sistemul suportă doar coduri pin de 4 cifre. După introducerea unei cifre, el va trece la următoarea cifră, daca e cazul. Dacă a 4-a cifră a fost introdusă, se va trece în modul armat/dezarmat/eroare.

Dezarmare

Când este în modul armat, sistemul poate fi dezarmat prin apăsarea concomitentă a butoanelor A și B, după care sistemul va intra în modul de introducere pin. Dacă pin-ul este introdus corect, dezarmarea va fi semnalată prin afișarea unei fețe zâmbitoare pentru 3 secunde. Dacă pin-ul nu este corect, se va afișa o față tristă timp de 3 secunde si alarma va continua să fie armată.

Dezarmare automată

Dacă timpul de armare a trecut, sistemul se va dezarma automat. El va afișa o fată zâmbitoare timp de 3 secunde pentru a semnala acest lucru, după care matricea de LED-uri se va stinge în totalitate.

Activarea alarmei

Dacă sistemul este armat, alarma va fi activată prin scuturarea dispozitivului timp de 2 secunde. Dacă acest lucru se întâmplă, matricea de LED-uri va pâlpâi toată și va scoate un sunet. Ea nu se va opri până la dezarmarea manuală a sistemului.

Stocarea informațiilor

Alarma va conține un fișier cu câte o intrare pentru următoarele evenimente:

  • armare
  • dezarmare manuală
  • dezarmare automată
  • activare alarmă

Când unul din aceste evenimente are loc, se va adăuga o linie de forma <time> <event>, unde time reprezintă ora și minutul la care a avut loc evenimentul și event e unul din textele descrise mai jos.

Pentru calculul orei, se va considera că ora 00:00 este când sistemul a fost alimentat prima dată, după care ora va fi salvată în dispozitiv o dată pe minut. Dacă sistemul este scos din priza și realimentat, ora actuală va fi ultima oră salvată pe dispozitiv.

Mesajele de informare

Pentru a stoca evenimentele de pe dispozitiv, se vor stoca următoarele mesaje:

  • User armed the system. - pentru armarea sistemului, unde user e utilizatorul care a armat sistemul;
  • User disarmed the system. - pentru dezarmarea manuală a sistemului, unde user e utilizatorul care a dezarmat sistemul;
  • Automatic disarmed system. - pentru dezarmarea automată a sistemului;
  • Alarm activated. - pentru pornirea alarmei.

Afișare informații alarmă

Pentru a citi și șterge informațiile de pe sistemul de alarmă, se vor folosi următoarele comenzi în terminalul sistemului:

  • log print - afișează toate informațiile;
  • log delete - șterge toate informațiile și afișează mesajul Logs deleted.

Exemplu

alarm cmd> log print
02:12 Diana armed the system.
03:15 Ioana disarmed the system.
03:20 Ioana armed the system.
03:50 Automatic disarmed system.
alarm cmd> log delete
Logs deleted.
alarm cmd>

Testarea temei

Tema va fi testată manual pe un dispozitiv Micro:bit folosind testele publicate.

Trimiterea temei

Tema se va încărca pe github.

sde2/teme/tema_ro_4_microbit.txt · Last modified: 2021/05/18 17:57 by ioana_maria.culic
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0