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); } |