Teach Urruneko laborategidun ikasgaiak

Teach ikasgaia

STM32 Arduino APIarekin (4/4): kontrolagailu txikia

Konbinatu potentziometroa, erabakiak, RGB irteera eta serieko ebidentzia, Arduino APIarekin STM32 kontrolagailu txiki bat egiteko.

  • STM32 Nucleo (Arduino)
  • 60 min
  • DBH 4 / Batxilergoko hasierako maila / Oinarrizko LH
  • eu
  • Embedded systems

Hasi saioa irakasle-kontu batekin klase-saioa prestatzeko. Ikasleak klase-kode batekin sartzen dira.

pot1 potentziometroa PC0 pinean eta B1 botoia PC5 pinean irakurtzen ditu main.ino programak; programak PA8, PA9 eta PA10 RGB kanalak kontrolatzen ditu.
STM32 Nucleo (Arduino)

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.

1

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:

  1. B1 sakatu gabe eta potentziometroaren irakurketa atalasearen azpitik.
  2. B1 sakatu gabe eta potentziometroaren irakurketa atalasean edo haren gainetik.
  3. B1 sakatuta mantenduta eta potentziometroaren irakurketa atalasean edo haren gainetik.
2

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

pot1 potentziometroa PC0 pinean eta B1 botoia PC5 pinean irakurtzen ditu main.ino programak; programak PA8, PA9 eta PA10 RGB kanalak kontrolatzen ditu.

Urruneko muntaketa dagoeneko kableatuta dago. Mapak erronkako bi sarrerak eta hiru RGB kanalak soilik erakusten ditu; ez duzu konexiorik aldatu behar.

  1. Ireki STM32 Arduino laborategia bloke honetatik. CodeIDEn, ireki main.ino eta itsatsi beheko hasierako kodea.

  2. 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.

  3. Gorde, sakatu Compilar (konpilatu) eta itxaron emaitza zuzena. Gero sakatu Subir (plakan kargatu) eta itxaron plakak hasierako programa jaso arte.

  4. Ireki CodeIDEko Serial kontsola 115200 baud-ean. Itxaron estado=... pot1=... boton=... lerroak behin eta berriz agertu arte.

  5. 1. proba — beheko egoera automatikoa: askatu B1 eta jarri Pot. pot1 kontrola bere ibilbidearen heren batean, gutxi gorabehera. Kopiatu ADC irakurketa eta bete beheko posizioa, B1 sakatu gabe errenkada. Egiaztatu irakurketa hasierako atalasearen azpitik dagoen; jasotako zenbakia da erabakia azaltzeko oinarria.

  6. 2. proba — goiko egoera automatikoa: utzi B1 sakatu gabe eta jarri Pot. pot1 bere ibilbidearen bi herenetan, gutxi gorabehera. Kopiatu ADC irakurketa eta bete goiko posizioa, B1 sakatu gabe errenkada. Egiaztatu atalasean edo haren gainetik dagoen; bestela, jaso desadostasuna eta egiaztatu kontrola irakaslearekin.

  7. 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 mantenduta errenkada. Proba honek botoiak lehentasuna duen egiaztatzen du.

  8. 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, pot1 eta boton balioak; irakurketak gorabeherak izan ditzake.
  • Aldatutako bertsioaren errenkadetan, kopiatu margen eremu 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.

3

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.

4

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.