
LEZIONE n° 4
MOTORI CORRENTE CONTINUA
La lezione CORSO DI ROBOTICA del 2018-19 è sui motori in corrente continua e sulla loro gestione. Premettiamo che per analizzare i risultati utilizzeremo il monitor o dei LED.
I motori che vediamo in questa lezione sono i motori in CORRENTE CONTINUA.
Per usare i motori abbiamo bisogno di una shield di controllo degli stessi (in pratica stiamo usando l’equivalente di un “ponte H”, il vecchio integrato 298) che dovremo acquistare a parte da Arduino. Inoltre per far funzionare i motori sarà necessaria una potenza superiore a quella che possiamo prelevare dalla porta USB del PC e dovremo necessariamente utilizzare un generatore esterno.
Arduino, per la sua struttura, permette di comandare, con delle librerie precompilate, due motori in corrente continua utilizzando 4 piedini di controllo (2 per ogni motore) chiamati DIRA e PWMA. Entrambi i piedini sono di tipo digitale.
DIRA = selezione il verso di rotazione del motore
PWMA = gestisce la velocità del motore con un valore compreso tra 0 e 255 utilizzando la modulazione PWM (Pulse Wide Modulation).
Bisogna prestare attenzione alla shield di controllo per gestire i corretti pin che spesso sono selezionabili da dei jamper che troviamo sulla shield.
Cominciamo a vedere, ma ovviamente approfondiremo, dei semplici rudimenti di programmazione per poter gestire nelle migliori condizioni il robot.
RICORDIAMO I PRINCIPI DELLA PROGRAMMAZIONE DI ARDUINO:
- Variabili:
- Tipo (intero, reale, carattere, etc.)
- Nome (caratteri alfanumerici)
- Strutture (corso avanzato)
- Principali comandi:
- Assegnazione
- Si calcola l’espressione a sinistra ed il risultato viene assegnato alla variabile a destra
- Assegnazione
-
-
- Count = count +1
-
-
- IN/OUT
- Istruzioni per immettere o prelevare dei dati
- IN/OUT
-
-
- digitalWrite(pin1,LOW)
-
-
- Test
- Viene eseguito il test (vero o falso) e secondo il valore viene eseguita l’istruzione seguente
- Test
-
-
- If (count <= soglia)
- Istruzione1
- istruzione2
- If (count <= soglia)
- Cicli
- Vengono eseguite ripetutamente un gruppo di istruzioni
- For (x=0;x==9;x++)
- istruzione1
-
Per provare a fare le modifiche proposte copiare il listato (colorato in rosso) ed incollarlo in un editor di solo testo [Notepad ad esempio]
listato programma esempio numero 10:
//////////////// CORSO ROBOT 2018-19 LEZIONE n° — 4 — ESERCIZIO n° 10
Serial.print(” AVANTI \n ” );
delay(10);
digitalWrite(dir_a, HIGH); //Set motor direction, 1 low, 2 high
digitalWrite(dir_b, LOW); //Set motor direction, 3 high, 4 low
analogWrite(pwm_a, speedL); //set both motors to run at 100% duty cycle (fast)
analogWrite(pwm_b, speedL);
Serial.print(“velocita motore A & B = ” );
Serial.print(speedL);
delay(10);
Serial.print(“\n “);
delay(tempo);
analogWrite(pwm_a, speedH); //set both motors to run at 100% duty cycle (fast)
analogWrite(pwm_b, speedH);
Serial.print(“velocita motore A & B = ” );
Serial.print(speedH);
delay(10);
Serial.print(“\n “);
delay(tempo);
Serial.print(” INDIETRO \n ” );
delay(10);
digitalWrite(dir_a, LOW); //Set motor direction, 1 low, 2 high
digitalWrite(dir_b, HIGH); //Set motor direction, 3 high, 4 low
analogWrite(pwm_a, speedL); //set both motors to run at 100% duty cycle (fast)
analogWrite(pwm_b, speedL);
Serial.print(“velocita motore A & B = ” );
Serial.print(speedL);
delay(10);
Serial.print(“\n “);
delay(tempo);
analogWrite(pwm_a, speedH); //set both motors to run at 100% duty cycle (fast)
analogWrite(pwm_b, speedH);
Serial.print(“velocita motore A & B = ” );
Serial.print(speedH);
delay(10);
Serial.print(“\n “);
delay(tempo);
/////////////////////////////////////////////////////////////////////
Modifiche proposte:
Cambiare i tempi
Cambiare la velocità
SUGGERIMENTI
Modificare i valori delle variabili che gestiscono il motore
Provare i cambiamenti
listato programma esempio numero 11:
//////////////// CORSO ROBOT 2018-19 LEZIONE n° — 4 — ESERCIZIO n° 11
Serial.print(” AVANTI \n ” );
delay(10);
digitalWrite (led_RGB_G,HIGH);
digitalWrite (led_RGB_R,LOW);
digitalWrite(dir_a, HIGH); //Set motor direction, 1 low, 2 high
digitalWrite(dir_b, LOW); //Set motor direction, 3 high, 4 low
analogWrite(pwm_a, speedL); //set both motors to run at 100% duty cycle (fast)
analogWrite(pwm_b, speedL);
Serial.print(“velocita motore A & B = ” );
Serial.print(speedL);
delay(10);
Serial.print(“\n “);
delay(tempo);
analogWrite(pwm_a, speedH); //set both motors to run at 100% duty cycle (fast)
analogWrite(pwm_b, speedH);
Serial.print(“velocita motore A & B = ” );
Serial.print(speedH);
delay(10);
Serial.print(“\n “);
delay(tempo);
Serial.print(” INDIETRO \n ” );
delay(10);
digitalWrite (led_RGB_R,HIGH);
digitalWrite (led_RGB_G,LOW);
digitalWrite(dir_a, LOW); //Set motor direction, 1 low, 2 high
digitalWrite(dir_b, HIGH); //Set motor direction, 3 high, 4 low
analogWrite(pwm_a, speedL); //set both motors to run at 100% duty cycle (fast)
analogWrite(pwm_b, speedL);
Serial.print(“velocita motore A & B = ” );
Serial.print(speedL);
delay(10);
Serial.print(“\n “);
delay(tempo);
analogWrite(pwm_a, speedH); //set both motors to run at 100% duty cycle (fast)
analogWrite(pwm_b, speedH);
Serial.print(“velocita motore A & B = ” );
Serial.print(speedH);
delay(10);
Serial.print(“\n “);
delay(tempo);
/////////////////////////////////////////////////////////////////////
Modifiche proposte:
Fare lampeggiare il Led
Cambiare colore al Led
SUGGERIMENTI
Fissare il tempo di accensione e spegnimento, eseguire in sequenza le operazioni
Cambiare il pin
Provare i cambiamenti
listato programma esempio numero 12 (di questo listato vengono omesse alcune parti per stimolare la creatività):
//////////////// CORSO ROBOT 2018-19 LEZIONE n° — 4 — ESERCIZIO n° 12
Serial.print(” AVANTI \n ” );
delay(10);
digitalWrite (led_RGB_G,HIGH);
digitalWrite (led_RGB_R,LOW);
digitalWrite(dir_a, HIGH); //Set motor direction, 1 low, 2 high
digitalWrite(dir_b, LOW); //Set motor direction, 3 high, 4 low
Serial.print(“velocita motore A & B = ” );
Serial.print(speedL);
delay(10);
Serial.print(“\n “);
delay(tempo);
Serial.print(“velocita motore A & B = ” );
Serial.print(speedH);
delay(10);
Serial.print(“\n “);
delay(tempo);
digitalWrite (led_RGB_R,HIGH);
digitalWrite (led_RGB_G,LOW);
digitalWrite(dir_a, LOW); //Set motor direction, 1 low, 2 high
digitalWrite(dir_b, HIGH); //Set motor direction, 3 high, 4 low
analogWrite(pwm_a, speedL); //set both motors to run at 100% duty cycle (fast)
analogWrite(pwm_b, speedL);
digitalWrite(led_Y,LOW);
Serial.print(“velocita motore A & B = ” );
Serial.print(speedL);
delay(10);
Serial.print(“\n “);
delay(tempo);
analogWrite(pwm_a, speedH); //set both motors to run at 100% duty cycle (fast)
analogWrite(pwm_b, speedH);
digitalWrite(led_Y,HIGH);
Serial.print(“velocita motore A & B = ” );
Serial.print(speedH);
delay(10);
Serial.print(“\n “);
delay(tempo);
/////////////////////////////////////////////////////////////////////
Modifiche proposte:
Fare lampeggiare il Led
Cambiare colore al Led
SUGGERIMENTI
Fissare il tempo di accensione e spegnimento, eseguire in sequenza le operazioni
Cambiare il pin
Provare i cambiamenti
di seguito le slide della lezione
(28)