This shows you the differences between two versions of the page.
pm:prj2023:danield:smart-lights [2023/05/26 03:54] mihai.stoica2205 [Software Design] |
pm:prj2023:danield:smart-lights [2023/05/29 13:34] (current) mihai.stoica2205 [Software Design] |
||
---|---|---|---|
Line 57: | Line 57: | ||
* Deoarece senzorul de miscare are nevoie de un timp pentru a se calibra, setup-ul modulelor este facut sa dureze aproximativ 30 de secunde, folosind functia de delay. | * Deoarece senzorul de miscare are nevoie de un timp pentru a se calibra, setup-ul modulelor este facut sa dureze aproximativ 30 de secunde, folosind functia de delay. | ||
<code> | <code> | ||
- | for(int i = 0; i < calibrationTime; i++) | + | for(int i = 0; i < calibrationTime; i++) |
- | delay(1000); | + | delay(1000); |
</code> | </code> | ||
* Modulele ce comunica prin RF (1 si 2), au implementata o structura numita ''Package'' cu doua campuri: ''state'' - indica starea senzorului de miscare (1 atunci cand detecteaza miscarea, 0 atunci cand nu o detecteaza) si ''id'' - folosit pentru a identifica pachetele trimise. | * Modulele ce comunica prin RF (1 si 2), au implementata o structura numita ''Package'' cu doua campuri: ''state'' - indica starea senzorului de miscare (1 atunci cand detecteaza miscarea, 0 atunci cand nu o detecteaza) si ''id'' - folosit pentru a identifica pachetele trimise. | ||
- | * O biblioteca Arduino(()), ''LowPower.h'', este utilizata pentru a face ca modulul 1 si modulul 3 sa transmita date o data la 8 secunde, iar in rest sa intre in modul ''powerDown'', cu scopul de a economisi putere. | + | * Modulele bluetooth au fost setate cu rol de master/slave folosind comenzi AT. |
+ | * O biblioteca Arduino, ''LowPower.h'', este utilizata pentru a face ca modulul 1 si modulul 3 sa transmita date o data la 8 secunde, iar in rest sa intre in modul ''powerDown'', cu scopul de a economisi putere. | ||
- | Modulul 1: | + | **Modulul 1**: |
- | * In functia ''setup'' | + | * In functia ''setup'' se initializeaza modulul nRF cu parametrii precum canalul si pipe-ul pe care se desfasoara comunicatia. |
+ | <code> | ||
+ | myRadio.begin(); | ||
+ | myRadio.setChannel(115); | ||
+ | myRadio.openWritingPipe(pipe); | ||
+ | </code> | ||
+ | * In functia ''loop'' se citesc datele de pe pin-ul senzorului de miscare, se introduc in structura creata si se trimit catre celalalt modul. Se trimite doar atunci cand apare o schimbare in starea pinului, iar dupa ce s-a detectat miscare, placuta Arduino intra in modul low power pentru 8 secunde. | ||
+ | <code> | ||
+ | LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF); | ||
+ | </code> | ||
- | <note tip> | + | **Modulul 2**: |
- | Descrierea codului aplicaţiei (firmware): | + | * In functia ''setup'' este setat modulul nRF similar cu setarea acestuia pentru modulul 1. |
- | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | + | * In functia ''loop'' se verifica primirea datelor prin bluetooth sau prin RF. |
- | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | + | <code> |
- | * algoritmi şi structuri pe care plănuiţi să le implementaţi | + | if (myRadio.available()) { |
- | * (etapa 3) surse şi funcţii implementate | + | myRadio.read(&data, sizeof(data)); |
- | </note> | + | } |
+ | |||
+ | if(Serial.available() > 0) { | ||
+ | value = Serial.read(); | ||
+ | } | ||
+ | </code> | ||
+ | * Culoarea led-ului RGB este setata folosind functia ''analogWrite'' in functia ''setColor''. | ||
+ | <code> | ||
+ | void setColor(int R, int G, int B) { | ||
+ | analogWrite(red, R); | ||
+ | analogWrite(green, G); | ||
+ | analogWrite(blue, B); | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | **Modulul 3**: | ||
+ | * Pentru LCD este folosita biblioteca ''LiquidCrystal_I2C.h''. Pentru DHT11 se foloseste biblioteca ''dht11.h''. | ||
+ | * In functia ''setup'' este initializat lcd-ul si este efectuata o prima masuratoare si afisare. | ||
+ | * In functia loop se citeste temperatura masurata de catre DHT folosind functia ''DHT11.read'', iar apoi este afisata pe LCD. Este trimisa valoarea masurata prin bluetooth, folosind interfata seriala, iar dupa trimiterea unei valori Arduino intra in modul low power pentru 8 secunde, folosind functia ''powerDown'' de mai sus. | ||
+ | <code> | ||
+ | int chk = DHT11.read(DHT11PIN); | ||
+ | lcd.clear(); | ||
+ | lcd.setCursor(0,0);// set the cursor on the first row and column | ||
+ | lcd.print("Humidity: "); | ||
+ | lcd.print(DHT11.humidity); // print the humidity | ||
+ | lcd.print("%"); | ||
+ | lcd.setCursor(0,1); // set the cursor on the second row and first column | ||
+ | lcd.print("Temperature: "); | ||
+ | lcd.print(DHT11.temperature); // print the temperature | ||
+ | lcd.print((char)223); // degree symbol | ||
+ | </code> | ||
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
- | <note tip> | + | https://youtu.be/Mroa0k1NPPg |
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | |
- | </note> | + | |
- | ===== Concluzii ===== | + | ===== Concluzii si sugestii imbunatatire ===== |
- | ===== Download ===== | + | Sistemul distribuit permite amplasarea modulelor in diferite pozitii ale camerei, la distante ce depind de specificatiile hardware ale modulelor nRF si bluetooth. |
- | <note warning> | + | Consumul de putere a fost minimizat prin utilizarea bibliotecii Arduino mentionate in descrierea implementarii. |
- | 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**. | + | Functionalitatea proiectului poate fi imbunatatita prin adaugarea unui senzor de intesitate luminoasa si reglarea luminii led-ului in functie de acesta. |
- | </note> | + | |
- | ===== Jurnal ===== | + | Pentru a obtine luminozitate mai buna, pot fi adaugate mai multe led-uri sau alte tipuri de led. |
+ | ===== Download ===== | ||
+ | |||
+ | {{:pm:prj2023:danield:smart-lights.zip|}} | ||
- | <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> | + | * Modul 1 (Motion sensor): |
- | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | + | https://www.circuitmagic.com/arduino/pir-motion-sensor-with-arduino/ \\ |
- | </note> | + | https://www.electronicwings.com/sensors-modules/pir-sensor \\ |
+ | https://www.circuitmagic.com/arduino/pir-motion-sensor-with-arduino/ | ||
+ | |||
+ | * Modul 3 (DHT11, LCD): | ||
+ | https://projecthub.arduino.cc/arcaegecengiz/12f621d5-055f-41fe-965d-a596fcc594f6 \\ | ||
+ | https://www.instructables.com/Arduino-Temp-and-Humidity-DHT11-LCD-1602A-KY-015-S/ \\ | ||
+ | https://github.com/johnrickman/LiquidCrystal_I2C | ||
+ | |||
+ | * nRF: | ||
+ | https://www.electronics-lab.com/project/communication-between-two-arduinos-using-nrf24l01/ | ||
+ | https://github.com/nRF24/RF24 | ||
+ | |||
+ | * Bluetooth: | ||
+ | https://www.hackster.io/embeddedlab786/how-to-configure-and-pair-two-hc-05-bluetooth-modules-fa8ce2 \\ | ||
+ | https://howtomechatronics.com/tutorials/arduino/how-to-configure-pair-two-hc-05-bluetooth-module-master-slave-commands/ \\ | ||
+ | https://www.youtube.com/watch?v=I2qFXSe0W3w&ab_channel=AcedInventor | ||
+ | |||
+ | * Led: | ||
+ | https://www.circuitstoday.com/interface-common-anode-and-common-cathode-rgb-leds-with-arduino | ||
+ | |||
+ | * Low Power: | ||
+ | https://learn.sparkfun.com/tutorials/reducing-arduino-power-consumption \\ | ||
+ | https://www.gammon.com.au/forum/?id=11497 | ||
<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> | ||