Storage Box

Introducere

O cutie de depozitare care se poate deschide fie prin interactiunea cu senzorul de miscare, fie prin apasarea unui buton pe o telecomanda cu infrarosu. Cutia se inchide automat dupa 5 secunde, finalizarea actiunii fiind semnalata printr-un sunet scos de un difuzor.

Descriere generală

Schema bloc:

Hardware Design

Componente folosite:

  • Arduino Uno R3
  • Senzor Ultrasonic de distanta
  • Servomotor
  • Receptor Infrarosu
  • Telecomanda Infrarosu
  • Difuzor
  • Breadboard mic

Diagrama proiectului facuta in TinkerCAD:

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:



Receptorul IR a fost plasat pe capac, pe partea fata-stanga a acestuia:

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:

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:

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:

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.

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).

void translateIR(){
  switch(results.value){
    case 0xFF629D: //butonul CH de pe telecomanda, va fi folosit pentru modul autonom
      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");
  }
}

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.

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");
}

Ultimele 2 functii au ca scop override-ul manual al utilizatorului, acesta avand posibilitatea sa deschida si sa inchida cutia manual.

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");
}

Tot codul poate fi descarcat din sectiunea “Download”.

Rezultate Obţinute

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).

Concluzii

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 :).

Download

Codul + librariile deja descarcate: cod_storage_box.zip

Jurnal

5 mai 2023 - crearea paginii
16 mai 2023 - procurarea tuturor materialelor necesare
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

pm/prj2023/avaduva/storagebox.txt · Last modified: 2023/05/29 21:25 by adrian_ioan.campean
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