This shows you the differences between two versions of the page.
info2:laboratoare:08 [2021/04/19 12:37] alexandru.vochescu |
info2:laboratoare:08 [2021/04/27 17:55] (current) alexandru.vochescu [Senzor de temperatură] |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ===== Laboratorul 08 - Citire de pe pini ===== | + | ====== Laboratorul 08 - Citire de pe pini ====== |
===== Scop ===== | ===== Scop ===== | ||
Line 10: | Line 10: | ||
* buton, senzor, pullup, pulldown | * buton, senzor, pullup, pulldown | ||
- | ===== Utilizare digitalRead ===== | + | ====== Citirea de date de pe un pin ====== |
<code arduino.c> | <code arduino.c> | ||
- | int buton = 2; | + | int button = 2; |
void setup() | void setup() | ||
{ | { | ||
Serial.begin(9600); // Setăm frecvența pentru Serial Monitor | Serial.begin(9600); // Setăm frecvența pentru Serial Monitor | ||
Serial.println("Am început programul"); | Serial.println("Am început programul"); | ||
- | pinMode(buton, INPUT); | + | pinMode(button, INPUT); |
} | } | ||
int buttonState = 0; | int buttonState = 0; | ||
void loop() | void loop() | ||
{ | { | ||
- | buttonState = digitalRead(buton); | + | buttonState = digitalRead(button); |
Serial.print("Starea butonului este: "); // Mesaj ce precedează valoarea | Serial.print("Starea butonului este: "); // Mesaj ce precedează valoarea | ||
Serial.println(buttonState); | Serial.println(buttonState); | ||
Line 29: | Line 29: | ||
</code> | </code> | ||
- | Outputul codului de mai sus va vi: | + | Output-ul codului de mai sus va fi: |
Am început programul | Am început programul | ||
Line 50: | Line 50: | ||
Veți avea nevoie de: | Veți avea nevoie de: | ||
* Un Arduino Uno | * Un Arduino Uno | ||
- | * Un button | + | * Un buton |
* O rezistență de 1k ohmi | * O rezistență de 1k ohmi | ||
Modul de folosire a butonului: | Modul de folosire a butonului: | ||
- | {{:info2:laboratoare:arduino_button.png?400|200}} | ||
- | În situația de mai sus, pinul 4 trebuie setat pe INPUT | + | {{:info2:laboratoare:arduino_button.png?500|200}} |
- | iar citirea datelor de la buton se face folosind ** int valoare = digitalRead(4) ** | + | |
+ | În situația de mai sus, pinul 4 trebuie setat pe INPUT. | ||
+ | iar citirea datelor de la buton se face folosind: | ||
+ | <code ceva.c> | ||
+ | int value = digitalRead(4) | ||
+ | </code> | ||
===== analogRead vs digitalRead ===== | ===== analogRead vs digitalRead ===== | ||
Line 64: | Line 67: | ||
* analogRead returnează valori între 0 - 1023, iar analogRead poate fi folosit doar pe pinii **analogici**: A0 - A5. Exemplu: pinMode(A0, INPUT) | * analogRead returnează valori între 0 - 1023, iar analogRead poate fi folosit doar pe pinii **analogici**: A0 - A5. Exemplu: pinMode(A0, INPUT) | ||
- | ===== Senzor de lumina ===== | + | ====== Senzor de lumină ====== |
Mod de utilizare: | Mod de utilizare: | ||
- | {{:info2:laboratoare:photoresistor_arduino.png?400|200}} | ||
- | Senzorul de lumină este un rezistor cu rezistența variabilă în funcție de lumină. | + | {{:info2:laboratoare:photoresistor_arduino.png?500|200}} |
+ | |||
+ | Senzorul de lumină (fotorezistor) este un rezistor cu rezistența variabilă în funcție de lumină. | ||
Citirea datelor pe cazul de mai sus: | Citirea datelor pe cazul de mai sus: | ||
* Setăm pinul A0 pe INPUT | * Setăm pinul A0 pe INPUT | ||
- | * folosim o variabilă light_sensor să citim datele folosind **analogRead** | + | * Folosim o variabilă light_sensor să citim datele folosind **analogRead** |
+ | |||
+ | ====== Senzor de temperatură ====== | ||
+ | Mod de utilizare: | ||
+ | |||
+ | {{:info2:laboratoare:arduino_tmp.png?500|}} | ||
+ | |||
+ | Senzorul de temperatură este un rezistor cu rezistența variabilă în funcție de temperatură. | ||
+ | |||
+ | Citirea datelor se face în mod similar senzorului de lumină, însă va trebui să facem o conversie din valoarea citită în valoarea de tensiune echivalentă, iar apoi din valoarea de tensiune în valoarea efectivă de temperatură: | ||
+ | * Setăm pinul A0 pe INPUT | ||
+ | * Folosim o variabilă //reading// să citim datele folosind **analogRead** | ||
+ | * Conversia valorii citite în valoarea de tensiune: | ||
+ | <code voltage_to_reading.c> | ||
+ | float voltage = reading * (5000 / 1024.0); // 5000 - 5V, 1024 - val maximă ADC | ||
+ | </code> | ||
+ | * Conversia valorii de tensiune în valoarea efectivă de temperatură: | ||
+ | <code reading_to_temp.c> | ||
+ | float temperature = (voltage - 500) / 10; | ||
+ | </code> | ||
- | ===== Exerciții ===== | + | ====== Exerciții ====== |
- | - Folosiți interfața seriala pentru a afișa la infinit un mesaj de tipul: "Salut, numele meu este X și am Y ani". Mesajul trebuie să fie afișat unul pe linie, iar X și Y trebuie să fie variabile în cod (Nu folosiți direct valorile voastre). | + | - Realizați un circuit cu un buton și un led. Când butonul este apăsat, ledul trebuie să se aprindă. Inițial, legați rezistența spre GND, similar cu modul de conectare prezentat în laborator, iar apoi mutați rezistența între sursa de tensiune și buton și firul de pe care citim datele mutați-l pe pinul din stânga sus al butonului . Observați diferența. De ce se întâmplă asta? |
- | - Realizați un circuit cu un buton și un led. Când butonul este apăsat, ledul trebuie să se aprindă. Inițial, legați rezistența spre GND, similar cu imaginea de mai sus, ulterior, legați butonul să vină spre GND. Observați diferența. | + | |
- Realizați un circuit cu un senzor de lumină și afișați datele citite de acesta pe interfața serială. **BONUS** Când lumina scade sub un anumit nivel, aprindeți un LED. | - Realizați un circuit cu un senzor de lumină și afișați datele citite de acesta pe interfața serială. **BONUS** Când lumina scade sub un anumit nivel, aprindeți un LED. | ||
+ | - Conectați un senzor de temperatură la arduino și un led rgb. Setați 5 intervale de confort din punct de vedere al temperaturii în care să aprindeți led-ul cu o anumită culoare respectivă (de exemplu, pentru intervalul 20-25 de grade aprindem led-ul cu culoarea verde, iar pentru temperaturi peste 40 de grade aprindem led-ul roșu, etc.). | ||
+ | - Adaptați exercițiul anterior folosind un Buzzer care va reda câte un bâzâit scurt specific fiecărui interval. | ||
+ | - Realizați un semafor inteligent pentru mașini și pietoni (similar laboratoarelor anterioare). Cerințele de bază sunt: | ||
+ | * Semaforul să funcționeze la infinit (adică verde mașini, roșu pietoni -> galben mașini, roșu pietoni -> roșu mașini, verde pietoni -> ...) | ||
+ | * Pietonii să aibă un buton la dispoziție prin care să scurteze durata de așteptare la semafor (de exemplu, la apăsarea semaforului se va face imediat galben la mașini). | ||
+ | - Căutați pe google schema de conectare unui senzor PIR (folosit în sistemele de securitate pentru detecția intrușilor) și realizați un mic sistem de alarmă folosind un Buzzer și un led RGB care să reacționeze la detecția unui obstacol. Pentru a putea influnța valorile citite de senzor, dați click pe acesta și apoi puteți modifica poziția unui obiect în câmpul detectat de senzor. |