drti

Prvi koraki v Arduino – pulzno širinsko krmiljenje osvetljenosti

 

Milan Gaberšek in Slavko Kocijančič , članek v reviji TIM, številka 5, letnik 2020/21

 

V štirinajstem prispevku na temo Prvi koraki v Arduino se bomo avtomobilčku posvetili le še posredno. Spoznali bomo namreč, kako s preprostim vezjem lahko spremljamo jakost vpadle svetlobe in glede na to počasi povečujemo moč svetlobe svetila, kar bomo dosegli s pomočjo pulzno širinske modulacije. Za svetilo bomo uporabili najprej svetlečo diodo in nato še žarnico. Slednja za delovanje zahteva večjo moč, kot jo lahko zagotovi krmilnik, zato si bomo pomagali s t. i. H-mostičem, ki je prvenstveno namenjen krmiljenju motorčkov. Podobno lahko avtomobilčku spreminjamo tudi hitrost vrtenja koles.

 

Programsko kodo si preko kopiraj/prilepi prenesite v Arduino IDE, da vam ne bo treba pretipkavati.  

 

 

//
// Program Arduino - pwmLED.ino
// Pulzno širinsko krmiljenje (PWM) 
// svetleče diode

const int led = 5;
const int svetlobniSenzor = A0;
// Vrednost iz senznorja bomo
// shranili v spremenljivko
int vrednost = 0;
// Ker so vrednosti za 
// analogWrite med 0 in 255,
// moramo izračunati koeficient
int minSvetlo = 10;
int maxSvetlo = 500;
float koeficient = 255/(maxSvetlo-minSvetlo);
int vrednostPWM = 0;

void setup() {
  // Branje podatkov preko
  // serijskega vmesnika USB
  Serial.begin(9600);
  pinMode(led, OUTPUT);
}

void loop() {
  // Vrednost senzorja preberemo 
  // in izračunamo vrednost za PWM
  vrednost = analogRead(svetlobniSenzor);
  vrednostPWM = (int) (255 - koeficient * (vrednost-minSvetlo));
  // Dobljeni podatek izpišemo na zaslon
  Serial.println(vrednostPWM);
  // In nastavimo vrednost na pinu led
  analogWrite(led, vrednostPWM);
}

 
//
// Program Arduino - pwmLUCKA.ino
// Pulzno širinsko krmiljenje (PWM) 
// lučke preko H-mostiča 

// PWM krmiljenje preko H-mostiča
const int pinA1 = 9;
const int  pinA2 = 10;

const int led = 5;
const int svetlobniSenzor = A0;
// Vrednost iz senznorja bomo
// shranili v spremenljivko
int vrednost = 0;
// Ker so vrednosti za 
// analogWrite med 0 in 255,
// moramo izračunati koeficient
int minSvetlo = 10;
int maxSvetlo = 500;
float koeficient = 255/(maxSvetlo-minSvetlo);
int vrednostPWM = 0;

void setup() {
  // Branje podatkov preko
  // serijskega vmesnika USB
  Serial.begin(9600);
  pinMode(led, OUTPUT);
  
  // PWM krmiljenje preko H-mostiča
  pinMode(pinA1, OUTPUT);
  pinMode(pinA2, OUTPUT);
}

void loop() {
  // Vrednost senzorja preberemo 
  // in izračunamo vrednost za PWM
  vrednost = analogRead(svetlobniSenzor);
  vrednostPWM = (int) (255 - koeficient * (vrednost-minSvetlo));
  // Dobljeni podatek izpišemo na zaslon
  Serial.println(vrednostPWM);
  analogWrite(led, vrednostPWM);
  
  // PWM krmiljenje preko H-mostiča
  analogWrite(pinA1, 0);
  analogWrite(pinA2, vrednostPWM);
}