Arduino – Pīkstulis, gaismas skaņa un melodija
Šajā nodarbībā iemācīsimies izmantot pīkstuli (buzzer), lai skaņa mainās atkarībā no gaismas daudzuma. Izgatavosim iekārtu, kas atskaņo melodiju.
Nepieciešamie komponenti
- Arduino kontrolieris (piem. Uno, Nano) ar USB kabeli
- Bredbords 400 punktu Half+
- Savienošanas vadi 10cm male-male 5 gab
- Pīkstulis (5V active buzzer)
- Rezistors 10KΩ 1 gab., 220Ω 1 gab.
- Fotorezistors 5506
Skaidrojums
Skaņas frekvence mainīsies atkarībā no fotorezistora apgaismojuma. Atkarībā no saņemtā gaismas daudzuma, caur fotorezistoru plūst strāva ar dažādu stiprumu, kurš tiks izmērīts pie Arduino mikrokontroliera analogās ieejas.
Slēgums
Slēdzam pie analogā pina A0, un digitālā pina D12.
Lietojam 10KΩ rezistoru pie fotorezistora.
Uzlīme uz pīkstuļa ir skaļuma ierobežošanai, to var noņemt. Svarīga ir pīkstuļa polaritāte (+).
Programma
Kā pieslēgt Arduino un kā lietot Arduino IDE programmu skatiet 1.nodarbībā
Atveram Arduino IDE programmu.
Fails – Jauns
Iekopējam kodu, tad Fails – Saglabāt. Pārbaudīt, tad Augšupielādēt.
/* Gaismas mūzika */ int sensorValue; int sensorLow = 1023; int sensorHigh = 0; const int ledPin = 13; void setup() { pinMode(ledPin, OUTPUT); // ieslēdz iebūvēto LED digitalWrite(ledPin, HIGH); while (millis() < 5000) { // kalibrē 5 sekundes sensorValue = analogRead(A0); if (sensorValue > sensorHigh) { sensorHigh = sensorValue; } if (sensorValue < sensorLow) { sensorLow = sensorValue; } } digitalWrite(ledPin, LOW); // izslēdz iebūvēto LED } void loop() { sensorValue = analogRead(A0); // nolasa fotorezistoru, analogais pins int pitch = map(sensorValue,sensorLow,sensorHigh, 50, 4000); tone(12,pitch,20); // funkcija tone - pīkstuļa pins, frekvence, ilgums ms. delay(10); }
Kad sāk skanēt, pārvietojam rokas virs fotorezistora, mēģinot izvilināt dažādas skaņas.
Papildu uzdevums 1
Izveidot slēgumu, lai varētu spēlēt dažādas melodijas.
Starp pīkstuli un digitālo pinu izmantojam rezistoru, lai strāvas stiprums uz to nepārsniegtu 0.025A (aprēķins: 5V / 0.025A = 200Ω, lietojam 220Ω rezistoru).
Programma
Melodija “Zvaniņš skan” (Jingle bells)
Notis pierakstām ar burtiem, bet pārtraukumus ar tukšumu.
Nots garumu liekam 2, bet notij ar tukšo vidu 4. Garumu arī tukšumiem, piem. 5.
Daudzums ir nošu un tukšumu skaits. Tempu (200) var mainīt pēc vēlmēm.
int skanPin = 12; int daudzums = 26; char notis[] = "eeeeeeegcde fffffeeeddedg "; int notsgarums[] = {2, 2, 4, 2, 2, 4, 2, 2, 2, 2, 5, 1, 2, 2, 2, 3, 2, 2, 2, 3, 2, 2, 2, 2, 4, 9}; int temps = 200; void speletToni(int tonis, int ilgums) { for (long i=0; i < ilgums * 1000L; i += tonis * 2) { digitalWrite(skanPin, HIGH); delayMicroseconds(tonis); digitalWrite(skanPin, LOW); delayMicroseconds(tonis); } } void speletNoti(char nots, int ilgums) { char vardi[] = { 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C' }; int toni[] = { 1915, 1700, 1519, 1432, 1275, 1136, 1014, 956 }; for (int i = 0; i < 8; i++) { if (vardi[i] == nots) { speletToni(toni[i], ilgums); } } } void setup() { pinMode(skanPin, OUTPUT); } void loop() { for (int i = 0; i < daudzums; i++) { if (notis[i] == ' ') { delay(notsgarums[i] * temps); } else { speletNoti(notis[i], notsgarums[i] * temps); } delay(temps / 2); } }
Papildu uzdevums 2
Izveidot jebkuru savu melodiju, labojot kodā 3 rindas:
int daudzums = 26; //nošu un tukšumu skaits char notis[] = "eeeeeeegcde fffffeeeddedg "; int notsgarums[] = {2, 2, 4, 2, 2, ... , 9};
<< Iepriekšējā, 9. nodarbība | Nākamā, 11. nodarbība >>
Arduino sākumkomplekts 12 nodarbībām – 32.00€
Piegāde ar Latvijas pastu vai pakomātu (Omniva, DPD, PastaStacija) – 3.00€
Pasūtīšana un papildu info pa tālr.: 29216755 vai e-pastu: info[at]orient.lv
-
Arduino sākumkomplekts 12 nodarbībām NANO€45.00
-
Mini USB kabelis 80cm€1.80
-
Aktīvais pīkstulis 5V€0.50
-
Savienošanas vadi 10cm/20cm – 20gab.€3.00 – €4.00
-
Bredbords half+ 400-punktu€5.00
-
Fotorezistori, optiskie rezistori€0.20
-
Rezistori (pretestības) 0.25W metāla plēves€0.10
-
NodeMcu V3 ESP8266 CH340G ESP-12E WIFI€14.00
-
NANO 3.0 ATmega328P, Mini USB, CH340G€12.00