Teach Urruneko laborategidun ikasgaiak

Teach ikasgaia

STM32 Arduino APIarekin (3/4): potentziometroa eta RGB

Irakurri potentziometroa analogRead() bidez, bihurtu irakurketa RGB kanal baten PWM balio eta alderatu bihurketa zuzena eta alderantzizkoa benetako plakan.

  • STM32 Nucleo (Arduino)
  • 55 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 sarreran: analogRead bidezko 0–1023 irakurketa map bidez 0–255 tartera bihurtzen da, PA8, PA9 edo PA10 RGB PWM irteeran erabiltzeko.
STM32 Nucleo (Arduino)

Ikaskuntza-emaitzak

  • Sarrera analogikoa irakurri eta balioa tarte erabilgarri batera bihurtzea.

  • PWM erabiltzea RGB kanal baten distira kontrolatzeko.

  • Serieko kontsolaren datuak akatsak bilatu eta zuzentzeko ebidentzia gisa erabiltzea.

Ikaslearen jardueraren aurrebista

Jardueraren edukia

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

1

Bi balio-tarte desberdin

8 min

STM32 Arduino ikastaroa · 4 saiotatik 3.a. Argi-erregulagailu bat egingo duzu: potentziometroaren irakurketa RGB kanal baten distira kontrolatzeko erabiliko duzu. Serial kontsolan ikusiko dituzu zenbakiak. Bat al datoz zenbakizko bihurketa eta benetako LEDaren portaera? Ez duzu aurretik beste saiorik egin behar.

analogRead(PC0) funtzioaren irakurketa 0 eta 1023 arteko balio gisa erabiliko dugu. ADCak (bihurgailu analogiko-digitalak) emandako zenbakizko irakurketa da, ez zuzenean voltetan emandako tentsioa. analogWrite(PA10, brillo) funtzioan, berriz, 0 eta 255 arteko balioa erabiliko dugu. map funtzioak tarte batetik bestera bihurtzen du balioa.

PWMk (pultsu-zabaleraren modulazioak) irteera azkar piztu eta itzaltzen du, ziklo bakoitzean piztuta emandako zatia aldatuz. Horrela kontrolatuko dugu RGB kanalaren distira. PWM balioa ez da distira-unitate bat: kameran ikusten dena LEDaren eta kameraren esposizioaren araberakoa ere bada.

Jarraitu balioari sarreratik irteeraraino

pot1 potentziometroa PC0 sarreran: analogRead bidezko 0–1023 irakurketa map bidez 0–255 tartera bihurtzen da, PA8, PA9 edo PA10 RGB PWM irteeran erabiltzeko.

Potentziometroaren balioa irakurri, tartea bihurtu eta hautatutako RGB kanalari aplikatu.

Programak bihurketa hau erabiliko du:

int lectura = analogRead(POT_1);
int brillo = map(lectura, 0, 1023, 0, 255);

lectura aldagaiak irakurketa gordetzen du; brillo aldagaiak, irteerarako kalkulatutako PWM balioa. map funtzioak zenbaki osoekin kalkulatzen du: emaitzaren zati hamartarra ez da gordetzen.

Erakutsitako bihurketa zuzenarekin, zer sortu beharko luke gehienekotik hurbil dagoen potentziometro-irakurketa batek?

2

Kontrolatu distira irakurketa analogikoarekin

29 min

Serial.begin(115200) instrukzioak komunikazioa 115200 baud-ean ezartzen du. Plakan kargatu ondoren, ireki CodeIDEko Serial kontsola, eta hautatu 115200 abiadura aukeratzeko eskatzen badu. Lerro bakoitzak ADCaren irakurketa (0–1023) eta PWM balioa (0–255) erakutsiko ditu. map(valor, entMin, entMax, salMin, salMax) adierazpenean, valor sarrera-balioa da; entMin eta entMax, sarrera-tartearen mugak; salMin eta salMax, dagozkien irteera-balioak.

Mugitu laborategiko Pot. pot1 kontrola: programak PC0 irakurtzen du. RGB_ROJO, RGB_VERDE eta RGB_AZUL izenek kanal gorria, berdea eta urdina adierazten dituzte. SALIDA_RGB izenak hautatutako irteera adierazten du. Serialeko pot1= etiketak irakurketa erakusten du; brillo= etiketak, kalkulatutako PWM balioa.

Ilaran itxaron behar baduzu, osatu hiru TODO hutsuneak eta kalkulatu aurreikusitako PWM balioak ADCaren 0, 512 inguruko eta 1023 irakurketetarako. Gorde kodea sartu aurretik. Konpilazioak huts egiten badu, berrikusi lehen lerro adierazia. Kargaren ondoren Serial hutsik badago, egiaztatu 115200 baud eta ireki kontsola berriz. Kargak huts egiten badu, egiaztatu erreserba eta saiatu berriz behin, saioa berreskuratu aurretik. Aurreikuspenek ez dituzte ordezten hasierako hiru behaketak eta alderantzizko bihurketaren beste biak: osatu benetako plakan sarbidea berreskuratzean.

  1. Ireki STM32 Arduino laborategia eta hautatu CodeIDEko main.ino editore-fitxa.

  2. Itsatsi hasierako programa. TODO 1 hutsunean, aukeratu deklaratutako RGB pin bat. TODO 2 eta 3 hutsuneetan, osatu PWM bihurketa zuzena: gutxieneko irakurketarekin kanala itzalita egon dadila, eta gehienekoarekin distira handiena izan dezala.

  3. Bilatu TODO: osatu hiru hutsuneak konpilatu aurretik, eta kendu osatutako TODO iruzkinak. Gorde, konpilatu, itxaron emaitza zuzena eta kargatu plakan; itxaron kargaren berrespena.

  4. Ireki Serial 115200 baud-ean. Karga zuzen baten ondoren lerrorik ez bada agertzen, egiaztatu abiadura eta ireki kontsola berriz, kodea aldatu aurretik.

  5. Hasierako proba: mugitu potentziometroa posizio baxu, ertain eta altuetara. Bakoitzean, itxaron Serialeko 3–5 lerro agertu arte, kopiatu lerro bereko bi balioak eta behatu hautatutako RGB kanala. Ez dute balio idealekin zehazki bat etorri behar.

  6. Osatu hiru errenkadak eta taularen azpiko azalpena bihurketa aldatu aurretik.

Klase-saio batean erabilgarri

#include <Arduino.h>

const int POT_1 = PC0;
const int RGB_ROJO = PA8;
const int RGB_VERDE = PA9;
const int RGB_AZUL = PA10;
const int SALIDA_RGB = TODO_SALIDA_RGB;  // TODO 1: kontrolatzeko deklaratutako RGB pin bat

void setup() {
  pinMode(SALIDA_RGB, OUTPUT);
  Serial.begin(115200);
}

void loop() {
  int lectura = analogRead(POT_1);
  int brillo = map(lectura, 0, 1023,
                   TODO_PWM_EN_MIN, TODO_PWM_EN_MAX);  // TODO 2-3: bihurketa zuzenaren muturreko irteera-balioak

  analogWrite(SALIDA_RGB, brillo);

  Serial.print("pot1=");
  Serial.print(lectura);
  Serial.print(" brillo=");
  Serial.println(brillo);

  delay(200);
}

Bete taula potentziometroa mugitu eta Serial begiratu ondoren. Erabili hiru errenkada soilik, eta utzi gainerakoak hutsik TEACHek gehiago erakusten baditu:

  • 1. errenkada: potentziometroa posizio baxuan.
  • 2. errenkada: potentziometroa posizio ertainean.
  • 3. errenkada: potentziometroa posizio altuan.
  • Serialeko irakurketa eta Kalkulatutako PWM balioa: kopiatu benetan bistaratutako balio-bikote bat. Irakurketek gora eta behera egin dezakete; ez ordeztu balio idealekin.
  • Behatutako irteera: izendatu RGB kanala eta deskribatu haren distira.
Potentziometroaren posizioa Serialeko irakurketa (ADC balioa) Kalkulatutako PWM balioa (0–255) Behatutako irteera Zentzuzkoa da emaitza?

Erabili gutxienez bi errenkada potentziometroaren irakurketaren eta behatutako distiraren arteko erlazioa azaltzeko.

3

Alderantzikatu bihurketa hasierako proba jaso ondoren

8 min

Hasierako hiru errenkadak osatu ondoren, trukatu map funtzioaren bi PWM irteera-balioak, bihurketa alderantzikatzeko. Ez aldatu SALIDA_RGB. Gorde, konpilatu, kargatu, ireki berriz Serial 115200 baud-ean eta errepikatu posizio baxuko eta altuko probak soilik. Horrela, argi konpara ditzakezu bi bihurketak, RGB kanala aldi berean aldatu gabe.

Erantzun hiru lerrotan, formatu honekin:

  1. aldatutako map: ...
  2. posizio baxua: pot1=... brillo=... | behatutako LEDa: ...
  3. posizio altua: pot1=... brillo=... | behatutako LEDa: ...

Azaldu esaldi batean, bi behaketak erabiliz, nola egiaztatu duzun bihurketa alderantzikatu dela. Emaitzak ez badatoz espero zenuenarekin bat, adierazi zer ez datorren bat eta zer egiaztatuko zenukeen.

4

Entregatu kodea

10 min

Entregatu azken main.ino fitxategia

Gorde main.ino erantsi aurretik. Kode-kopiak probatutako alderantzizko bihurketa, hautatutako RGB irteera eta Serial mezuak erakutsi behar ditu; ez du TODO hutsunerik edo TODO hitza duen iruzkinik izan behar.

Azaldu zergatik ez den egokia 0 eta 1023 arteko balioa zuzenean PWM balio gisa erabiltzea, irteerak 0 eta 255 arteko tartea espero duenean.

Bihurtu aurrebista hau klase-saio batean

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