Stýriforrit
Þetta er wikibók um hvernig hægt er að nota einfaldar bólskar jöfnur í forritun á Arduino. Sýnt er hvernig stöðurit nýtist við hönnun á forriti sem stýrir bílskúrshurðaopnara. Bókin er hentug sem kennsluefni í grunndeild rafiðna og fyrir þá sem vilja læra einfalda aðferð til að byggja upp stýriforrit.
Bool jöfnur
[breyta]Rökhlið eru grunneiningar í stafrænum rásum. Þau hafa virkni sem gefur útgangi gildi samkvæmt reglu sem beitt er á einn eða fleiri innganga. Þessar reglur eru í raun stærðfræði jöfnur og má nota slíkar jöfnur við forritun ýmissa stýringa. Grunnhliðunum er hægt að raða saman í flóknar rásir til að ná fram ákveðinni virkni og beita aðferðum til að einfalda jöfnurnar sem lýsa virkninni. Þessar jöfnur eru nefndar bool jöfnur (bólskar jöfnur) eftir enska stærðfræðingnum George Boole. Lesið meira um bool jöfnur á Wiki síðu um Boolean algebra
Sem dæmi þá er jafnan fyrir tveggja innganga AND hlið , þar sem A og B eru inngangar og C er útgangurinn. Hér fyrir neðan sjáum við tvö teiknitákn samkvæmt mismunandi stöðlum: Amerískur staðall (ANSI) og Evrópu staðal (IEC).
ANSI Tákn | IEC Tákn |
Lesið allt um rökhlið á Wiki síðu um Logic gate
Stýriforrit fyrir bílskúrshurðaopnara
[breyta]Hér á eftir er dæmi um hvernig við getum nýtt okkur stöðurit og bólskar jöfnur til að gera lítið forrit fyrir bílskúrshurðaopnara. Við notum Arduino [1] örtölvu sem stýrivél og forritunarmálið C.
Stöðurit
[breyta]Virkni lýst með orðum Hér er stöðurit sem sýnir virknina fyrir forritið. Búið er að skilgreina við hvaða skilyrði forritið skiptir um stöðu og hver staðan verður í samræmi við það. Skilyrðunum sem er lýst með orðum á myndinni mundu líta út á eftir farandi hátt skrifaðar á bool formi:
|
|||||||||||||||||||||
Virkni skrifuð í C |
Flæðirit
[breyta]Svona lítur flæðiritið út fyrir aðallykkju forritsins. Til hliðar eru föllinn sem endurspegla stöðurnar sem við skilgreindum í stöðuritinu.
void stopp() { motor.stop(); delay(300); do { takkiFlag = digitalRead(opnaLokaTakki); } while (!takkiFlag); } void adOpna() { motor.back(); delay(300); do { takkiFlag = digitalRead(opnaLokaTakki); fullopidFlag = digitalRead(fullopidRofi); } while (!takkiFlag && !fullopidFlag); } void adLoka() { motor.forward(); delay(300); do { takkiFlag = digitalRead(opnaLokaTakki); fulllokadFlag = digitalRead(fulllokadRofi); } while (!takkiFlag && !fulllokadFlag); } |
Í föllunum er notað til að forritið sé stopp í stöðunni á meðan bool jafnan í endaskilyrðunum er sönn.
stopp()
do { takkiFlag = digitalRead(opnaLokaTakki); } while (!takkiFlag);
adOpna()
do { takkiFlag = digitalRead(opnaLokaTakki); fullopidFlag = digitalRead(fullopidRofi); } while (!takkiFlag && !fullopidFlag);
adLoka()
do { takkiFlag = digitalRead(opnaLokaTakki); fulllokadFlag = digitalRead(fulllokadRofi); } while (!takkiFlag && !fulllokadFlag);
Kóðinn
[breyta]Svona er allur kóðinn fyrir forritið.
Library fyrir mótorinn: vmaHG7881
//---------------------------------------------------------------------------------------- // Date: 20.023.2017 // Program: Bílskúrshurða opnari // Version 5.00 // Project: Verkefni 3 - Mekatrónik 4 // Ari Baldursson // Verkmenntaskólinn á Akureyri // // ---------------------------------- // Föll úr vmaHG7881.h fyrir mótor // // vmaHG7881(frumstilltur hraði, mótorpinni 1 PWM, mótorpinni 2 PWM) // forward() mótor áfram // back() mótor afturábak // stop() mótor stop // setSpeed(hraði) hraði = 0 - 255 // //---------------------------------------------------------------------------------------- #include <vmaHG7881.h> vmaHG7881 motor(200,5,6); // Hraði, M pinni 1, M pinni 2 bool fullopidFlag = 0; // FullOpid bool fulllokadFlag = 0; // FullLokad bool takkiFlag = 0; // Takki int opnaLokaTakki = 12; // Inngangur fyrir takka int fullopidRofi = 10; // Inngangur fyrir fullopið rofa int fulllokadRofi = 11; // Inngangur fyrir fulllokað rofa void adOpna(); void stopp(); void adLoka(); void setup() { pinMode(opnaLokaTakki, INPUT); pinMode(fullopidRofi, INPUT); pinMode(fulllokadRofi, INPUT); } void loop() { stopp(); adOpna(); stopp(); adLoka(); } void adOpna() { motor.back(); delay(300); do { takkiFlag = digitalRead(opnaLokaTakki); fullopidFlag = digitalRead(fullopidRofi); } while (!takkiFlag && !fullopidFlag); } void stopp() { motor.stop(); delay(300); do { takkiFlag = digitalRead(opnaLokaTakki); } while (!takkiFlag); } void adLoka() { motor.forward(); delay(300); do { takkiFlag = digitalRead(opnaLokaTakki); fulllokadFlag = digitalRead(fulllokadRofi); } while (!takkiFlag && !fulllokadFlag); }
Myndskeið
[breyta]Hér er myndskeið sem sýnir hvernig forritið virkar í prófunarumhverfi. Smellið á YouTube myndina |
Verkefni
[breyta]Spurningar
[breyta]- Hvað sýnir stöðurit?
- Hvernig er jafnan á C koða fyrir Arduino?
- Hvernig er jafnan á C koða fyrir Arduino?
Krossapróf
[breyta]
Heimildir
[breyta]https://www.arduino.cc/
Purdum, J. J., & Levy, B. (2012). Beginning C for Arduino. Apress.
https://en.wikipedia.org/wiki/George_Boole
Ýtarefni
[breyta]Wiki síða um LaTeX skipanir fyrir stærðfræði formúlur: LaTeX/Mathematics
Wiki síða um hvernig við sejum upp stærðfræði formúlur á Wiki: Guide/Mathematics