This shows you the differences between two versions of the page.
info2:laboratoare:06 [2019/04/02 14:23] george.stoica0310 |
info2:laboratoare:06 [2021/04/06 15:59] (current) alexandru.vochescu [Pini Analogici] |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ===== Laboratorul 06 - Exerciții ===== | + | ====== Laboratorul 06 - PWM ====== |
- | - Realizați funcția ** void my_blink (int led) **, ce primește ca parametru pinul la care este conectat un led și faceți led-ul să clipească de 3 ori cu pauză de 1 secundă între stările de aprins. | + | ===== Scop ===== |
- | - Pe un șir de 8 led-uri, aplicați funcția ** my_blink ** pe led-urile pare. | + | * familiarizarea cu operațiile analogice de output |
- | - Realizați funcția ** isPressed(int button) ** care întoarce 1 dacă butonul este apăsat și 0 dacă butonul nu este apăsat. | + | |
- | - | + | ===== Cuvinte cheie ===== |
+ | * pinMode, analogWrite, PWM, rezistor | ||
+ | * frecvență, uptime, perioadă | ||
+ | |||
+ | ===== Pulse Width Modulation ===== | ||
+ | |||
+ | Pulse Width Modulation este o metoda de a reduce puterea eliberată de un semnal electric, prin partajarea semnalului în părți discrete. | ||
+ | |||
+ | {{:info2:duty_cycle_examples.png?400|200}} | ||
+ | |||
+ | Fizic, pentru a reduce puterea eliberată de un Arduino, îi spunem să elibereze 5v în eșantioane de timp. Astfel, dacă vrem o medie de putere eliberată de 2.5V, setăm pinul respectiv să elibereze 5v, jumătate din timp. | ||
+ | |||
+ | ==== Pini Analogici ==== | ||
+ | |||
+ | Spre deosebire de pinii digitali care pot elibera doar 0 sau 5v, pinii analogici pot citi sau scrie valori mai variate (folosite pentru finețea măsurătorii). Valorile de scriere pot fi între 0-255 care sunt mapate pentru 0 - 5v. | ||
+ | |||
+ | Pinii analogici sunt cei din secțiunea "Analog in", iar cei care au capacitatea de PWM sunt pinii digitali semanlizați cu **"~"** în față (de exemplu pinul ~3 sau pinul ~11). | ||
+ | |||
+ | ==== Analog Write ==== | ||
+ | |||
+ | Pentru a folosi Pulse Width Modulaton (PWM) folosim **analogWrite** în loc de **digitalWrite** | ||
+ | |||
+ | <code arduino.c> | ||
+ | |||
+ | void setup() { | ||
+ | pinMode(PINUL_MEU, OUTPUT); | ||
+ | } | ||
+ | void loop() { | ||
+ | analogWrite(PINUL_MEU, 127); //Aprindem pinul la jumătate in intensitatea maximă | ||
+ | delay(3000); // Așteaptă 3 secunde | ||
+ | analogWrite(PINUL_MEU, 0); // Ledul este stins | ||
+ | |||
+ | analogWrite(PINUL_MEU, 255); //Aprindem pinul la intensitatea maximă | ||
+ | delay(3000); // Așteaptă 3 secunde | ||
+ | analogWrite(PINUL_MEU, 0); // Ledul este stins | ||
+ | |||
+ | analogWrite(PINUL_MEU, 68); //Aprindem pinul la un sfert din intensitatea maximă | ||
+ | delay(3000); // Așteaptă 3 secunde | ||
+ | analogWrite(PINUL_MEU, 0); // Ledul este stins | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | ===== Utilizarea unui Buzzer ===== | ||
+ | |||
+ | Un Buzzer sau un difuzor piezo este un difuzor care este capabil să redea sunete simple și care se poate conecta extrem de ușor. Avem nevoie de: | ||
+ | * O placă de dezvoltare Arduino | ||
+ | * Un breadboard | ||
+ | * O rezistență de 100 de Ohmi | ||
+ | * Un buzzer | ||
+ | |||
+ | Schema de conectare este următoarea: | ||
+ | |||
+ | {{:info2:laboratoare:piezo.png?600|}} | ||
+ | |||
+ | Pentru a putea interacționa din cod cu buzzer-ul avem la dispoziție următoarele funcții: | ||
+ | |||
+ | * Funcția //tone// - redă pe un anumit pin precizat un semnal sonor la o frecvență dată | ||
+ | <code c tone> | ||
+ | tone(9, 1000); // redă pe pinul digital 9, un semnal sonor la frecvența de 1 KHz | ||
+ | </code> | ||
+ | |||
+ | * Funcția //notone// - oprește transmisia de semnal sonor pe un anumit pin | ||
+ | <code c notone> | ||
+ | noTone(9); // oprește redarea de sunet de pe pinul 9 | ||
+ | </code> | ||
+ | |||
+ | <note important> | ||
+ | În Tinkercad, veți găsi în listă Buzzer-ul cu numele **Piezo**. | ||
+ | </note> | ||
+ | |||
+ | ===== Exerciții ===== | ||
+ | Toate exercițiile vor fi realizate pe [[https://www.tinkercad.com/| Tinkercad]] | ||
+ | - Folosind un Buzzer redați câte un sunet scurt (un bâzâit) pe placă o dată pe secundă. (**Hint**: delay) | ||
+ | - Adaptați exercițiul anterior pentru a simula o sirenă de poliție folosind și un led rgb. | ||
+ | - Folosind un **for** aprindeți un led de la intensitate mică, la maxim, la din nou intensitate mică și în final stins complet folosind **analogWrite** și **delay**. | ||
+ | - Folosind o funcție care primește doi parametri ce reprezintă **pini pentru led-uri**. Porniți cu un led aprins maxim și unul stins, pe cel stins aprindeți-l pe o perioadă de timp similar cu exercițiul 3 iar pe cel aprins, stingeți-l pe o perioadă de timp. | ||
+ | - Parcurgeți o serie de minim 5 led-uri și aplicați pe fiecare, principiul de la exercițiul 3. | ||
+ | - Implementați sau căutați implementarea redării melodiei "Twinkle Twinkle Little Star" și parcurgeți codul pentru a-l înțelege. | ||
+ | - Folosind un led pe care îl conectați la placă, modificați implementarea de la exercițiul anterior și asociați fiecărei note o intensitate cu care să fie aprins led-ul atunci când nota respectivă este redată. | ||
+ | - Adaptați exercițiul anterior folosind un LED RGB cu intensități de lumină și combinații de culori diferite alese de voi. |