This is an old revision of the document!
Smart lights reprezinta un sistem distribuit implementat cu scopul de a schimba luminile ambientale pentru a reflecta temperatura din spatiul in care se afla senzorul.
Functionalitate: detectarea miscarii pentru aprinderea luminilor, masurarea temperaturii din incapere, afisarea valorii acesteia si modificarea intensitatii si culorii luminilor in functie de temperatura, precum si inchiderea acestora la un interval de timp atunci cand nu se mai detecteaza miscare.
Sistemul distribuit este bazat pe 3 module independente fizic care comunica intre ele: modulul 1 trimite date catre modulul 2, iar modulul 3 trimite date catre modulul 2.
Modulul 1 reprezinta un Arduino Uno conectat la un senzor de miscare si un modul nRF. Acesta detecteaza miscarea prin senzorul infrarosu pasiv si transmite informatia prin unde radio catre modulul 2.
Modulul 3 reprezinta o alta placuta Arduino Uno conectata la un senzor de temperatura, un display lcd si un modul bluetooth. Acesta are rolul de a masura temperatura (si umiditatea) din incapere si de a transmite valorile masurate prin bluetooth catre modulul 2. Totodata, afiseaza pe display-ul lcd rezultatele masuratorii. Display-ul lcd are un modul I2C prin intermediul caruia se conecteaza la placuta Arduino.
Modulul 2 reprezinta tot o placuta Arduino conectata la un led, un modul nRF si un modul bluetooth. Rolul sau este de a aprinde led-ul cand primeste informatia corespunzatoare de la modulul 1 si de a seta culoarea si intensitatea luminii in functie de informatia primita de la modulul 3. Placa este conectata la modulele bluetooth si nRf pentru a fi receptor pentru modulul 3, respectiv modulul 1.
Lista piese:
Scheme electrice:
Fiecare modul al sistemului distribuit are propriul sau cod sursa.
Aspecte comune in fisierele sursa:
for(int i = 0; i < calibrationTime; i++) delay(1000);
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.LowPower.h
1), 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:
setup
se initializeaza modulul nRF cu parametrii precum canalul si pipe-ul pe care se desfasoara comunicatia.myRadio.begin(); myRadio.setChannel(115); myRadio.openWritingPipe(pipe);
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.LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);
Modulul 2:
setup
este setat modulul nRF similar cu setarea acestuia pentru modulul 1.loop
se verifica primirea datelor prin bluetooth sau prin RF.if (myRadio.available()) { myRadio.read(&data, sizeof(data)); } if(Serial.available() > 0) { value = Serial.read(); }
void setColor(int R, int G, int B) { analogWrite(red, R); analogWrite(green, G); analogWrite(blue, B); }
Modulul 3:
LiquidCrystal_I2C.h
2). Pentru DHT11 se foloseste biblioteca dht11.h
.setup
este initializat lcd-ul si este efectuata o prima masuratoare si afisare.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.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
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.
https://www.circuitmagic.com/arduino/pir-motion-sensor-with-arduino/ https://www.electronicwings.com/sensors-modules/pir-sensor https://www.circuitmagic.com/arduino/pir-motion-sensor-with-arduino/
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
https://www.electronics-lab.com/project/communication-between-two-arduinos-using-nrf24l01/ https://github.com/nRF24/RF24
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
https://www.circuitstoday.com/interface-common-anode-and-common-cathode-rgb-leds-with-arduino
https://learn.sparkfun.com/tutorials/reducing-arduino-power-consumption https://www.gammon.com.au/forum/?id=11497