Prvi koraki v Arduino – pulzno širinsko krmiljenje osvetljenosti
Milan
Gaberšek in Slavko Kocijančič
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);
}
|