Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2024:vstoica:dragos.coscodan [2024/05/03 14:45]
dragos.coscodan [Introducere]
pm:prj2024:vstoica:dragos.coscodan [2024/05/30 23:53] (current)
dragos.coscodan [Rezultate Obţinute]
Line 11: Line 11:
 ===== Descriere generală ===== ===== Descriere generală =====
    
-<note tip> +**Main Box :** 
-O schemă bloc cu toate modulele proiectului vostruatât software cât şi hardware însoţită ​de o descriere a acestora precum şi a modului în care interacţionează+ 
-  +Aceasta este cutia principala care se va conecta la automatele din casa pentru controlul prizelorbecurilor, masurare curent, interactionare cu baza de date. 
-Exemplu de schemă blochttp://www.robs-projects.com/​mp3proj/​newplayer.html + 
-</​note>​ +{{:​pm:​prj2024:​vstoica:​dragos.coscodan.Main_box.png?​400|}} 
- + 
 +**Box 1** 
 +Aceasta este prima cutie care se va monta intr-camera si care contine mai multi senzori pentru monitorizare si control
 +Ea va comunica direct cu placuta principala utilizand pinii GPIO. 
 + 
 +{{:pm:prj2024:​vstoica:​dragos.coscodan.box_1.1.png?​400|}} 
 + 
 +**Box 2** 
 + 
 +Este la fel ca prima cutie numai ca comunica prin wifi. 
 + 
 +{{:​pm:​prj2024:​vstoica:​dragos.coscodan.box_2.1.png?​400|}} 
 + 
 +**Door Lock Box** 
 + 
 +Usa va putea fi deschisa folosind cardul sau introducand parola pe un keypad. Din meniul acestuia putem schimba parola, schimba limba, adauga/sterge carduriDatele sunt salvate in EEPROM. Pentru a detecta daca usa a fost deschisa voi folosi un Sensor Hall. 
 +Interfonul va comunica cu placuta principala prin UART pentru a trimite semnale de alarma. 
 + 
 +{{:​pm:​prj2024:​vstoica:​dragos.coscodan.Interphone.png?​400|}} 
 + 
 +**Esp-cam** 
 + 
 +Este o camera directia careia va fi controlata cu 2 servo-motoare. 
 + 
 +{{:​pm:​prj2024:​vstoica:​dragos.coscodan.esp-cam.png?​400|}} 
 + 
 ===== Hardware Design ===== ===== Hardware Design =====
-  + 
-<note tip> +==== Lista piese: ==== 
-Aici puneţi tot ce ţine de hardware design: + 
-  * listă de piese + 
-  * scheme electrice (se pot lua şi de pe Internet şi din datasheet-urie.ghttp://www.captain.at/electronic-atmega16-mmc-schematic.png) +  * Esp32 x2 
-  * diagrame de semnal ​ +  * Esp-cam ​ 
-  * rezultatele simulării +  * Arduino Nano 
-</​note>​ +  * Placa PCB prototipare 
- +  * Relee x4 
 +  * Header pini 
 +  * Conectori XH2.54 
 +  * Conectori screw-in x20 
 +  * Convertor 220V-5V 
 +  * Current sensor CT 013 
 +  * LEDs x3 
 +  * Cablu UTP ~1m 
 +  * Cablu eletric 2.5mm ~2m 
 +  * Power button 
 +  * Fotorezistori x2 
 +  * Telecomanda IR 
 +  * Sensor IR x2 
 +  * Sensor DHT11 x2 
 +  * Buzzer x2 
 +  * Sensor MQ-2 x2 
 +  * Microfon x2 
 +  * Acumulator 18650 x2 
 +  * Convertor Step-Up 
 +  * Modul incarcare 
 +  * LCD 16x2 
 +  * Keypad 
 +  * Servo-motor x3 
 +  * Sensor Hall 
 +  * Magneti 
 +  * Modul RFID 
 +  * MOSFET 
 +  * Punte redresoare 
 +  * Condensator 100uF 
 +  * Dioda Zenner 15V 
 +  * Dioda 
 +  * Resistori 100k10k, 330, 220 
 +  * Optocoupler 
 + 
 +==== Scheme electrice ==== 
 + 
 +**Schematics:​** 
 + 
 +[[https://​github.com/​Dragosh-C/​Smart-Home-Box/​blob/​main/​Main_box_2_schem.png|Main_box + Box1]] 
 + 
 +[[https://github.com/​Dragosh-C/​Smart-Home-Box/​blob/​main/​interphone%2Bcamera_schem.png|Interfon + Camera]] 
 + 
 +[[https://​github.com/​Dragosh-C/Smart-Home-Box/​blob/​main/​Main_box_2_schem.png|Box 2]] 
 + 
 + 
 + 
 +=== Main Box + Box 1 === 
 + 
 + 
 +{{:​pm:​prj2024:​vstoica:​Main_box+box1.dragos.coscodan.png?​400|}} 
 + 
 + 
 +{{:​pm:​prj2024:​vstoica:​dragos.coscodan_main+box1.jpg?​400|}} 
 + 
 +{{:​pm:​prj2024:​vstoica:​dragos.coscodan_box1.jpg?​400|}} 
 + 
 + 
 + 
 + 
 +=== Interfon + Camera === 
 + 
 + 
 +{{:​pm:​prj2024:​vstoica:​dragos.coscodan.interphone+camera_bb.png?​400|}} 
 + 
 +{{:​pm:​prj2024:​vstoica:​dragos.coscodan_lock1.jpg?​400|}} 
 + 
 +{{:​pm:​prj2024:​vstoica:​dragos.coscoan_lock2.jpg?​400|}} 
 + 
 +{{:​pm:​prj2024:​vstoica:​dragos.coscodan_camera.jpg?​400|}} 
 + 
 + 
 + 
 +=== Box 2 === 
 + 
 + 
 +{{:​pm:​prj2024:​vstoica:​dragos.coscodan.box2.png?​400|}} 
 + 
 + 
 +{{:​pm:​prj2024:​vstoica:​dragos.coscodan.box2.1.jpg?​400|}} 
 + 
 +{{:​pm:​prj2024:​vstoica:​dragos.coscodan.box2.2.jpg?​400|}} 
 + 
 + 
 + 
 ===== Software Design ===== ===== Software Design =====
    
    
 +==== Descrierea codului aplicaţiei:​ ====
 +
 +
 +
 +
 <note tip> <note tip>
-Descrierea codului aplicaţiei (firmware): + 
-  mediu de dezvoltare ​(if any) (e.g. AVR Studio, CodeVisionAVR) +** Medii de dezvoltare:** 
-  librării şi surse 3rd-party (e.gProcyon AVRlib) +    VS Code - Platformio : Programare placute 
-  * algoritmi şi structuri pe care plănuiţi să le implementaţi +    Android-Studio: Aplicatie telefon  
-  * (etapa 3) surse şi funcţii implementate+ 
 +**Biblioteci utilizate:​** 
 + 
 +    WiFi.
 +    Adafruit_Sensor.h 
 +    ​EmonLib.h 
 +    driver/​adc.h 
 +    Firebase_ESP_Client.h 
 +    addons/​TokenHelper.h 
 +    IRremote.h 
 +    SPI.h 
 +    MFRC522.h 
 +    EEPROM.h 
 </​note>​ </​note>​
 +
 +===  Baza de date ===
 +
 +Baza de date folosita pentru a stoca informatia si pentru a comunica cu telefonul este Firebase
 +
 +{{:​pm:​prj2024:​vstoica:​dragos.coscodan_firebase.png?​400|}}
 +
 +== Comunicare esp cu baza de date: ==
 + 
 +
 +
 +    FirebaseAuth auth;
 +    FirebaseConfig config;
 +    FirebaseData fbdo;
 +
 +    ................ (autentificare si initializare)
 +
 +
 +**Trimitere BD:**
 +
 +   ​Firebase.RTDB.setInt(&​fbdo,​ "​Main_box/​power_measure",​ mainBox.power_measure)
 +
 +**Citire BD:**
 +
 +   ​Firebase.RTDB.readStream(&​fbddo_light_intensity)
 +
 +   if (fbdo_light_intensity.streamAvailable()) {
 +      if (fbdo_light_intensity.dataType() == "​int"​)
 +      {
 +        mainBox.light_intensity = fbdo_light_intensity.intData();​
 +      } 
 +    }
 +
 +
 +
 +== Comunicare aplicatie cu baza de date: ==
 +
 +
 +  private DatabaseReference database = FirebaseDatabase.getInstance().getReference();​
 +  database.addValueEventListener(new ValueEventListener() {
 +            public void onDataChange(final DataSnapshot dataSnapshot) {
 +            ​
 +                // Citire BD
 +                Long temperature = (Long) dataSnapshot.child("​Room2"​).child("​Temperature"​).getValue();​
 +                Long gassensor = (Long) dataSnapshot.child("​Room2"​).child("​Gas_sensor_value"​).getValue();​
 +                ​
 +                // Scriere BD
 +                dataSnapshot.getRef().child("​Room2"​).child("​Relay1"​).setValue(true);​
 +  }
 +
 +
 +
 +== Functie stingere/​aprindere lumina batand din palme ==
 +
 +Functia verifica daca au fost exact 2 batai intr-un anumit interval de timp
 +  ​
 +  void claps_function(int sensorPin, bool *signalToRelayPin) {
 +    int soundValue = digitalRead(sensorPin);​
 +    currentNoiseTime = millis();
 +    if (soundValue == 1)
 +    { // if there is currently a noise
 +        if (
 +            (currentNoiseTime > lastNoiseTime + 200) &&
 +            (lastSoundValue == 0) && ​                   ​
 +            (currentNoiseTime < lastNoiseTime + 800) && ​
 +            (currentNoiseTime > lastLightChange + 1000) 
 +           )
 +        {
 +          \*signalToRelayPin = !(*signalToRelayPin);​
 +          lastLightChange = currentNoiseTime;​
 +        }
 +        lastNoiseTime = currentNoiseTime;​
 +    }
 +    lastSoundValue = soundValue;
 +  }
 +
 +== Citire date telecomanda IR  ==
 +
 +Primeste comenzi de la telecomanda si in functie de acestea seteaza variabilele necesare
 +Pentru a nu citi prea rapid comenzi si nu a trimite date prea des la baza de date an facut un delay 
 +pentru fiecare folosind functia millis()
 +
 +    if (IrReceiver.decode()) {
 +    IrReceiver.resume();​
 +    irCommand = IrReceiver.decodedIRData.command;​
 +    if (millis() - debouncing_delay > 200){
 +      ​
 +      // up
 +      if (irCommand == 64) {
 +        room1.relay1 = !room1.relay1;​
 +        relayStatus = true;
 +      }
 +      // ok
 +      if (irCommand == 70) {
 +        room1.relay2 = !room1.relay2;​
 +        relayStatus = true;
 +      }
 +      // #
 +      if (irCommand == 74) {
 +        room1.alarm = !room1.alarm;​
 +        digitalWrite(BUZZER_PIN,​ room1.alarm);​
 +        if (mainBox.deactivate_alarm) {
 +          digitalWrite(BUZZER_PIN,​ LOW);
 +        }
 +        update_db_buzzer = 1;
 +      }
 +      ​
 +      ................
 +      ​
 +      debouncing_delay = millis();
 +      irCommand = 0;      ​
 +    }
 +    update_db_time = millis();
 +  }
 +
 +== Citire si scriere EEPROM pe Arduino Nano ==
 +
 +Parola si cartelele sunt salvate in eeprom pentru a nu pierde informatia la resetare.
 +   
 +   
 +  if (EEPROM.read(EE_START_ADDR) == KEY_DATA)
 +  {
 +    savedTags = EEPROM.read(EE_START_ADDR + ADDRESS_TAGS);​
 +  } // Verify if EEPROM contain key data, clear the memory if not
 +  else
 +  {
 +    for (int i = 0; i < EEPROM.length();​ i++)
 +    {
 +      EEPROM.update(i,​ 0x00);
 +    }
 +    for (int i = 0; i < 6; i++)
 +    { // Writing a default password when first time uploading
 +      EEPROM.update(i + 6, '​1'​);​
 +    }
 +  }
 +  EEPROM.update(EE_START_ADDR,​ KEY_DATA);
 +
 +  for (int i = 0; i < 6; i++)
 +  {
 +    compPassword[i] = EEPROM.read(i + PASSWORD_ADDRESS);​ // Reading the password from EEPROM
 +    Serial.print(compPassword[i]);​
 +  }
 +
 +== Stergere/​Scriere cartele ==
 +  ​
 +  // Adding and deleting new tag in/from EEPROM
 +  bool saveOrDeleteTag(uint8_t *tag, uint8_t size)
 +  {
 +     ​int16_t tagAddr = foundTag(tag,​ size); ​                     // search the tag
 +     ​uint16_t newTagAddr = (savedTags * 8) + EE_START_ADDR + ADDRESS_TAGS;​ // last tag addres
 +     if (tagAddr >= 0)
 +     { // deleting the tag
 +        for (uint8_t i = 0; i < 8; i++)
 +        {
 +          EEPROM.write(tagAddr + i, 0x00); ​                             // deleting old tag
 +          EEPROM.write(tagAddr + i, EEPROM.read((newTagAddr - 8) + i)); // writing new tag
 +          EEPROM.write((newTagAddr - 8) + i, 0x00);
 +        }
 +        EEPROM.write(EE_START_ADDR + 1, savedTags --); // write in EEPROM number of tags
 +        return false;
 +      }
 +      else if (savedTags < MAX_TAGS)
 +      {
 +        for (uint16_t i = 0; i < size; i++)
 +        EEPROM.write(i + newTagAddr, tag[i]); ​      // write new tag
 +        EEPROM.write(EE_START_ADDR + 1, ++savedTags);​ // write number of tags
 +      }
 +      else
 +      {
 +        return false;
 +      }
 +      return true;
 +  }
 +
 +== Poze aplicatie ==
 +
 +
 +{{:​pm:​prj2024:​vstoica:​dragos.coscodan_room_2.jpg?​400|}}
 +
 +{{:​pm:​prj2024:​vstoica:​dragos.coscodan_power_measure.jpg?​400|}}
 +
 +
    
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
    
-<note tip> +**Inchidere Usa:** 
-Care au fost rezultatele obţinute în urma realizării proiectului vostru+ 
-</note> +    Introducere parola pe numpad pentru a deschide usa; 
-  +    Apropiere cartela pentru a deschide usa; 
-===== Concluzii =====+    Cand usa este deschisa tastare "​***"​ pentru a intra in meniul de setari 
 +    unde putem schimba parola, limba(RO, EN, FR), adauga/​sterge cartele; 
 +    Usa se incuie automat dupa cateva secunde daca este inchisa
 + 
 +**Cutie 1 si 2:** 
 + 
 +    Afisare temperatura,​ umiditate, calitate aer pe telefon; 
 +    Activare/dezactivare becuri, prize, alarma de la telecomanda sau telefon; 
 +    ​Aprinde/​stinge luminile, batand de doua ori din palme; 
 +    ​Aprinde lumina daca intensitatea luminii este mai mica de un prag; 
 +    Activare/​Dezactivare becuri, prize, alarma intrun anumit interval; 
 +    Setare intensitate lumina de la telecomanda sau din aplicatie;​ 
 +    Afisare curent consumat in aplicatie;​ 
 +    Activare alarma daca cineva a patruns in casa sau daca calitatea aerului este rea; 
 +    Afisare status cutii utilizand ledurile montate. 
 +     
 +     
 +[[https://​youtu.be/​betq2JxMFPk?​si=Z8a8zUScWK3Z1pHi|Video 1]]   
 +[[https://​youtube.com/​shorts/​bQj4MoAs6Ao?​si=cfGHVuRVleRzV3eR|Video 2]] 
 +[[https://​youtube.com/​shorts/​dKRBe61gDRw?​si=bTGLbOu1wot8lc-2|Video 3]] 
 + 
 + 
    
 +
 ===== Download ===== ===== Download =====
    
-<note warning> + 
-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ă ;-). +{{:pm:prj2024:vstoica:dragos.coscodan.smart_home.zip|}}
-  +
-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:​prj2022:​cc:​dumitru_alin*. +
-</​note>​ +
-  +
-===== Jurnal ===== +
-  +
-<note tip> +
-Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. +
-</​note>​+
    
 +
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
    
-<​note>​ + 
-Listă cu documente, datasheet-uri,​ resurse Internet folosite, eventual grupate pe *Resurse Software* ​şi *Resurse Hardware*. +**Resurse Software
-</note>+** 
 + 
 +https://​randomnerdtutorials.com/​esp32-pwm-arduino-ide/​ 
 +     
 +https://​medium.com/​@khantalha7367/​uart-communication-on-esp32-28fd3df3b6eb 
 +     
 +https://​randomnerdtutorials.com/​esp32-esp8266-firebase-authentication/​ 
 + 
 +https://​developer.android.com/​ 
 + 
 + 
 +**Resurse Hardware:*
 + 
 +https://​randomnerdtutorials.com/​esp32-pinout-reference-gpios/​ 
 + 
 +https://​www.instructables.com/​AC-PWM-Dimmer-for-Arduino/​ 
 + 
 +https://​diyprojectslab.com/​measure-ac-current-using-arduino-and-sct-013/​ 
    
 <​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>​
  
pm/prj2024/vstoica/dragos.coscodan.1714736707.txt.gz · Last modified: 2024/05/03 14:45 by dragos.coscodan
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