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

Committer:
sbartulov
Date:
Thu Nov 19 16:16:19 2020 +0000
Revision:
0:dffdc90cbbbd
Tehnicko veleuciliste u Zagrebu.; Elektrotehnicki odjel.; Mikroupravljaci, 2020.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sbartulov 0:dffdc90cbbbd 1
sbartulov 0:dffdc90cbbbd 2 #include "mbed.h"
sbartulov 0:dffdc90cbbbd 3 #include "titranje.h"
sbartulov 0:dffdc90cbbbd 4 AnalogIn pot(A0); // crveni kabel
sbartulov 0:dffdc90cbbbd 5 InterruptIn tipkalo(D2,PullUp); //tipkalo
sbartulov 0:dffdc90cbbbd 6 DigitalOut crvena(D13);
sbartulov 0:dffdc90cbbbd 7 DigitalOut zuta(D12);
sbartulov 0:dffdc90cbbbd 8 DigitalOut zelena(D11);
sbartulov 0:dffdc90cbbbd 9 DigitalOut e(D4); //tamnoplavi kabel
sbartulov 0:dffdc90cbbbd 10 DigitalOut f(D5); //ljubičasti kabel
sbartulov 0:dffdc90cbbbd 11 DigitalOut b(D6); //sivi kabel
sbartulov 0:dffdc90cbbbd 12 DigitalOut c(D7); //bijeli kabel
sbartulov 0:dffdc90cbbbd 13 PwmOut buzzer(D10); //narancasti kabel
sbartulov 0:dffdc90cbbbd 14
sbartulov 0:dffdc90cbbbd 15 Ticker mamacL;
sbartulov 0:dffdc90cbbbd 16 Ticker mamacD;
sbartulov 0:dffdc90cbbbd 17 Timer debounce;
sbartulov 0:dffdc90cbbbd 18
sbartulov 0:dffdc90cbbbd 19 float datap;
sbartulov 0:dffdc90cbbbd 20 int on=1, off=0;
sbartulov 0:dffdc90cbbbd 21
sbartulov 0:dffdc90cbbbd 22 float frequency[]={659,554,659,554,550,494,554,587,494,659,554,440}; //frequency array oranges and lemo
sbartulov 0:dffdc90cbbbd 23 float beat[]={1,1,1,1,1,0.5,0.5,1,1,1,1,2};
sbartulov 0:dffdc90cbbbd 24
sbartulov 0:dffdc90cbbbd 25 void zvuk(void);
sbartulov 0:dffdc90cbbbd 26 void titrajL(void);
sbartulov 0:dffdc90cbbbd 27 void titrajD(void);
sbartulov 0:dffdc90cbbbd 28 void blink(void);
sbartulov 0:dffdc90cbbbd 29 void blinkL(void);
sbartulov 0:dffdc90cbbbd 30 void blinkD(void);
sbartulov 0:dffdc90cbbbd 31 titranje led(LED2);
sbartulov 0:dffdc90cbbbd 32
sbartulov 0:dffdc90cbbbd 33 int main() {
sbartulov 0:dffdc90cbbbd 34 debounce.start();
sbartulov 0:dffdc90cbbbd 35 buzzer=off;
sbartulov 0:dffdc90cbbbd 36 tipkalo.rise(&zvuk);
sbartulov 0:dffdc90cbbbd 37 led.stanje_ok();
sbartulov 0:dffdc90cbbbd 38
sbartulov 0:dffdc90cbbbd 39 while (1){
sbartulov 0:dffdc90cbbbd 40 datap=pot.read();
sbartulov 0:dffdc90cbbbd 41
sbartulov 0:dffdc90cbbbd 42 if (datap<=0.5) {
sbartulov 0:dffdc90cbbbd 43 mamacL.attach(&blinkL,0.4);
sbartulov 0:dffdc90cbbbd 44 f=e=1;
sbartulov 0:dffdc90cbbbd 45 b=c=0;
sbartulov 0:dffdc90cbbbd 46 titrajL();}
sbartulov 0:dffdc90cbbbd 47 else{
sbartulov 0:dffdc90cbbbd 48 mamacD.attach(&blinkD,0.4);
sbartulov 0:dffdc90cbbbd 49 f=e=0;
sbartulov 0:dffdc90cbbbd 50 b=c=1;
sbartulov 0:dffdc90cbbbd 51 titrajD();}
sbartulov 0:dffdc90cbbbd 52
sbartulov 0:dffdc90cbbbd 53 }}
sbartulov 0:dffdc90cbbbd 54
sbartulov 0:dffdc90cbbbd 55 void zvuk(void) {
sbartulov 0:dffdc90cbbbd 56 crvena=zuta=zelena=1;
sbartulov 0:dffdc90cbbbd 57 b=c=f=e=1;
sbartulov 0:dffdc90cbbbd 58
sbartulov 0:dffdc90cbbbd 59 if(debounce.read_ms()>200){
sbartulov 0:dffdc90cbbbd 60
sbartulov 0:dffdc90cbbbd 61 for (int i=0; i<=12; i++) {
sbartulov 0:dffdc90cbbbd 62 blink();
sbartulov 0:dffdc90cbbbd 63
sbartulov 0:dffdc90cbbbd 64 buzzer.period(1/(frequency[i])); // set PWM period
sbartulov 0:dffdc90cbbbd 65 buzzer=0.5; // set duty cycle
sbartulov 0:dffdc90cbbbd 66 wait(0.5*beat[i]);
sbartulov 0:dffdc90cbbbd 67 if(i==12){
sbartulov 0:dffdc90cbbbd 68 buzzer=off;
sbartulov 0:dffdc90cbbbd 69
sbartulov 0:dffdc90cbbbd 70 debounce.reset();
sbartulov 0:dffdc90cbbbd 71 break;}
sbartulov 0:dffdc90cbbbd 72 }
sbartulov 0:dffdc90cbbbd 73 } }
sbartulov 0:dffdc90cbbbd 74
sbartulov 0:dffdc90cbbbd 75 void blinkL(void) {
sbartulov 0:dffdc90cbbbd 76 f=!f;
sbartulov 0:dffdc90cbbbd 77 e=!e;
sbartulov 0:dffdc90cbbbd 78 mamacL.detach();}
sbartulov 0:dffdc90cbbbd 79
sbartulov 0:dffdc90cbbbd 80 void blinkD(void) {
sbartulov 0:dffdc90cbbbd 81 b=!b;
sbartulov 0:dffdc90cbbbd 82 c=!c;
sbartulov 0:dffdc90cbbbd 83 mamacD.detach();}
sbartulov 0:dffdc90cbbbd 84
sbartulov 0:dffdc90cbbbd 85 void titrajL(void) {
sbartulov 0:dffdc90cbbbd 86 crvena=1;
sbartulov 0:dffdc90cbbbd 87 zuta=0;
sbartulov 0:dffdc90cbbbd 88 zelena=0;
sbartulov 0:dffdc90cbbbd 89 wait(0.4);
sbartulov 0:dffdc90cbbbd 90 crvena=1;
sbartulov 0:dffdc90cbbbd 91 zuta=1;
sbartulov 0:dffdc90cbbbd 92 zelena=0;
sbartulov 0:dffdc90cbbbd 93 wait(0.4);
sbartulov 0:dffdc90cbbbd 94 crvena=1;
sbartulov 0:dffdc90cbbbd 95 zuta=1;
sbartulov 0:dffdc90cbbbd 96 zelena=1;
sbartulov 0:dffdc90cbbbd 97 wait(0.4);
sbartulov 0:dffdc90cbbbd 98 crvena=1;
sbartulov 0:dffdc90cbbbd 99 zuta=1;
sbartulov 0:dffdc90cbbbd 100 zelena=0;
sbartulov 0:dffdc90cbbbd 101 wait(0.4);
sbartulov 0:dffdc90cbbbd 102 crvena=1;
sbartulov 0:dffdc90cbbbd 103 zuta=0;
sbartulov 0:dffdc90cbbbd 104 zelena=0;
sbartulov 0:dffdc90cbbbd 105 wait(0.4);
sbartulov 0:dffdc90cbbbd 106 crvena=0;
sbartulov 0:dffdc90cbbbd 107 zuta=0;
sbartulov 0:dffdc90cbbbd 108 zelena=0;
sbartulov 0:dffdc90cbbbd 109 wait(0.4);}
sbartulov 0:dffdc90cbbbd 110
sbartulov 0:dffdc90cbbbd 111 void titrajD(void) {
sbartulov 0:dffdc90cbbbd 112 crvena=0;
sbartulov 0:dffdc90cbbbd 113 zuta=0;
sbartulov 0:dffdc90cbbbd 114 zelena=1;
sbartulov 0:dffdc90cbbbd 115 wait(0.4);
sbartulov 0:dffdc90cbbbd 116 crvena=0;
sbartulov 0:dffdc90cbbbd 117 zuta=1;
sbartulov 0:dffdc90cbbbd 118 zelena=1;
sbartulov 0:dffdc90cbbbd 119 wait(0.4);
sbartulov 0:dffdc90cbbbd 120 crvena=1;
sbartulov 0:dffdc90cbbbd 121 zuta=1;
sbartulov 0:dffdc90cbbbd 122 zelena=1;
sbartulov 0:dffdc90cbbbd 123 wait(0.4);
sbartulov 0:dffdc90cbbbd 124 crvena=0;
sbartulov 0:dffdc90cbbbd 125 zuta=1;
sbartulov 0:dffdc90cbbbd 126 zelena=1;
sbartulov 0:dffdc90cbbbd 127 wait(0.4);
sbartulov 0:dffdc90cbbbd 128 crvena=0;
sbartulov 0:dffdc90cbbbd 129 zuta=0;
sbartulov 0:dffdc90cbbbd 130 zelena=1;
sbartulov 0:dffdc90cbbbd 131 wait(0.4);
sbartulov 0:dffdc90cbbbd 132 crvena=0;
sbartulov 0:dffdc90cbbbd 133 zuta=0;
sbartulov 0:dffdc90cbbbd 134 zelena=0;
sbartulov 0:dffdc90cbbbd 135 wait(0.4);}
sbartulov 0:dffdc90cbbbd 136
sbartulov 0:dffdc90cbbbd 137 void blink(void){
sbartulov 0:dffdc90cbbbd 138 crvena=!crvena;
sbartulov 0:dffdc90cbbbd 139 zuta=!zuta;
sbartulov 0:dffdc90cbbbd 140 zelena=!zelena;
sbartulov 0:dffdc90cbbbd 141 b=!b;
sbartulov 0:dffdc90cbbbd 142 c=!c;
sbartulov 0:dffdc90cbbbd 143 f=!f;
sbartulov 0:dffdc90cbbbd 144 e=!e;
sbartulov 0:dffdc90cbbbd 145 }
sbartulov 0:dffdc90cbbbd 146