Tehnicko veleuciliste u Zagrebu. Mikroupravljaci, 2020.

Dependencies:   mbed titranje

1.Zadatak

Projekt ''Igračka za djecu'' sastoji se od sljedećeg hardvera:

  • mikroupravljač STM32F072 – Nucleo-64 – 1 kom.
  • potenciometar – 1 kom.
  • LED dioda – 3 kom.
  • tipkalo – 1 kom.
  • piezzo buzzer – 1 kom.
  • otpornici (470 Ω) – 8 kom.
  • sedmosegmentni zaslon – 1 kom.

Namjena projekta je da predstavlja svojevrsnu didaktičku igračku za djecu od 1 do 2 godine. U tom kontekstu, igračka bi trebala povoljno utjecati na razvoj djetetove motorike, koncentraciju, vizualnog zapažanje te razvoj logičkog razmišljanja.

Dovod napajanja ''Igrački za djecu'' na mikroupravljaču inicira treperenje integrirane LED diode (LED2) što je ujedno indikator ispravnosti uređaja. Programsko rješenje toga je izrađeno jednostavnom klasom koja se poziva na samom početku glavnog dijela programa (slika1).

https://os.mbed.com/media/uploads/sbartulov/slika_1.jpg

Glavni dio projekta se temelji na položaju potenciometra, i to na način da ukoliko je potenciometar postavljen na vrijednost manju ili jednaku 50% ukupne vrijednosti inicira se stanje ''L'' (lijevo). Ukoliko je potenciometar postavljen na vrijednost veću od 50% inicira se stanje ''D'' (desno).

Drugim riječima, okretom potenciometra u lijevu stranu aktivira se stanje ''L'', što znači da će na sedmosegmentnom zaslonu svijetliti LED ''F'' i LED ''E''. Uz to, crvena, žuta i zelena LED dioda će simulirati ''knight effect'' u smjeru s desna na lijevo.

Slijedeći istu logiku, okret potenciometra u desnu stranu aktivira stanje ''D'', što znači da će na sedmosegmentom zaslonu zasvijetliti LED ''B'' i LED ''C''. S druge strane, crvena, žuta i zelena LED dioda će, suprotno prethodnom slučaju, simulirati ''knight effect'' u smjeru s lijeva na desno (slika2).

https://os.mbed.com/media/uploads/sbartulov/slika_2.jpg

Osim navedenih mogućnosti, projekt ''Igračka za djecu'' ima mogućnost reprodukcije melodije. Programsko rješenje toga je realizirano kroz primjenu hardverskog interrupta. U tom kontekstu, pritiskom na tipkalo, zaustavlja se stanje (L ili D) u kojem se nalazila igračka, a piezzo buzzer reproducira melodiju ''orange and lemonade''. Programski, melodija se sastoji od 12 nota gdje je definirana frekvencija i trajanje svake note. Uz to, dok se reproducira melodija, sve LED diode na igrački trepere sukladno trajanju nota.

https://os.mbed.com/media/uploads/sbartulov/slika_3.jpg

Nakon završetka melodije potaknute hardverskim interruptom, igračka se vraća na stanje u kojem je bila neposredno prije pritiska tipkala te nastavlja s daljnjim radom.

2. Shema projekta ''Igračka za djecu''

https://os.mbed.com/media/uploads/sbartulov/slika_4.jpg

Revision:
0:dffdc90cbbbd
diff -r 000000000000 -r dffdc90cbbbd main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Thu Nov 19 16:16:19 2020 +0000
@@ -0,0 +1,146 @@
+
+#include "mbed.h"
+#include "titranje.h"
+AnalogIn pot(A0); // crveni kabel
+InterruptIn tipkalo(D2,PullUp); //tipkalo
+DigitalOut crvena(D13); 
+DigitalOut zuta(D12);
+DigitalOut zelena(D11);
+DigitalOut e(D4); //tamnoplavi kabel
+DigitalOut f(D5); //ljubičasti kabel
+DigitalOut b(D6); //sivi kabel
+DigitalOut c(D7); //bijeli kabel
+PwmOut buzzer(D10); //narancasti kabel
+
+Ticker mamacL;
+Ticker mamacD;
+Timer debounce;
+
+float datap;
+int on=1, off=0;
+
+float frequency[]={659,554,659,554,550,494,554,587,494,659,554,440}; //frequency array oranges and lemo
+float beat[]={1,1,1,1,1,0.5,0.5,1,1,1,1,2};
+
+void zvuk(void);
+void titrajL(void);
+void titrajD(void);
+void blink(void);
+void blinkL(void);        
+void blinkD(void);   
+titranje led(LED2);
+
+int main() {
+    debounce.start();
+    buzzer=off;
+    tipkalo.rise(&zvuk);
+  led.stanje_ok();
+    
+    while (1){
+       datap=pot.read();
+       
+       if (datap<=0.5) {
+            mamacL.attach(&blinkL,0.4);
+            f=e=1;
+            b=c=0;
+            titrajL();}
+        else{
+            mamacD.attach(&blinkD,0.4);
+            f=e=0;
+            b=c=1;
+            titrajD();}
+       
+}}
+ 
+void zvuk(void) {
+    crvena=zuta=zelena=1;
+    b=c=f=e=1;
+    
+    if(debounce.read_ms()>200){
+        
+for (int i=0; i<=12; i++) {
+            blink();
+            
+            buzzer.period(1/(frequency[i])); // set PWM period
+            buzzer=0.5; // set duty cycle
+            wait(0.5*beat[i]);
+                 if(i==12){
+                    buzzer=off;
+
+                    debounce.reset();
+     break;}
+     }
+} }
+
+void blinkL(void) {
+    f=!f;
+    e=!e;
+    mamacL.detach();}
+    
+void blinkD(void) {
+    b=!b;
+    c=!c;
+    mamacD.detach();}
+    
+void titrajL(void) {
+    crvena=1;
+    zuta=0;
+    zelena=0;
+    wait(0.4);
+    crvena=1;
+    zuta=1;
+    zelena=0;
+    wait(0.4);
+    crvena=1;
+    zuta=1;
+    zelena=1;
+    wait(0.4);
+    crvena=1;
+    zuta=1;
+    zelena=0;
+    wait(0.4);
+    crvena=1;
+    zuta=0;
+    zelena=0;
+    wait(0.4);
+    crvena=0;
+    zuta=0;
+    zelena=0;
+    wait(0.4);}
+
+void titrajD(void) {
+    crvena=0;
+    zuta=0;
+    zelena=1;
+    wait(0.4);
+    crvena=0;
+    zuta=1;
+    zelena=1;
+    wait(0.4);
+    crvena=1;
+    zuta=1;
+    zelena=1;
+    wait(0.4);
+    crvena=0;
+    zuta=1;
+    zelena=1;
+    wait(0.4);
+    crvena=0;
+    zuta=0;
+    zelena=1;
+    wait(0.4);
+    crvena=0;
+    zuta=0;
+    zelena=0;
+    wait(0.4);}
+    
+void blink(void){
+    crvena=!crvena;
+    zuta=!zuta;
+    zelena=!zelena;
+    b=!b;
+    c=!c;
+    f=!f;
+    e=!e;
+    }
+    
\ No newline at end of file