Konstrukcijski rad Nino Kovačić

Dependencies:   mbed led_Za_KRAJ

Sklop se sastoji od : • 4 tipkala koji su programirani kao hardverski interupti • 1 potenciometar spojen na analogni input • 4 signalne LED diode koje pokazuj status rad • 1 buzer koji je programiran na različite frekvencije zvuka • 2 komada 12VDC elektromotora spojeno preko mosfet sklopa IRF520 • 1 komad NXP LPC1768 mikroupraljvača • 1 napajanje 5VDC 800mA • 1 napajanje 12VDC 2A

DJELOVANJE SKLOPA Pokretanje i zaustavljanje • pritisak tipke start pokreće se odabrani motorčić • odabir motorčića preko tipki „lijevo“ ili „desno“ • Potenciometar odabire brzinu vrtnje • Zaustavljanje motorčića pomoću tipke stop

Signalizacija LED diodama: • Motorčić u radu – pali se zelena LED • Motorčići ne rade – upaljena crvena LED dioda • Lijevi motorčić – lijeva žuta LED dioda • Desni motorčić – desna žuta LED dioda • „Maksimalno vrijeme“ rada treptajuća zelena LED dioda

Signalizacija zvučna: • Svaki pritisak tipke buzzer ispušta kratki zvuk • Dok je bilo koji motorčić u radu buzzer ispušta periodički ponavljajući zvuk

Tipkala su programirana kao hardverski interupti što znače da se u programu nalaze u MAIN dijelu program prije neprekidne WHILE petlje. Ulazi su pomoću jednog timera i 4 zasebne funkcije „debouncani“ tj čeka se 100ms za očitanje pravog stanja tipkala. Očitanje se vrši na padajući brid to jest na spoj prema 0V. Funkcije same po sebi su nužne za funkcioniranje programa te su definirane na početku programa a na kraju program nalaze se njihovi kodovi.

Kroz funkcije napravljeno je različito funkcioniranje buzzera, debounce te PWM upravljanje izlazima za upravljanje motorčićima preko MOSFET sklopa. Mosfet sklop IRF520 se koriti jer su motorčići napajani sa dodatnim napajanjem 12VDC , dok se sami mikro upravljač napaja sa iz USB ili 5VDC. Ticker je iskorišten za periodiko ponavljanje buzzera dok se bilo koji motorčić vrti. Samom sklopu je za vježbu dodano maksimalno vrijeme koliko sklop može raditi. Za potrebe vježbe postavljeno je vrijem od 10sekundi. Nakon istek maksimalnog vremena poziva se klasa u kojoj je isprogramirano blicanje druge zelene LED diode kao pokazatelja da je vrijeme prošlo. Reset maksimalnog vremena obavlja se resetom mikro upravljača.

Committer:
nkovacic
Date:
Tue Nov 10 12:26:11 2020 +0000
Revision:
0:7e85a1ad7266
Child:
1:47811d27625b
Construction work, TVZ, 2020/21 Nino Kovacic

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nkovacic 0:7e85a1ad7266 1 #include "mbed.h"
nkovacic 0:7e85a1ad7266 2 #include "led_Za_KRAJ.h"
nkovacic 0:7e85a1ad7266 3 //tipkala kao interupti
nkovacic 0:7e85a1ad7266 4 InterruptIn tipstart(p5,PullUp);
nkovacic 0:7e85a1ad7266 5 InterruptIn tipstop(p6,PullUp);
nkovacic 0:7e85a1ad7266 6 InterruptIn tiplijevo(p7,PullUp);
nkovacic 0:7e85a1ad7266 7 InterruptIn tipdesno(p8,PullUp);
nkovacic 0:7e85a1ad7266 8 //ledice izlazi
nkovacic 0:7e85a1ad7266 9 DigitalOut ledstart(p25);
nkovacic 0:7e85a1ad7266 10 DigitalOut ledstop(p26);
nkovacic 0:7e85a1ad7266 11 DigitalOut ledlijevo(p27);
nkovacic 0:7e85a1ad7266 12 DigitalOut leddesno(p28);
nkovacic 0:7e85a1ad7266 13 //potenciometar za brzinu
nkovacic 0:7e85a1ad7266 14 AnalogIn potbrzina(p15);
nkovacic 0:7e85a1ad7266 15 //PWM u lijevo
nkovacic 0:7e85a1ad7266 16 PwmOut PWMlijevo(p21);
nkovacic 0:7e85a1ad7266 17 //PWM u desno
nkovacic 0:7e85a1ad7266 18 PwmOut PWMdesno(p22);
nkovacic 0:7e85a1ad7266 19 //PWM buzzer
nkovacic 0:7e85a1ad7266 20 PwmOut buzzer(p23);
nkovacic 0:7e85a1ad7266 21
nkovacic 0:7e85a1ad7266 22 //definiranje statusa bulovi
nkovacic 0:7e85a1ad7266 23 volatile bool vrti=false;
nkovacic 0:7e85a1ad7266 24 volatile bool lijevo=false;
nkovacic 0:7e85a1ad7266 25 volatile bool desno=true;
nkovacic 0:7e85a1ad7266 26
nkovacic 0:7e85a1ad7266 27 volatile float brzina=0;
nkovacic 0:7e85a1ad7266 28
nkovacic 0:7e85a1ad7266 29 //uključene funkcije
nkovacic 0:7e85a1ad7266 30 void Buzz(void); //za buzzer
nkovacic 0:7e85a1ad7266 31 void BuzzTIPKA(void); //za buzzer
nkovacic 0:7e85a1ad7266 32 void vrtiL(void); //pwm lijevi
nkovacic 0:7e85a1ad7266 33 void vrtiD(void); //pwm desni
nkovacic 0:7e85a1ad7266 34 void kreni(void); //za debouncanje
nkovacic 0:7e85a1ad7266 35 void stani(void); //za debouncanje
nkovacic 0:7e85a1ad7266 36 void LEFT(void); //za debouncanje
nkovacic 0:7e85a1ad7266 37 void RIGHT(void); //za debouncanje
nkovacic 0:7e85a1ad7266 38
nkovacic 0:7e85a1ad7266 39 //Ticker
nkovacic 0:7e85a1ad7266 40 Ticker tStart;
nkovacic 0:7e85a1ad7266 41
nkovacic 0:7e85a1ad7266 42 //Timer
nkovacic 0:7e85a1ad7266 43 Timer debounce;
nkovacic 0:7e85a1ad7266 44 Timer tKraj;
nkovacic 0:7e85a1ad7266 45
nkovacic 0:7e85a1ad7266 46 led_Za_KRAJ led(p29); //definirane pina ledice za kraj
nkovacic 0:7e85a1ad7266 47
nkovacic 0:7e85a1ad7266 48 int main()
nkovacic 0:7e85a1ad7266 49 {
nkovacic 0:7e85a1ad7266 50
nkovacic 0:7e85a1ad7266 51 //pokretanje debounc timera i interupata
nkovacic 0:7e85a1ad7266 52
nkovacic 0:7e85a1ad7266 53 debounce.start();
nkovacic 0:7e85a1ad7266 54 tipstart.fall(&kreni);
nkovacic 0:7e85a1ad7266 55 tipstop.fall(&stani);
nkovacic 0:7e85a1ad7266 56 tiplijevo.fall(&LEFT);
nkovacic 0:7e85a1ad7266 57 tipdesno.fall(&RIGHT);
nkovacic 0:7e85a1ad7266 58
nkovacic 0:7e85a1ad7266 59 tKraj.start();
nkovacic 0:7e85a1ad7266 60
nkovacic 0:7e85a1ad7266 61 //loop petlja
nkovacic 0:7e85a1ad7266 62
nkovacic 0:7e85a1ad7266 63 while(1) {
nkovacic 0:7e85a1ad7266 64
nkovacic 0:7e85a1ad7266 65 //kreni stani vrti logika
nkovacic 0:7e85a1ad7266 66
nkovacic 0:7e85a1ad7266 67 if(tKraj.read_ms()>10000) {
nkovacic 0:7e85a1ad7266 68
nkovacic 0:7e85a1ad7266 69
nkovacic 0:7e85a1ad7266 70 led.ledblink(5); //poziva klasu led_Za_KRAJ
nkovacic 0:7e85a1ad7266 71
nkovacic 0:7e85a1ad7266 72 }
nkovacic 0:7e85a1ad7266 73
nkovacic 0:7e85a1ad7266 74
nkovacic 0:7e85a1ad7266 75
nkovacic 0:7e85a1ad7266 76 if(vrti==true) {
nkovacic 0:7e85a1ad7266 77 ledstop=0;
nkovacic 0:7e85a1ad7266 78 ledstart=1;
nkovacic 0:7e85a1ad7266 79
nkovacic 0:7e85a1ad7266 80 if(lijevo==true&desno==false) {
nkovacic 0:7e85a1ad7266 81 ledlijevo=1;
nkovacic 0:7e85a1ad7266 82 leddesno=0;
nkovacic 0:7e85a1ad7266 83
nkovacic 0:7e85a1ad7266 84 vrtiL();
nkovacic 0:7e85a1ad7266 85
nkovacic 0:7e85a1ad7266 86 } else if(lijevo==false&desno==true) {
nkovacic 0:7e85a1ad7266 87 ledlijevo=0;
nkovacic 0:7e85a1ad7266 88 leddesno=1;
nkovacic 0:7e85a1ad7266 89
nkovacic 0:7e85a1ad7266 90 vrtiD();
nkovacic 0:7e85a1ad7266 91 }
nkovacic 0:7e85a1ad7266 92
nkovacic 0:7e85a1ad7266 93 } else if(vrti==false) {
nkovacic 0:7e85a1ad7266 94 ledstop=1;
nkovacic 0:7e85a1ad7266 95 ledstart=0;
nkovacic 0:7e85a1ad7266 96 PWMdesno=0;
nkovacic 0:7e85a1ad7266 97 PWMlijevo=0;
nkovacic 0:7e85a1ad7266 98
nkovacic 0:7e85a1ad7266 99 if(lijevo==true&desno==false) {
nkovacic 0:7e85a1ad7266 100 ledlijevo=1;
nkovacic 0:7e85a1ad7266 101 leddesno=0;
nkovacic 0:7e85a1ad7266 102
nkovacic 0:7e85a1ad7266 103 } else if(lijevo==false&desno==true) {
nkovacic 0:7e85a1ad7266 104 ledlijevo=0;
nkovacic 0:7e85a1ad7266 105 leddesno=1;
nkovacic 0:7e85a1ad7266 106 }
nkovacic 0:7e85a1ad7266 107
nkovacic 0:7e85a1ad7266 108
nkovacic 0:7e85a1ad7266 109 }
nkovacic 0:7e85a1ad7266 110 }
nkovacic 0:7e85a1ad7266 111 }
nkovacic 0:7e85a1ad7266 112
nkovacic 0:7e85a1ad7266 113 //moje funkcije
nkovacic 0:7e85a1ad7266 114 void vrtiL()
nkovacic 0:7e85a1ad7266 115 {
nkovacic 0:7e85a1ad7266 116
nkovacic 0:7e85a1ad7266 117 brzina=potbrzina;
nkovacic 0:7e85a1ad7266 118 PWMlijevo.period(0.001);
nkovacic 0:7e85a1ad7266 119 PWMlijevo=brzina;
nkovacic 0:7e85a1ad7266 120 PWMdesno=0;
nkovacic 0:7e85a1ad7266 121 wait(0.1);
nkovacic 0:7e85a1ad7266 122 }
nkovacic 0:7e85a1ad7266 123
nkovacic 0:7e85a1ad7266 124 void vrtiD()
nkovacic 0:7e85a1ad7266 125 {
nkovacic 0:7e85a1ad7266 126
nkovacic 0:7e85a1ad7266 127 brzina=potbrzina;
nkovacic 0:7e85a1ad7266 128 PWMdesno.period(0.001);
nkovacic 0:7e85a1ad7266 129 PWMdesno=brzina;
nkovacic 0:7e85a1ad7266 130 PWMlijevo=0;
nkovacic 0:7e85a1ad7266 131 wait(0.1);
nkovacic 0:7e85a1ad7266 132 }
nkovacic 0:7e85a1ad7266 133
nkovacic 0:7e85a1ad7266 134 void Buzz()
nkovacic 0:7e85a1ad7266 135 {
nkovacic 0:7e85a1ad7266 136 buzzer.period(0.002);
nkovacic 0:7e85a1ad7266 137 buzzer=0.5;
nkovacic 0:7e85a1ad7266 138 wait(0.2);
nkovacic 0:7e85a1ad7266 139 buzzer=0;
nkovacic 0:7e85a1ad7266 140 }
nkovacic 0:7e85a1ad7266 141
nkovacic 0:7e85a1ad7266 142 void BuzzTIPKA()
nkovacic 0:7e85a1ad7266 143 {
nkovacic 0:7e85a1ad7266 144 buzzer.period(0.001);
nkovacic 0:7e85a1ad7266 145 buzzer=0.5;
nkovacic 0:7e85a1ad7266 146 wait(0.2);
nkovacic 0:7e85a1ad7266 147 buzzer=0;
nkovacic 0:7e85a1ad7266 148 }
nkovacic 0:7e85a1ad7266 149
nkovacic 0:7e85a1ad7266 150 //debouncanje funckije
nkovacic 0:7e85a1ad7266 151 void kreni()
nkovacic 0:7e85a1ad7266 152 {
nkovacic 0:7e85a1ad7266 153 if(debounce.read_ms()>100) {
nkovacic 0:7e85a1ad7266 154 vrti=true;
nkovacic 0:7e85a1ad7266 155 BuzzTIPKA();
nkovacic 0:7e85a1ad7266 156 tStart.attach(&Buzz, 2); //pokretanje buzera 1sec
nkovacic 0:7e85a1ad7266 157 debounce.reset();
nkovacic 0:7e85a1ad7266 158 }
nkovacic 0:7e85a1ad7266 159 }
nkovacic 0:7e85a1ad7266 160 void stani()
nkovacic 0:7e85a1ad7266 161 {
nkovacic 0:7e85a1ad7266 162 if(debounce.read_ms()>100) {
nkovacic 0:7e85a1ad7266 163 vrti=false;
nkovacic 0:7e85a1ad7266 164 BuzzTIPKA();
nkovacic 0:7e85a1ad7266 165 tStart.detach(); //zaustavljanje buzzera
nkovacic 0:7e85a1ad7266 166 debounce.reset();
nkovacic 0:7e85a1ad7266 167 }
nkovacic 0:7e85a1ad7266 168 }
nkovacic 0:7e85a1ad7266 169 void LEFT()
nkovacic 0:7e85a1ad7266 170 {
nkovacic 0:7e85a1ad7266 171 if(debounce.read_ms()>100) {
nkovacic 0:7e85a1ad7266 172 lijevo=true;
nkovacic 0:7e85a1ad7266 173 desno=false;
nkovacic 0:7e85a1ad7266 174 BuzzTIPKA();
nkovacic 0:7e85a1ad7266 175 debounce.reset();
nkovacic 0:7e85a1ad7266 176 }
nkovacic 0:7e85a1ad7266 177 }
nkovacic 0:7e85a1ad7266 178 void RIGHT()
nkovacic 0:7e85a1ad7266 179 {
nkovacic 0:7e85a1ad7266 180 if(debounce.read_ms()>100) {
nkovacic 0:7e85a1ad7266 181 lijevo=false;
nkovacic 0:7e85a1ad7266 182 desno=true;
nkovacic 0:7e85a1ad7266 183 BuzzTIPKA();
nkovacic 0:7e85a1ad7266 184 debounce.reset();
nkovacic 0:7e85a1ad7266 185 }
nkovacic 0:7e85a1ad7266 186 }