This shows you the differences between two versions of the page.
pm:prj2024:vstoica:georgiana.stoian [2024/05/24 15:02] georgiana.stoian [Hardware Design] |
pm:prj2024:vstoica:georgiana.stoian [2024/05/24 15:53] (current) georgiana.stoian [Bibliografie/Resurse] |
||
---|---|---|---|
Line 53: | Line 53: | ||
<note tip> | <note tip> | ||
- | Descrierea codului aplicaţiei (firmware): | + | |
- | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | + | Pentru partea software initial am facut proiectul in 2 parti, prima data am facut partea am facut codul pentru a canta o melodie, componentele utilizate au fost boxa, sd card-ul si modulul pentru micro sd, butoane si placuta de arduino uno. Dupa ce am reusit sa fac aceasta parte a codului sa mearga am salvat-o si int-un alt fisier am realizat codul pentru ecranul lcd si senzorul dht11. Dupa ce am reusit sa afisez ceva pe ecran, am afisat si datele obtinute de la senzor. La final am facut un singur fisier in care am imbinat ambele coduri. |
- | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | + | |
- | * algoritmi şi structuri pe care plănuiţi să le implementaţi | + | Bibliotecile utilizate sunt: |
- | * (etapa 3) surse şi funcţii implementate | + | #include <SD.h> //include SD module library |
+ | #include <TMRpcm.h> //include speaker control library https://github.com/TMRh20/TMRpcm/archive/master.zip | ||
+ | #include <LiquidCrystal_I2C.h> // include I2C LCD library | ||
+ | #include <DHT.h> // include DHT sensor library | ||
+ | |||
+ | Pnetru butoane am folosit intreruperi: | ||
+ | void button_humi(){ | ||
+ | curr_time = millis(); | ||
+ | if ((curr_time - last_updated) > debounce) { | ||
+ | last_updated = curr_time; | ||
+ | noInterrupts(); // disable interrupts temporarily | ||
+ | if (humidity > humidity_treashold) { | ||
+ | sound.stopPlayback(); | ||
+ | sound.play("third.wav"); // 8-bit, mono, 16-24khz at best | ||
+ | lcd.clear(); | ||
+ | lcd.setCursor(0,0); | ||
+ | lcd.print("Playing sound..3"); | ||
+ | } else { | ||
+ | sound.stopPlayback(); | ||
+ | sound.play("fourth.wav"); // 8-bit, mono, 16-24khz at best | ||
+ | lcd.clear(); | ||
+ | lcd.setCursor(0,0); | ||
+ | lcd.print("Playing sound..4"); | ||
+ | } | ||
+ | interrupts(); // re-enable interrupts | ||
+ | } | ||
+ | } | ||
+ | |||
+ | in setup() fac setez pinii si volumul boxei si sd card-ul. | ||
+ | |||
+ | void setup(){ | ||
+ | |||
+ | //interrupt setup | ||
+ | pinMode(led_on_high_temp, OUTPUT); | ||
+ | pinMode(led_on_low_temp, OUTPUT); | ||
+ | pinMode(led_on_high_humi, OUTPUT); | ||
+ | pinMode(led_on_low_humi, OUTPUT); | ||
+ | pinMode(button_tem, INPUT_PULLUP); | ||
+ | pinMode(button_hum, INPUT_PULLUP); | ||
+ | attachInterrupt(digitalPinToInterrupt(button_tem), button_temp, FALLING); | ||
+ | attachInterrupt(digitalPinToInterrupt(button_hum), button_humi, FALLING); | ||
+ | |||
+ | // LCD setup | ||
+ | lcd.init(); | ||
+ | lcd.backlight(); | ||
+ | lcd.print("Initializing SD"); | ||
+ | |||
+ | // Open serial communications and wait for port to open: | ||
+ | Serial.begin(9600); | ||
+ | while (!Serial) { | ||
+ | ; // wait for serial port to connect. Needed for native USB port only | ||
+ | } | ||
+ | Serial.println("Initializing SD card..."); | ||
+ | if (!SD.begin(SD_ChipSelectPin)) { //see if the card is present and can be initialized | ||
+ | Serial.println("Initialization failed..."); | ||
+ | lcd.clear(); | ||
+ | lcd.print("SD init failed"); | ||
+ | return; //don't do anything more if not | ||
+ | } | ||
+ | else { | ||
+ | Serial.println("Initialization done..."); | ||
+ | lcd.clear(); | ||
+ | lcd.print("SD init done"); | ||
+ | } | ||
+ | |||
+ | dht.begin(); | ||
+ | sound.speakerPin = 9; | ||
+ | sound.quality(1); | ||
+ | sound.setVolume(5); | ||
+ | } | ||
+ | |||
+ | Functia de loop(): | ||
+ | |||
+ | void loop(){ | ||
+ | |||
+ | if (!SD.begin(SD_ChipSelectPin)) { //see if the card is present and can be initialized | ||
+ | lcd.clear(); | ||
+ | lcd.print("SD init failed"); | ||
+ | return; //don't do anything more if not | ||
+ | } | ||
+ | else { | ||
+ | lcd.clear(); | ||
+ | lcd.print("SD init done"); | ||
+ | } | ||
+ | |||
+ | if(!sound.isPlaying()) { | ||
+ | // Read temperature and humidity from DHT sensor | ||
+ | humidity = dht.readHumidity(); | ||
+ | temperature = dht.readTemperature(); | ||
+ | |||
+ | // Check if any reads failed and exit early (to try again). | ||
+ | if (isnan(humidity) || isnan(temperature)) { | ||
+ | Serial.println("Failed to read from DHT sensor!"); | ||
+ | return; | ||
+ | } | ||
+ | |||
+ | lcd.setCursor(0,0); | ||
+ | lcd.print("Temp: "); | ||
+ | lcd.print(temperature); | ||
+ | lcd.print(" C"); | ||
+ | lcd.setCursor(0,1); | ||
+ | lcd.print("Humidity: "); | ||
+ | lcd.print(humidity); | ||
+ | lcd.print(" %"); | ||
+ | |||
+ | if (temperature > temperature_threshold) { | ||
+ | digitalWrite(led_on_high_temp, HIGH); // Turn on the LED on pin 5 | ||
+ | digitalWrite(led_on_low_temp, LOW); | ||
+ | } else { | ||
+ | digitalWrite(led_on_high_temp, LOW); | ||
+ | digitalWrite(led_on_low_temp, HIGH); //Turn on the LED on pin 4 | ||
+ | } | ||
+ | |||
+ | if (humidity > humidity_treashold) { | ||
+ | digitalWrite(led_on_high_humi, HIGH); // Turn on the LED on pin 8 | ||
+ | digitalWrite(led_on_low_humi, LOW); | ||
+ | } else { | ||
+ | digitalWrite(led_on_high_humi, LOW); | ||
+ | digitalWrite(led_on_low_humi, HIGH); //Turn on the LED on pin 6 | ||
+ | } | ||
+ | |||
+ | delay(5000); | ||
+ | |||
+ | // Display temperature and humidity in the Serial Monitor | ||
+ | Serial.print("Temperature: "); | ||
+ | Serial.print(temperature); | ||
+ | Serial.println(" C"); | ||
+ | Serial.print("Humidity: "); | ||
+ | Serial.print(humidity); | ||
+ | Serial.println(" %"); | ||
+ | } | ||
+ | else { | ||
+ | lcd.clear(); | ||
+ | lcd.setCursor(0,0); | ||
+ | lcd.print("Playing sound..."); | ||
+ | } | ||
+ | } | ||
</note> | </note> | ||
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
- | <note tip> | + | Rezultatele obţinute în urma realizării proiectului. |
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | |
- | </note> | + | |
- | ===== Concluzii ===== | + | <note warning>[[https://www.youtube.com/watch?v=ALfjnH8IBiQ&ab_channel=StoianAmalia]]</note> |
- | ===== Download ===== | ||
- | <note warning> | + | {{:pm:prj2024:vstoica:breadboard_.jpeg?400|}} |
- | 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:dht11andlcd.jpeg?400|}} |
+ | {{:pm:prj2024:vstoica:sound.jpeg?400|}} | ||
- | 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**. | ||
- | </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> | + | |
+ | ===== Download ===== | ||
+ | |||
+ | {{:pm:prj2024:vstoica:stoian_georgiana-amalia_proiect_pm.zip|}} | ||
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
<note> | <note> | ||
- | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | + | https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf |
+ | |||
+ | https://www.youtube.com/watch?v=tNNycZpvg-Y&ab_channel=AndrobotTECH | ||
+ | |||
+ | https://www.youtube.com/watch?v=pOFFsiolsGU&ab_channel=AndrobotTECH | ||
+ | |||
+ | https://www.youtube.com/watch?v=CvqHkXeXN3M&t=481s&ab_channel=Tronicslk | ||
</note> | </note> | ||
<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> | ||