Differences

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

Link to this comparison view

pm:prj2024:vstoica:dragos.coscodan [2024/05/27 00:46]
dragos.coscodan [Hardware Design]
pm:prj2024:vstoica:dragos.coscodan [2024/05/30 23:53] (current)
dragos.coscodan [Rezultate Obţinute]
Line 140: Line 140:
    
    
 +==== 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.1716759968.txt.gz · Last modified: 2024/05/27 00:46 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