cR_2019_lezione4

by / sabato, 21 dicembre 2019 / Published in Archivio Robotica, Corso Robotica 19-20, Robotica

 

 

LEZIONE n° 4

MOTORI CORRENTE CONTINUA

 

 

La lezione CORSO DI ROBOTICA del 2019-20 è 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 UNO, 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 2019-20 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 2019-20 LEZIONE n° — 4 — ESERCIZIO n° 11

Serial.print(” AVANTI \n ” );

delay(10);

digitalWrite (led1_RGB_G,HIGH);

digitalWrite (led1_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 (led1_RGB_R,HIGH);

digitalWrite (led1_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:

//////////////// CORSO ROBOT 2019-20 LEZIONE n° — 4 — ESERCIZIO n° 12

Serial.print(” AVANTI \n ” );

delay(10);

digitalWrite (led1_RGB_G,HIGH);

digitalWrite (led1_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);

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

Serial.print(” INDIETRO \n ” );

delay(10);

digitalWrite (led1_RGB_R,HIGH);

digitalWrite (led1_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

 

(7)

Lascia un commento

TOP