Arduino

Robot con Arduino: Rob1_v2

Come abbiamo visto è necessario aumentare la tensione fornita dal pacco batterie che alimenta i motori. Purtroppo non sono riuscito a montarlo al centro nella parte inferiore (è il pacco da 6 batterie AA è più spesso) e quindi sono stato costretto a montarlo nella parte superiore al fianco della breadboard. In questo modo il robot sarà leggermente sbilanciato e quindi a maggior ragione la velocità dei due motori andrà regolata grazie agli encoder.

In questa foto la nuova configurazione di batterie:

In questa foto invece si vede in dettaglio un encoder:

 

Come si vede nella foto l’encoder è di tipo magnetico con un sensore ad effetto hall (che consente quindi di rilevare un campo magnetico) e di un disco da inserire sull’albero del motore con un magnete ad 8 poli. In questo modo si ottengono 8 variazioni per ogni giro del motore. Visto che il motore è connesso ad un riduttore con rapporto 48:1 si otterranno 384 variazioni per ogni giro della ruota (che è connessa al riduttore di giri).

Questo è il codice per Arduino che permette gestisce il segnale che arriva dai sensori agli ingressi 2 e 3 che permettono di generare interrupt quando avviene una transizione del segnale. Ogni volta che la ruota fa un giro completo viene visualizzato un messaggio sulla seriale. Ho provato ad attaccare del nastro adesivo con un pezzo di carta su ciascuna ruota e la misura risulta corretta.

const int motor_l1 = 8;
const int motor_l2 = 9;
const int motor_r1 = 10;
const int motor_r2 = 11;

const int enable_l = 5;
const int enable_r = 6;

const int intl = 2;
const int intr = 3;

#define ML_MAX_SPEED 255
#define MR_MAX_SPEED 255

volatile byte full_revolutionsl;
unsigned int rpml;
unsigned long timeoldl;
unsigned int stepl;
unsigned int stepr;
 
void setup() {
  Serial.begin(9600);
  
  pinMode(enable_l, OUTPUT);
  pinMode(enable_r, OUTPUT);     
  
  pinMode(motor_l1, OUTPUT);
  pinMode(motor_l2, OUTPUT);
  pinMode(motor_r1, OUTPUT);
  pinMode(motor_r2, OUTPUT);

  pinMode(intl, INPUT_PULLUP);
  pinMode(intr, INPUT_PULLUP);
 
  attachInterrupt(0,encoder_l,CHANGE);
  attachInterrupt(1,encoder_r,CHANGE);

  stepl = 0;
  stepr = 0;

  motorspeed(ML_MAX_SPEED/2, MR_MAX_SPEED/2);
}

void loop() {
 // delay(2000);
  
 // directionl(true);
  directionr(true);

 // delay(2000);

//  directionl(false);
//  directionr(false);
}

void motorspeed (int motor_l_speed, int motor_r_speed) {
  if (motor_l_speed > ML_MAX_SPEED ) motor_l_speed = ML_MAX_SPEED; // limit top speed
  if (motor_r_speed > ML_MAX_SPEED ) motor_r_speed = ML_MAX_SPEED; // limit top speed
  if (motor_l_speed < 0) motor_l_speed = 0; // keep motor above 0
  if (motor_r_speed < 0) motor_r_speed = 0; // keep motor speed above 0 analogWrite (enable_l, motor_l_speed); 
  analogWrite (enable_r, motor_r_speed); 
} 

void directionl (bool dir) { 
   digitalWrite(motor_l1, !dir); 
   digitalWrite(motor_l2, dir); 
} 

void directionr (bool dir) { 
    digitalWrite(motor_r1, !dir); 
    digitalWrite(motor_r2, dir); 
} 

void encoder_l() { 
    stepl++; 
    if (stepl >= 384) {
      Serial.println("revolution_left");
   
      stepl = 0;
    }
}

void encoder_r() {
    stepr++;
    
    if (stepr >= 384) {
      Serial.println("revolution_right");
   
      stepr = 0;
    }
}

 

 

Paolo

Share
Published by
Paolo

Recent Posts

Ogrodnistwo

https://youtu.be/ikhG3K3KRk8 Peppa: Jestem świnka Peppa. To mój mały brat George. To mama świnka. A to…

3 anni ago

Zagubione okulary taty

https://www.youtube.com/watch?v=uhHHH8GqxK4 Peppa: Jestem świnka Peppa. To mój mały brat George. To mama świnka. A to…

3 anni ago

Świnka w środku

https://www.youtube.com/watch?v=iD4XxFky5e4 Peppa: Jestem świnka Peppa. To mój mały brat George. To mama świnka. A to…

3 anni ago

Mama świnka w pracy

https://youtu.be/KDYDkS4mVuw Peppa: Jestem świnka Peppa. To mój mały brat George. To mama świnka. A to…

3 anni ago

Przedszkole

https://www.youtube.com/watch?v=TTi9aMd325s Peppa: Jestem świnka Peppa. To mój mały brat George. To mama świnka. A to…

3 anni ago

Auto elettrica? Per me ancora no ma ragioniamoci.

Dopo aver parlato di quella che ritengo disinformazione riguardo agli investimenti nei piani di accumulo,…

3 anni ago