Treasure Box
Introducere
Pornind de la ideea de secret sliding lock door, prezentă in filme si desene animate, am conceput un mecanism inteligent de deschidere a unei uși.
Sistemul asigură accesul la conținutul cutiei pe baza recunoașterii unei succesiuni de sunete generate de bătăi în cutie. Fiind o entitate programabilă, este cu atât mai atractiv
că secvența de bătăi poate să fie schimbată oricând iar precizia setată pentru a putea diferenția chiar și între două persoane diferite care reproduc codul secret.
Descriere generală
Proiectul va conține mai multe module conectate conform schemei bloc.
Persoana care încearcă să deschidă cutia va furniza ca input o secvență de sunete. Analizarea acesteia este realizata de buzzer-ul piezo. Acesta va semnala servomotoarelor dacă este necesară deschiderea sau nu. Motorul DC cu reducție va acționa prin intermediul
unui angrenaj format din rotițe dințate un dispozitiv muzical mecanic cu tambur și lamele în timp ce cutia este deschisă. La închidere, utilizatorul poate să aleagă să schimbe secvența de sunete de deschidere care este păstrată in memorie-EEPROM. În final, cutia se închide.
Modulul Bluetooth permite acționarea sistemului de închidere, a dispozitivului muzical mecanic prin telefon.
Modulul de alimentare a necesitat o atenție specială deoarece se ivește problema rămânerii
închise a cutiei în cazul în care întreg sistemul nu mai este alimentat și implicit nu funcționează.
Soluția identificată este folosirea unui modul care să permită și încărcarea unei baterii de back-up dar și arduino-ul.
Hardware Design
Lista componente electronice:
Arduino Uno R3
Modul Bluetooth HC05
Modul încărcare baterie
Servomotor SG90 * 2
Motor DC
Buzzer piezo
Buton SPST
Baterie
Led-uri
Micro Switch
Rezistente
Diode
Tranzistor
Lista materiale auxiliare:
Cutie lemn
Adeziv lemn
Burghie
Șuruburi
Dispozitiv mecanic muzical
Angrenaj roți dințate
Schemă electrică completă, realizată in EAGLE:
Schemă fizică, fără modul Bluetooth și uSwitch, realizată in TINKERCAD:
Pentru claritate, schemele nu conțin și modulul de alimentare.
Software Design
Mediu de dezvoltare
VS Code, PlatformIO → scrierea codului pentru uController
MIT App Inventor → dezvoltarea aplicației mobile
Biblioteci implicate
Oferă posibilitatea de a nu reconecta modulul Bluetooth la fiecare reprogramare
Codul a fost modularizat într-un fișier header(.hpp) și un fișier sursă(.cpp).
Header-ul
Conține constantele implicate. Pe lângă definirea componentelor în raport cu pinii cu care interacționeză
cu plăcuța, aici se regăsesc constante ce calibrează modul de lucru ca de exemplu:
const int maximumKnocks = 20;
Reda numarul maxim de bătai care ar putea forma o secvență validă
const int averageRejectValue = 15;
Dacă o bătaie, luată ca valoare ADC de la buzzer, difera cu mai mult de atat, atunci e greșit
const int lockTurnWait = 4000;
După ce capacul a fost închis, după 4 secunde se reblochează
const int threshold = 3;
Nivel minim al unei bătăi valide
Fișierul sursă
A fost modularizat in mai multe funcții astfel:
void getBluetoothMessage();
Interoghează interfața serială pentru a identifica potențiale comenzi
void listenToSecretKnock()
La detecția unei valori date de buzzer, se declanșează și ascultă până nu mai detectează niciun sunet.
La final compară cu secvența stocată și comandă deschiderea dacă e cazul.
void motorSinging(uint8_t sliderValue)
Comandă motorul care acționează angrenajul muzical în funcție de durata dată de aplicație.
void triggerDoorUnlock()
void triggerDoorLock()
Deschide/închide cutia prin comanda servomotoarelor
Rezultate Obţinute
Ansamblu Hardware înainte de montarea pe cutie:
Ansamblu Hardware montat pe cutie:
Dispozitiv mecanic muzical angrenat cu rotițe dințate si motor DC:
Proiect la final împreună cu aplicația mobilă:
Concluzii
În ciuda multor dificultăți întâmpinate, am reușit să realizez un proiect de care sunt pe deplin mulțumit.
Resurse
Codul pentru programarea uController-ului se găsește in următorul repository:
Export to PDF