This shows you the differences between two versions of the page.
pm:prj2023:avaduva:storagebox [2023/05/18 18:13] adrian_ioan.campean |
pm:prj2023:avaduva:storagebox [2023/05/29 21:25] (current) adrian_ioan.campean |
||
---|---|---|---|
Line 7: | Line 7: | ||
Schema bloc:\\ | Schema bloc:\\ | ||
- | {{:pm:prj2023:avaduva:storage_box_diagram.png?450}} | + | {{:pm:prj2023:avaduva:storage_box_diagram.png?450}}\\ |
===== Hardware Design ===== | ===== Hardware Design ===== | ||
Line 18: | Line 18: | ||
*Telecomanda Infrarosu | *Telecomanda Infrarosu | ||
*Difuzor | *Difuzor | ||
+ | *Breadboard mic | ||
Diagrama proiectului facuta in TinkerCAD:\\ | Diagrama proiectului facuta in TinkerCAD:\\ | ||
- | {{:pm:prj2023:avaduva:storage_box_diagrama.png?450|}} | + | {{:pm:prj2023:avaduva:storage_box_diagrama.png?nolink&450|}} |
Cutia aleasa a fost cumparata de la IKEA. Pe partea frontala am dat 3 gauri cu bormasina: 2 pentru senzorul ultrasonic de distanta, si una pentru difuzor:\\ | Cutia aleasa a fost cumparata de la IKEA. Pe partea frontala am dat 3 gauri cu bormasina: 2 pentru senzorul ultrasonic de distanta, si una pentru difuzor:\\ | ||
Line 32: | Line 33: | ||
{{:pm:prj2023:avaduva:storage_box_ir.jpeg?nolink&450|}}\\ | {{:pm:prj2023:avaduva:storage_box_ir.jpeg?nolink&450|}}\\ | ||
- | Servomotorul a fost temporar lipit cu banda izoliera de peretele din spate al cutiei, urmand ca acesta sa fie lipit altfel. Pentru a deschide cutia, au fost folosite doua aripioare, una in prelungirea celeilalte:\\ | + | Servomotorul a fost lipit cu banda izoliera de peretele din spate al cutiei. Pentru a deschide cutia, au fost folosite doua aripioare, una in prelungirea celeilalte:\\ |
{{:pm:prj2023:avaduva:storage_box_servo_1.jpeg?nolink&450|}}\\ | {{:pm:prj2023:avaduva:storage_box_servo_1.jpeg?nolink&450|}}\\ | ||
Inauntrul cutiei, majoritatea cablurilor au fost lipite de margine folosind banda izoliera, fiind scoase din cutie printr-o alta gaura data in peretele din spate al acesteia:\\ | Inauntrul cutiei, majoritatea cablurilor au fost lipite de margine folosind banda izoliera, fiind scoase din cutie printr-o alta gaura data in peretele din spate al acesteia:\\ | ||
{{:pm:prj2023:avaduva:storage_box_inside.jpeg?nolink&450|}}\\ | {{:pm:prj2023:avaduva:storage_box_inside.jpeg?nolink&450|}}\\ | ||
+ | |||
+ | In partea din spate am lipit un breadboard mic, care imi va permite sa conectez terminalele de GND si VCC la pinii de GND si 5V de pe placa Arduino:\\ | ||
+ | {{:pm:prj2023:avaduva:storage_box_connections.jpeg?nolink&450|}}\\ | ||
===== Software Design ===== | ===== Software Design ===== | ||
+ | Pentru partea de software, am folosit 3 librarii disponibile pentru descarcare din IDE-ul Arduino: "Servo" pentru servomotor, "IRremote" pentru modulul IR si "SR04" pentru senzorul ultrasonic.\\ | ||
- | <note tip> | + | In cadrul programului exista 4 functii. Prima este de translatare a semnalului venit dinspre telecomanda IR, semnal ce are o valoare hexadecimala. De asemenea, tot aici sunt initializate si butoanele folosite (CH pentru modul autonom, + si - pentru deschiderea sau inchiderea manuala a cutiei).\\ |
- | Descrierea codului aplicaţiei (firmware): | + | |
- | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | + | <code> |
- | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | + | void translateIR(){ |
- | * algoritmi şi structuri pe care plănuiţi să le implementaţi | + | switch(results.value){ |
- | * (etapa 3) surse şi funcţii implementate | + | case 0xFF629D: //butonul CH de pe telecomanda, va fi folosit pentru modul autonom |
- | </note> | + | autonomousMode(); |
+ | break; | ||
+ | |||
+ | case 0xFFA857: //butonul + de pe telecomanda, va fi folosit pentru deschiderea manuala | ||
+ | manualOverrideOpen(); | ||
+ | break; | ||
+ | |||
+ | case 0xFFE01F: //butonul - de pe telecomanda, va fi folosit pentru inchiderea manuala | ||
+ | manualOverrideClose(); | ||
+ | break; | ||
+ | |||
+ | default: | ||
+ | Serial.println("Button not found"); | ||
+ | } | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | A doua functie este cea fundamentala a proiectului, intrucat instruceaza cutia sa se deschida, sa astepte un interval de timp, sa scoata un sunet de avertizare si apoi sa se inchida.\\ | ||
+ | |||
+ | <code> | ||
+ | void autonomousMode(){ | ||
+ | Serial.println("Autonomous mode"); | ||
+ | //servo-ul va deschide usor capacul | ||
+ | for(position = 0; position <= 115; position++){ | ||
+ | servoMotor.write(position); | ||
+ | delay(15); | ||
+ | } | ||
+ | |||
+ | delay(8000); //timp de asteptate: 8 secunde | ||
+ | |||
+ | //sunet de avertizare | ||
+ | digitalWrite(activeBuzzer, HIGH); | ||
+ | delay(1); | ||
+ | digitalWrite(activeBuzzer, LOW); | ||
+ | |||
+ | //timp de asteptare: 2 secunde | ||
+ | delay(2000); | ||
+ | |||
+ | //servo-ul inchide capacul | ||
+ | servoMotor.write(20); | ||
+ | |||
+ | Serial.println("Autonomous mode ended"); | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | Ultimele 2 functii au ca scop override-ul manual al utilizatorului, acesta avand posibilitatea sa deschida si sa inchida cutia manual. | ||
+ | |||
+ | <code> | ||
+ | void manualOverrideOpen(){ | ||
+ | Serial.println("Manual open"); | ||
+ | |||
+ | //sunet de avertizare | ||
+ | digitalWrite(activeBuzzer, HIGH); | ||
+ | delay(1); | ||
+ | digitalWrite(activeBuzzer, LOW); | ||
+ | delay(1000); | ||
+ | |||
+ | //servo-ul va deschide usor capacul | ||
+ | for(int position = 0; position <= 115; position++){ | ||
+ | servoMotor.write(position); | ||
+ | delay(15); | ||
+ | } | ||
+ | |||
+ | //sunet de avertizare | ||
+ | digitalWrite(activeBuzzer, HIGH); | ||
+ | delay(1); | ||
+ | digitalWrite(activeBuzzer, LOW); | ||
+ | delay(1); | ||
+ | |||
+ | Serial.println("Manual open ended"); | ||
+ | } | ||
+ | |||
+ | void manualOverrideClose(){ | ||
+ | Serial.println("Manual close"); | ||
+ | |||
+ | //sunet de avertizare | ||
+ | digitalWrite(activeBuzzer, HIGH); | ||
+ | delay(1); | ||
+ | digitalWrite(activeBuzzer, LOW); | ||
+ | delay(1000); | ||
+ | |||
+ | //servo-ul inchide capacul | ||
+ | servoMotor.write(20); | ||
+ | |||
+ | //sunet de avertizare | ||
+ | digitalWrite(activeBuzzer, HIGH); | ||
+ | delay(1); | ||
+ | digitalWrite(activeBuzzer, LOW); | ||
+ | delay(1); | ||
+ | |||
+ | Serial.println("Manual close ended"); | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | Tot codul poate fi descarcat din sectiunea "Download". | ||
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
- | <note tip> | + | Am realizat o cutie de depozitare activata automat prin aproprierea mainii sau prin apasarea unui buton pe o telecomanda, cutie ce poate fi folosita pe post de "vallet tray" (o tava/cutie in care sunt depozitate lucruri precum portofel, chei etc.). Un upgrade potrivit ar fi inlocuirea placutei Arduino Uno cu un modul ESP32, care este mult mai mic si permite utilizarea prin intermediul unui smartphone (conectat la servicii de tipul Homebridge sau HomeAssistant).\\ |
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | |
- | </note> | + | |
===== Concluzii ===== | ===== Concluzii ===== | ||
- | ===== Download ===== | + | O asemenea cutie isi poate gasi locul in viata de zi cu zi a oricarui individ, avand un loc special unde sa-si poata depozita lucrurile de valoare. In cadrul proiectului am intampinat mai multe dificultati peste care am trecut si din care am avut ce sa invat :). |
- | <note warning> | + | ===== Download ===== |
- | O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului: surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-). | + | |
- | Fişierele se încarcă pe wiki folosind facilitatea **Add Images or other files**. Namespace-ul în care se încarcă fişierele este de tipul **:pm:prj20??:c?** sau **:pm:prj20??:c?:nume_student** (dacă este cazul). **Exemplu:** Dumitru Alin, 331CC -> **:pm:prj2009:cc:dumitru_alin**. | + | Codul + librariile deja descarcate: {{:pm:prj2023:avaduva:cod_storage_box.zip|}}\\ |
- | </note> | + | |
===== Jurnal ===== | ===== Jurnal ===== | ||
Line 69: | Line 164: | ||
5 mai 2023 - crearea paginii\\ | 5 mai 2023 - crearea paginii\\ | ||
16 mai 2023 - procurarea tuturor materialelor necesare\\ | 16 mai 2023 - procurarea tuturor materialelor necesare\\ | ||
- | 18 mai 2023 - proiectarea si constructia variantei beta a hardware-ului (necesita cateva imbunatatiri)\\ | + | 18 mai 2023 - proiectarea si constructia hardware-ului\\ |
+ | 25 mai 2023 - partea software terminata in proportie de 90%, modulul IR mai trebuie debugguit\\ | ||
+ | 26 mai 2023 - partea softwate este terminata si testata\\ | ||
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
- | <note> | + | Resurse software:\\ |
- | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | + | [[https://docs.arduino.cc/learn/electronics/servo-motors | Servomotor]]\\ |
- | </note> | + | [[https://www.circuitbasics.com/arduino-ir-remote-receiver-tutorial/ | IR Reciever]]\\ |
+ | [[https://howtomechatronics.com/tutorials/arduino/ultrasonic-sensor-hc-sr04/ | Senzor de Distanta]] | ||
<html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | <html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | ||