In grassetto i contenuti più importanti.
Video:
Articoli da blog e siti di prof:
Articoli e application note dei produttori di componenti:
Altro:
Di seguito un programma per generare un segnale PWM sul con frequenza di 1 kHz e duty-cycle regolabile usando la scheda Arduino. Usa quattro pulsanti: uno per avviare e uno per fermare la generazione del segnale PWM, uno per aumentare e uno per diminuire il duty-cycle.
// pin (i pin 0 e 1 sono impegnati per la trasmissione seriale) const int pinStart = 8; // piedino da mettere a massa per attivare il PWM const int pinStop = 9; // piedino da mettere a massa per disattivare il PWM const int pinPWMup = 2; // piedino da mettere a massa per incrementare il duty-cycle const int pinPWMdown = 3; // piedino da mettere a massa per diminuire il duty-cycle const int pinPWM = 5; // piedino di uscita del segnale PWM (a 1kHz in quel piedino) // altre variabili int spinning = 0; // attiva o no il segnale PWM int duty = 100; // da 0 a 255 -> 0-100% int PWMup; // stato pin che incrementa il duty-cycle int PWMupPrec = 1; // stato precedente pin che incrementa il duty-cycle int PWMdown; // stato pin che diminuisce il duty-cycle int PWMdownPrec = 1; // stato precedente pin che diminuisce il duty-cycle void setup() { pinMode(pinPWM,OUTPUT); pinMode(pinStart, INPUT_PULLUP); // pull-up interno al micro pinMode(pinStop, INPUT_PULLUP); pinMode(pinPWMup, INPUT_PULLUP); pinMode(pinPWMdown, INPUT_PULLUP); pinMode(13,OUTPUT); // LED 13 acceso quando gira il motore Serial.begin(9600); // debug su serial monitor } void loop() { // gira se pinStart a GND if (!digitalRead(pinStart)){ spinning = 1; } // si ferma se pinStop a GND if (!digitalRead(pinStop)){ spinning = 0; } // LED sulla scheda acceso se gira (PWM attivo) digitalWrite(13, spinning); // attiva/disattiva PWM if(spinning){ // attiva PWM analogWrite(pinPWM, duty); } else{ analogWrite(pinPWM, 0); } // incremento/decremento duty-cycle PWMup = digitalRead(pinPWMup); PWMdown = digitalRead(pinPWMdown); if((!PWMup)&&PWMupPrec){ if (duty+10 < 255) { duty += 10; } delay(20); // antirimbalzo Serial.println(duty); } if((!PWMdown)&&PWMdownPrec){ if (duty-10 > 0) { duty -= 10; } delay(20); Serial.println(duty); } PWMupPrec = PWMup; PWMdownPrec = PWMdown; }
Nel video qua sotto il codice in azione.