CR18_lez04 motori

by / mercoledì, 05 dicembre 2018 / Published in Archivio Robotica, Francesco

 

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
      • Count = count +1
    • IN/OUT
      • Istruzioni per immettere o prelevare dei dati
      • digitalWrite(pin1,LOW)
    • Test
      • Viene eseguito il test (vero o falso) e secondo il valore viene eseguita l’istruzione seguente
      • If (count <= soglia)
        • Istruzione1
        • istruzione2
    • 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

 

(23)

Lascia un commento

TOP