Teach ikasgaia
STM32 Arduino APIarekin (4/4): kontrolagailu txikia
Konbinatu potentziometroa, erabakiak, RGB irteera eta serieko ebidentzia, Arduino APIarekin STM32 kontrolagailu txiki bat egiteko.
Hasi saioa irakasle-kontu batekin klase-saioa prestatzeko. Ikasleak klase-kode batekin sartzen dira.
Lehen aldia duzu LabsLand-en? Sortu irakasle-kontua
Ikaskuntza-emaitzak
Sarrera, erabakia, irteera eta eskuzko modua dituen kontrolagailu txiki bat diseinatzea.
Benetako irakurketak erabiliz atalasea hautatu eta arrazoitzea.
Erabakiaren hiru kode-adarrak probatu eta emaitza azaltzea.
Ikaslearen jardueraren aurrebista
Jardueraren edukia
Aurrebista soilik. Klase-saio batean, ikasleek erantzunak bete eta lana irakasleari bidal diezaiokete.
Ulertu erronka eta diseinatu probak
10 min
STM32 Arduino ikastaroa · 4 diseinuetatik 4.a. Jarduera hau bere kabuz egin daiteke. Potentziometroa irakurri, erabaki bat hartu eta RGB kolorea aldatuko duen kontrolagailu txiki bat egingo duzu, eskuz esku hartzeko botoi batekin.
Haizagailu automatikoetan edo abisu-argietan bezala, arau automatikoa eta eskuzko lehentasuna konbinatuko dituzu. Ez da nahikoa adar batek funtzionatzea: aldaketa egin ondoren, guztiek funtzionatzen jarraitzen duten probatu behar da.
Kontrolagailuak hiru egoera izango ditu:
- Potentziometroaren irakurketa atalasearen azpitik: berdea.
- Potentziometroaren irakurketa atalasean edo haren gainetik: gorria.
- Botoia sakatuta: urdina, potentziometroaren irakurketa edozein dela ere.
Erronka ez da programa kopiatzea soilik. Amaieran, probatutako kontrolagailu bat izan behar duzu: sarrera irakurri, egoera erabaki, RGB aldatu, Serial bidez ebidentzia erakutsi eta arrazoitu dezakezun hobekuntza txiki bat gorde.
Programatu aurretik, pentsatu produktu txiki bat nola probatuko zenukeen. Proba on batek zein kontrol erabiliko duzun, zein kolore espero duzun eta Serialeko zein datuk erabakia baieztatuko lukeen adierazten du.
Hasierako kodeak forma honetako lerroak inprimatuko ditu: estado=<verde/rojo/manual> pot1=<ADC irakurketa> boton=<suelto/pulsado>.
Etiketak kodeko hitz finkoak dira: estado egoera da; verde, berdea; rojo, gorria; manual, eskuzko modua; boton, botoia; suelto, sakatu gabe; eta pulsado, sakatuta. pot1 zenbakiak potentziometroaren ADC irakurketa adierazten du: bihurgailu analogiko-digitalak 0–1023 tartean emandako balioa, ez voltetan emandako tentsioa.
Idatzi hiru lerro bereizi, kasu bakoitzeko bana. Erabili formatu hau: N. kasua | espero den RGB: ... | Serial: estado=... boton=...
Osatu egoera bakoitzaren lerroa:
- B1 sakatu gabe eta potentziometroaren irakurketa atalasearen azpitik.
- B1 sakatu gabe eta potentziometroaren irakurketa atalasean edo haren gainetik.
- B1 sakatuta mantenduta eta potentziometroaren irakurketa atalasean edo haren gainetik.
Eraiki eta egiaztatu kontrolagailu txikia
27 min
setRgb(rojo, verde, azul) funtzioak kolorea aldatzean hiru instrukzioak behin eta berriz idaztea saihesten du. Hiru argumentuak kanal gorri, berde eta urdinaren PWM balioak dira, 0 eta 255 artekoak. Hasierako atalasea 600 ADC unitate da; benetako irakurketekin alderatuko duzu.
bool motako aldagaiak true edo false gordetzen du. B1 botoia LOW egoeran aktiboa denez, botonPulsado egiazkoa da irakurketa LOW denean. if / else if / else egiturak baldintzak goitik behera egiaztatzen ditu eta betetzen den lehen adarra soilik exekutatzen du. Horregatik, eskuzko baldintzak lehenengo egon behar du. const char* estado aldagaiak Serialerako testu-etiketa laburrari egiten dio erreferentzia; ez duzu sintaxi hori aldatu behar.
Hasierako programa kopiatu, probatu eta doituko duzu. Azken kontrolagailuak osatua izan behar du: POT_1 irakurri, UMBRAL atalasearekin erabaki, BOTON_1 bidez eskuzko modua onartu, RGB aldatu eta hautatutako egoera Serial bidez erakutsi.
Ilaran itxaron behar baduzu, osatu bi TODO hutsuneak eta hiru kasuen aurreikuspena, jarraitu if / else if / else egiturari, idatzi erdiko balioaren formula eta bilatu non gehituko dituzun margen eremuaren bi instrukzioak. Ez bete behaketa-errenkadak benetako plakan exekutatu arte. Gorde kodea. Konpilazioak huts egiten badu, zuzendu lehen akatsa. Kargan edo Serialen arazoa badago, egiaztatu erreserba, saiatu berriz behin eta ireki Serial 115200 baud-ean, irakasleari saioa berreskuratzeko laguntza eskatu aurretik.
Kontrolagailu txikiaren sarrerak eta irteera
Urruneko muntaketa dagoeneko kableatuta dago. Mapak erronkako bi sarrerak eta hiru RGB kanalak soilik erakusten ditu; ez duzu konexiorik aldatu behar.
Ireki STM32 Arduino laborategia bloke honetatik. CodeIDEn, ireki
main.inoeta itsatsi beheko hasierako kodea.Osatu TODO 1 eskuzko modua eskatzen denean soilik egiazkoa den adierazpen boolearrarekin. Osatu TODO 2 ADC irakurketa atalasean edo haren gainetik dagoenean egiazkoa den konparazioarekin. Bilatu
TODO: ez da bat ere geratu behar; kendu osatutako TODO iruzkinak ere.Gorde, sakatu Compilar (konpilatu) eta itxaron emaitza zuzena. Gero sakatu Subir (plakan kargatu) eta itxaron plakak hasierako programa jaso arte.
Ireki CodeIDEko Serial kontsola
115200 baud-ean. Itxaronestado=... pot1=... boton=...lerroak behin eta berriz agertu arte.1. proba — beheko egoera automatikoa: askatu B1 eta jarri
Pot. pot1kontrola bere ibilbidearen heren batean, gutxi gorabehera. Kopiatu ADC irakurketa eta betebeheko posizioa, B1 sakatu gabeerrenkada. Egiaztatu irakurketa hasierako atalasearen azpitik dagoen; jasotako zenbakia da erabakia azaltzeko oinarria.2. proba — goiko egoera automatikoa: utzi B1 sakatu gabe eta jarri
Pot. pot1bere ibilbidearen bi herenetan, gutxi gorabehera. Kopiatu ADC irakurketa eta betegoiko posizioa, B1 sakatu gabeerrenkada. Egiaztatu atalasean edo haren gainetik dagoen; bestela, jaso desadostasuna eta egiaztatu kontrola irakaslearekin.3. proba — eskuzko lehentasuna: mantendu goiko posizioa, sakatu B1 eta mantendu sakatuta Serialek eskuzko egoera erakutsi arte. Behatu RGB ere, askatu botoia eta bete
goiko posizioa, B1 sakatuta mantendutaerrenkada. Proba honek botoiak lehentasuna duen egiaztatzen du.Osatu taulako lehen hiru errenkadak. Azpiko galderan, kalkulatu B1 sakatu gabe jasotako bi ADC irakurketen erdiko balioa (haien batezbestekoa), zenbaki osora biribilduta. Hautatutako tartearen erdirako doitutako atalasea izango da.
Klase-saio batean erabilgarri
#include <Arduino.h>
const int POT_1 = PC0;
const int BOTON_1 = PC5; // LOW egoeran aktiboa
const int RGB_ROJO = PA8;
const int RGB_VERDE = PA9;
const int RGB_AZUL = PA10;
const int UMBRAL = 600;
void setRgb(int rojo, int verde, int azul) {
analogWrite(RGB_ROJO, rojo);
analogWrite(RGB_VERDE, verde);
analogWrite(RGB_AZUL, azul);
}
void setup() {
pinMode(BOTON_1, INPUT);
pinMode(RGB_ROJO, OUTPUT);
pinMode(RGB_VERDE, OUTPUT);
pinMode(RGB_AZUL, OUTPUT);
Serial.begin(115200);
}
void loop() {
int lectura = analogRead(POT_1);
bool botonPulsado = digitalRead(BOTON_1) == LOW;
const char* estado;
if (TODO_CONDICION_MANUAL) { // TODO 1: egiazkoa eskuzko modua eskatzen denean soilik
setRgb(0, 0, 255);
estado = "manual";
} else if (TODO_CONDICION_ALTA) { // TODO 2: irakurketa atalasean edo haren gainetik
setRgb(255, 0, 0);
estado = "rojo";
} else {
setRgb(0, 180, 0);
estado = "verde";
}
Serial.print("estado=");
Serial.print(estado);
Serial.print(" pot1=");
Serial.print(lectura);
Serial.print(" boton=");
if (botonPulsado) {
Serial.println("pulsado");
} else {
Serial.println("suelto");
}
delay(100);
}
Erabili sei errenkada. Lehen hirurek hasierako programa dokumentatzen dute, aldaketa egin aurretik. Beste hirurek kasu berak errepikatzen dituzte atalasea doitu eta diagnostikoa hobetu ondoren. Errenkada bakoitzak sarrera, erabakia eta benetako hardwareko ebidentzia lotu behar ditu:
- 1. eta 4. errenkadak: B1 sakatu gabe, potentziometroa beheko doikuntza-posizioan.
- 2. eta 5. errenkadak: B1 sakatu gabe, potentziometroa goiko doikuntza-posizioan.
- 3. eta 6. errenkadak: B1 sakatuta mantenduta, potentziometroa goiko doikuntza-posizioan.
- Serialen ikusitako balioak: kopiatu benetan ikusitako lerro bateko
estado,pot1etabotonbalioak; irakurketak gorabeherak izan ditzake. - Aldatutako bertsioaren errenkadetan, kopiatu
margeneremu berria ere. Kokatu potentziometroa lehengo posizio berean, hasierako irakurketarekiko gutxi gorabehera gehienez 30 ADC unitateko aldearekin.
| Bertsioa | Proba | Serialen ikusitako balioak (pot1: ADC irakurketa) | Atalasea ADC unitate | Espero den irteera | Behatutako irteera | Emaitza |
|---|---|---|---|---|---|---|
Erabili B1 sakatu gabe egindako bi doikuntza-errenkadak: kalkulatu (beheko irakurketa + goiko irakurketa) / 2 eta biribildu ADC unitate osora. Adierazi bi irakurketak, kalkulua eta azken atalase doitua. Ez aldatu UMBRAL kalkulua idatzi arte.
Doitu atalasea eta gehitu diagnostikoa
15 min
Ordeztu UMBRAL konstantearen 600 balioa kalkulatutako erdiko balio biribilduarekin. Gero, gehitu diagnostiko bat Serialen, pot1 balioaren ondoren: inprimatu margen= eta, jarraian, lectura - UMBRAL. margen eremuak irakurketaren eta atalasearen arteko aldea adierazten du. Negatiboa bada, irakurketa atalasearen azpitik dago; zero edo positiboa bada, atalasean edo haren gainetik.
Gorde, konpilatu, kargatu eta ireki berriz Serial 115200 baud-ean. Errepikatu hiru proba-kasu berak, eta bete aldatutako bertsioaren 4.–6. errenkadak. Egiaztatu ikusgai dagoen kolorea, estado etiketa eta margen balioaren zeinua koherenteak diren. Eskuzko moduak lehentasuna izaten jarraitu behar du, baita margen positiboa denean ere.
Adierazi atalase doitua eta idatzi gehitutako bi Serial instrukzioak. Ondoren, erabili 4.–6. errenkadak azaltzeko nola datozen bat margen negatiboa eta ez-negatiboa dagozkien adar automatikoekin, eta eskuzko moduak lehentasuna mantendu duen.
Aurkeztu kontrolagailua
8 min
Entregatu azken main.ino fitxategia
Gorde main.ino erantsi aurretik. Kode-kopiak azken kontrolagailua erakutsi behar du, atalase doitua eta Serialeko margen eremua barne. Ez du TODO hutsunerik edo TODO hitza duen iruzkinik izan behar.
Aurkeztu kontrolagailu txikia 4–6 esalditan: adierazi helburua eta sarrera; laburbildu hiru erabakiak eta irteerak; aipatu sei errenkaden emaitzak; azaldu zer erakutsi duen margen balioaren zeinuak; eta izendatu muga errealista bat.
Bihurtu aurrebista hau klase-saio batean
Jarraitu LabsLand Teach-era ikasgai hau ikasleekin erabiltzeko eta kontuaren sarbidea berrikusteko.
Lehen aldia duzu LabsLand-en? Sortu irakasle-kontua