cR_2019_lezione5

by / mercoledì, 22 gennaio 2020 / Published in Archivio Robotica, Corso Robotica 19-20, Robotica

 

 

LEZIONE n° 5

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, 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.

 

Rivediamo, 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 13:

//////////////// CORSO ROBOT 2019-20 LEZIONE n° — 5 — ESERCIZIO n° 13

Pot_value = analogRead(potentiometerC);

Serial.print(” Pot.Value ‘C’ = ” );

Serial.print(Pot_value);

Serial.print(“\n”);

if (Pot_value >= THRESHOLD_POT_HIGH)

{

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

}

else

{

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:

Cambiare i tempi

Cambiare la velocità

SUGGERIMENTI

Fissare 2 soglie (e le tre Azioni da fare)

(Avanti piano/Avanti veloce/Dietro)

Provare i cambiamenti

 

listato programma esempio numero 14:

//////////////// CORSO ROBOT 2019-20 LEZIONE n° — 5 — ESERCIZIO n° 14

PotA_value = analogRead(potentiometerA);

Serial.print(” Pot.Value ‘A’ = ” );

Serial.print(PotA_value);

PotC_value = analogRead(potentiometerC);

PotC_value_m = map(PotC_value,0,450,50,150);

Serial.print(” Pot.Value ‘C’ = ” );

Serial.print(PotC_value);

Serial.print(” Pot.MOD ‘C’ = ” );

Serial.print(PotC_value_m);

// Serial.print(“\n”);

if (PotA_value >= THRESHOLD_POT_HIGH)

{

Serial.print(” AVANTI ” );

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, PotC_value_m); //set both motors to run at 100% duty cycle (fast)

analogWrite(pwm_b, PotC_value_m);

digitalWrite(led_Y,LOW);

Serial.print(“velocita motore A & B = ” );

Serial.print(PotC_value_m);

delay(10);

Serial.print(“\n “);

delay(tempo);

}

else

{

Serial.print(” INDIETRO ” );

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, PotC_value_m); //set both motors to run at 100% duty cycle (fast)

analogWrite(pwm_b, PotC_value_m);

digitalWrite(led_Y,LOW);

Serial.print(“velocita motore A & B = ” );

Serial.print(PotC_value_m);

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 15:

//////////////// CORSO ROBOT 2019-20 LEZIONE n° — 5 — ESERCIZIO n° 15

int Num_ciclo = 7;

Serial.print(” ciclo = ” );

Serial.print(ciclo);

if(ciclo<Num_ciclo)

{

PotA_value = analogRead(potentiometerA);

Serial.print(” Pot.Value ‘A’ = ” );

Serial.print(PotA_value);

// Serial.print(“\n”);

PotC_value = analogRead(potentiometerC);

PotC_value_m = map(PotC_value,0,550,50,200);

Serial.print(” Pot.Value ‘C’ = ” );

Serial.print(PotC_value);

Serial.print(” Pot.MOD ‘C’ = ” );

Serial.print(PotC_value_m);

// Serial.print(“\n”);

if (PotA_value >= THRESHOLD_POT_HIGH)

{

Serial.print(” AVANTI ” );

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, PotC_value_m); //set both motors to run at 100% duty cycle (fast)

analogWrite(pwm_b, PotC_value_m);

digitalWrite(led_Y,LOW);

Serial.print(“velocita motore A & B = ” );

Serial.print(PotC_value_m);

delay(10);

Serial.print(“\n “);

delay(tempo);

}

else

{

Serial.print(” INDIETRO ” );

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, PotC_value_m); //set both motors to run at 100% duty cycle (fast)

analogWrite(pwm_b, PotC_value_m);

digitalWrite(led_Y,LOW);

Serial.print(“velocita motore A & B = ” );

Serial.print(PotC_value_m);

delay(10);

Serial.print(“\n “);

delay(tempo);

}

ciclo = ciclo+1;

}

else

{

Serial.print(“\n “);

ciclo =1;

digitalWrite (led2_RGB_B,HIGH);

digitalWrite (led3_RGB_B,HIGH);

delay(TIME_WAIT);

digitalWrite (led2_RGB_B,LOW);

digitalWrite (led3_RGB_B,LOW);

delay(TIME_WAIT);

/////////////////////////////////////////////////////////////////////

Modifiche proposte:

Cambiare il numero dei cicli

Accendere il LED solo nei cicli di valore PARI

 

SUGGERIMENTI

Trovare il valore della variabile di controllo e cambiarlo

scoprire se il valore della variabile ci controllo è PARI

(confronto con se stesso diviso e moltiplicato per 2)

Provare i cambiamenti

 

di seguito le slide della lezione

(6)

Lascia un commento

TOP