Teach Urruneko laborategidun ikasgaiak

Teach ikasgaia

STM32 Mbed CodeIDE (1/8): LEDa keinuka jarri

Erabili STM32 Mbed CodeIDE main.cpp editatzeko, DigitalOut bidez LEDa keinuka jartzeko programa konpilatu eta plakan kargatzeko, eta benetako LEDaren portaeraren ebidentzia jasotzeko.

  • STM32 Nucleo (Mbed)
  • 50 min
  • Batxilergoa / Elektronikako Lanbide Heziketako hasierako maila
  • eu
  • Embedded systems

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

main.cpp fitxategitik Compile konpilazio zuzen batera, gero Upload to board bidez plakan kargatzera, eta azkenik urruneko STM32 kameran behatzera doan prozesua.
STM32 Nucleo (Mbed)

Ikaskuntza-emaitzak

  • STM32 Mbed CodeIDEko lan-urratsak eta main.cpp sarrera-fitxategia ezagutzea.

  • Oinarrizko Mbed programa bat idaztea DigitalOut eta ThisThread::sleep_for() erabiliz.

  • Kodea konpilatu eta kargatu dela, eta benetako irteera bat aldatu duela frogatzen duen ebidentzia jasotzea.

Ikaslearen jardueraren aurrebista

Jardueraren edukia

Aurrebista soilik. Klase-saio batean, ikasleek erantzunak bete eta lana irakasleari bidal diezaiokete.

1

Laborategia ireki aurretik

8 min

STM32 Mbed CodeIDE ikastaroa · 8 saiotatik 1.a. Benetako STM32 Nucleo WB55RG plaka programatuko duzu. Ez duzu Mbed aurretik ezagutu behar.

Sistema txertatuen programazioa ikus daitekeen proba erraz batekin hasi ohi da: zure kodeak gailu fisiko bat alda dezake, agindutakoan? LEDa keinuka jartzeko lehen proba batek prozesu osoa egiaztatzen laguntzen du: editatu, konpilatu, kargatu eta benetako plaka behatu.

Mbed OS-ek mikrokontrolagailuekin lan egiteko APIak eskaintzen dizkio C++ programari: pin digitalak, sarrera analogikoak, PWM irteerak, denbora-kontrola, hariak eta serieko mezuak. Laborategi honetan, CodeIDEk Mbed Community Edition ingurunea prestatzen du urruneko STM32 plakarako. main.cpp fitxategiak mbed.h sartzen du, programa int main() funtzioan hasten da, eta Mbed objektuak sortuz kontrolatzen da hardwarea.

Adibidez, DigitalOut status_led(PB_5, 0); instrukzioak status_led izeneko irteera-objektua sortzen du, STM32ren PB_5 pinera lotuta. Hurrengo ikasgaietan DigitalIn, AnalogIn eta PwmOut objektuak ere erabiliko dituzu.

Jarduera honetako azalpenekin osa dezakezu ikasgaia. Erreferentzia kontsultatu nahi baduzu:

main.cpp fitxategitik ikusgai dagoen hardwarera

main.cpp fitxategitik Compile konpilazio zuzen batera, gero Upload to board bidez plakan kargatzera, eta azkenik urruneko STM32 kameran behatzera doan prozesua.

Sakatu Abrir laboratorio (laborategia ireki), hautatu main.cpp Files atalean, ordeztu eta gorde kodea, sakatu Compile (konpilatu) eta gero Upload to board (plakan kargatu), eta behatu zuzeneko kamera. Lehen ikasgaian ez dituzu etengailuak, botoiak, potentziometroak, kontsolako sarrera edo potentzia-neurgailua behar. Gorde konpilatu aurretik. Konpilazio-mezuak ez du LEDa keinuka ari dela frogatzen: egiaztatu kameran.

Hasierako ideia LEDa keinuka jartzea da: LEDa piztu, itxaron, itzali, itxaron eta errepikatu.

Mbed-en, lehenik pin batera lotutako objektua sortzen duzu:

DigitalOut status_led(PB_5, 0);

Honela irakur dezakezu: «sortu status_led izeneko irteera digitala PB_5 pinean, hasierako balioa 0 dela».

Programatuko duzun plaka STM32 Nucleo WB55RG da.

STM32 Nucleo WB55RG plaka

LabsLandeko urruneko laborategian erabiltzen den STM32 Nucleo WB55RG plakaren argazkia.

Argazkiak mikrokontrolagailuaren plaka erakusten du, orientatzeko. LED zehatza zuzeneko proban identifikatuko duzu; irudi finkoak ez du haren portaera erakusten. Urruneko ikuspegian, argazkian ageri ez diren kontrolak edo entrenamendurako hardwarea ere ikus daitezke. Ez duzu ezer ordenagailura konektatuko: CodeIDEk konpilatutako programa urruneko plakara bidaltzen du.

while (true) barruko kodea behin eta berriz exekutatzen da, programa martxan dagoen bitartean:

status_led = !status_led.read();
ThisThread::sleep_for(500ms);

Lehen lerroak hau esan nahi du: «irakurri irteerari ezarritako balioa, aldatu kontrakora eta ezarri balio berria irteeran». ! eragileak ezeztapen logikoa egiten du: 0 balioa 1 bihurtzen du, eta 1 balioa 0. Bigarren lerroak 500 ms-ko itxaronaldia eskatzen du exekuzio-hari honetarako. Benetako tartean exekuzioaren eta denbora-antolaketaren atzerapen txikiak ere egon daitezke.

Egoera-aldaketa trantsizio bat da, adibidez piztuta egotetik itzalita egotera edo alderantziz. Piztu-itzali ziklo osoak bi trantsizio behar ditu, hasierako egoerara itzultzeko.

Egoera aldatu ondoren 500ms itxaroten badu, zein deskribapen da zuzena? Kontuan hartu programatutako denborak; kamerako neurketa gutxi gorabeherakoa izango da.

2

Jarri LEDa keinuka eta probatu

26 min

Aurreikusi bi konpilazio eta laborategiko 18 minutu inguru: lehenik 500ms bertsioa eta gero 1000ms bertsioa. Ilaran itxaron behar baduzu, erantzun bi aurreikuspen-galderak eta prestatu bi behaketen izenburuak zure txanda iritsi aurretik.

Kopiatu lerro guztiak, #include "mbed.h" hasieratik azken } giltzaraino. Hasierako kodeak konpilatzea eragozten duen hutsune bakarra du. Osatu TODO 1 gorde edo konpilatu aurretik: TODO_WAIT_VALUE ez dago definituta, eta ezin da bere horretan utzi.

#include "mbed.h"

DigitalOut status_led(PB_5, 0);

int main() {
    // 1: lehen konpilaziorako, ordeztu hutsunea 500ms balioarekin.
    const auto wait_time = TODO_WAIT_VALUE;

    while (true) {
        status_led = !status_led.read();
        ThisThread::sleep_for(wait_time);
    }
}

Itxaronaldia aldatu aurretik, aurreikusi zer gertatuko den. Erabili egoera-aldaketen arteko tarteari buruzko erantzuna erabakitzeko 1000ms balioarekin LEDa azkarrago, motelago edo ia berdin aldatuko den.

Probatu aurretik: zer gertatu beharko litzateke wait_time 500ms-tik 1000ms-ra aldatzean?

Aldatzen den LEDa aurkitzeko, konparatu kamerako ikuspegia programa kargatu aurretik eta martxan jarri ondoren. Ez erabili beti piztuta edo itzalita dauden LEDak, ezta kargako edo egoerako distira laburrak ere. Bilatu programatutako erritmoan behin eta berriz aldatzen den LEDa. 500ms-tik 1000ms-ra pasatzean, LED berak erritmo berria jarraitu beharko luke.

Konpilazioak huts egiten badu, egiaztatu #include "mbed.h", PB_5 pinaren azpimarra eta instrukzioen amaierako puntu eta komak. Aldatu gauza bakar bat aldi bakoitzean, konpilatu berriz eta irakurri lehen errore-mezua arretaz.

Laborategiko blokeak Marcar práctica como completada botoia du (markatu praktika amaitutzat). Erabili zenbakitutako urrats guztiak amaitu ondoren bakarrik, 1000ms bertsioaren proba barne.

  1. Ireki STM32 Mbed CodeIDE laborategia jarduera honetako Abrir laboratorio botoitik.

  2. CodeIDEn, ireki main.cpp.

  3. Ordeztu fitxategia aurreko programarekin, eta jarri 500ms TODO_WAIT_VALUE hutsunearen ordez.

  4. Bilatu TODO main.cpp fitxategian. Bat ere geratzen ez denean, gorde. Gorde ondoren bakarrik konpilatu.

  5. Konpilatu 1. bertsioa. Errorea badago, berrikusi hutsunea, izenen idazkera, {} giltzak, () parentesiak eta puntu eta komak.

  6. Upload sakatu aurretik, begiratu zuzeneko kamera eta aukeratu behatuko duzun plakaren eremua.

  7. Kargatu programa plakan. Itxaron kontsolak edo egoera-eremuak karga/programazioa amaitu dela adierazi arte.

  8. Behatu kamerako eremu bera, eta bilatu programatutako erritmoan behin eta berriz aldatzen den LEDa. Baztertu beti piztuta dauden elikadura/egoera LEDak eta kargako distira laburrak. Erabili kronometroa edo mugikorreko tenporizadorea: hasi LED horrek egoera aldatzen duenean, zenbatu beste bost aldaketa eta gelditu seigarren trantsizio ikusgaian, hasierakoa barne. Itzalitatik piztuta egotera eta piztutatik itzalita egotera pasatzeak aldaketa bana dira.

  9. Aldatu wait_time 500ms-tik 1000ms-ra. Gorde main.cpp, konpilatu 2. bertsioa, kargatu eta behatu berriz LED beraren eremua.

    1. urratsa amaitu ondoren bakarrik, sakatu Marcar práctica como completada.

Klase-saio batean erabilgarri

Jaso bi behaketak hurrengo erantzun-eremuetan. Bost tarte neurtzeak abantaila du: kamera bidez aldaketa bakar baten denbora neurtzea zaila da; bost tartek estimazio egonkorragoa ematen dute. Kamerak irudiak saltatzen baditu edo aldaketak bereizten ez badituzu, jaso muga hori.

Erabili metodo hau bertsio bakoitzean:

  1. Abiarazi kronometroa LEDak egoera aldatzen duenean. Hasierako trantsizio hori 1. tartearen hasiera da.
  2. Zenbatu ondorengo aldaketa ikusgaiak, ozen edo paperean: 1, 2, 3, 4, 5.
  3. Gelditu kronometroa 5 gisa zenbatutako aldaketan. Neurtutako denborak egoera-aldaketen arteko bost tarte hartzen ditu.
  4. Zatitu neurtutako denbora 5ez, tarte bakarraren iraupena estimatzeko.
  5. Piztu-itzali ziklo osoak bi tarte hartzen ditu: biderkatu tartearen iraupena 2z.

Adibidea: bost tartek 2,6 s inguru irauten badute, tarte bakoitza 0,52 s ingurukoa da eta ziklo osoa 1,04 s ingurukoa. Adibideko zenbakiak ez dira zure neurketak.

500ms bertsiorako, idatzi behaketa formatu honekin:

  • Behin eta berriz aldatzen den LEDaren 5 trantsizio-tarte zenbatu ditut.
  • 5 tarteren denbora (s):
  • Egoera-aldaketen arteko tartea, gutxi gorabehera (s):
  • Piztu-itzali ziklo oso baten iraupena, gutxi gorabehera (s):
  • Bat etorri da aurreikuspenarekin? Bai/ez, zeren...

1000ms bertsiorako, idatzi behaketa formatu honekin:

  • LED beraren 5 trantsizio-tarte zenbatu ditut.
  • 5 tarteren denbora (s):
  • Egoera-aldaketen arteko tartea, gutxi gorabehera (s):
  • 500ms bertsioarekin alderatuta, LEDa azkarrago/motelago/ia berdin aldatu da:
  • Bat etorri da aurreikuspenarekin? Bai/ez, zeren...
  • Arazoren bat konpondu behar izan duzu? Bai/ez. Baiezkoa bada, zer aldatu duzu?

Idatzi benetako plakako ebidentzia-ohar bat, lau xehetasunekin: konpilazioa eta karga amaitu diren, LED aldakorra kameraren zein tokitan ageri den, zer aldatu den kameran eta 1000 ms bertsioa zertan bereizi den 500 ms bertsiotik. Adibidea: «Konpilazioa eta karga/programazioa amaitu dira; plakaren eremuaren ezkerrean dagoen LEDa motelago aldatu da 500ms-tik 1000ms-ra pasatu naizenean». Idatzi zure behaketa, ez kopiatu adibidea ikusi ez baduzu.

3

Ulertu Mbed programaren egitura

8 min

Ikastaro honetako programa gehienek Mbed-en egitura bera dute: mbed.h sartu, DigitalOut bezalako hardware-objektuak sortu, int main() funtzioan hasi eta kontrolagailuak behin eta berriz egin behar duena while (true) begiztan jarri.

Azaldu zure hitzekin zer egiten duen while (true) begiztak LEDa keinuka jartzeko programa honetan. Zergatik behar da?

4

Bidali zure kodea

8 min

Bidali aurretik, utzi 1000ms erabiltzen duen azken bertsioa main.cpp fitxategian gordeta. Bilatu berriz TODO: bidalitako fitxategian ez da hutsunerik geratu behar, ezta amaitutako lanari dagozkion TODO iruzkinik ere.

Erantsi gordetako azken main.cpp fitxategia

Sakatu Comprobar archivos guardados (egiaztatu gordetako fitxategiak), ziurtatu main.cpp fitxategiak 1000ms erabiltzen duen LEDa keinuka jartzeko azken programa duela eta sakatu Adjuntar código guardado (erantsi gordetako kodea). Kodea erantsi ondoren, sakatu Enviar entrega (bidali lana), jardueraren amaieran. Ikasgai honetan, gordetako main.cpp fitxategiaren kode-kopia erantsi behar duzu.

Bihurtu aurrebista hau klase-saio batean

Jarraitu LabsLand Teach-era ikasgai hau ikasleekin erabiltzeko eta kontuaren sarbidea berrikusteko.