Progetto 10: Tank Insegui-Luce

(1)Descrizione:

Nei progetti precedenti, abbiamo introdotto in dettaglio l’uso di vari sensori, moduli e schede di espansione sul robot smart car. Ora passiamo ai progetti del robot smart car. I robot smart car insegui-luce, come suggerisce il nome, sono robot smart car in grado di seguire la luce.

Possiamo combinare le conoscenze acquisite nei progetti sul fotoresistore e sulla guida dei motori per realizzare un robot smart car che insegue la luce. Nel progetto, utilizziamo due moduli fotoresistori per rilevare l’intensità luminosa sui lati sinistro e destro del robot smart car, leggiamo i corrispondenti valori analogici, e quindi controlliamo la rotazione dei due motori in base a questi due dati, così da controllare i movimenti del robot smart car.

La logica specifica del robot smart car insegui-luce è mostrata di seguito.

(2)Diagramma di flusso:

(3)Schema di collegamento:

Nota: I pin “G”, “V” e S del modulo fotoresistore sinistro sono collegati rispettivamente a G (GND), V (VCC), A1;

I pin “G”, “V” e S del modulo fotoresistore destro sono collegati rispettivamente a G (GND), V (VCC) e A2.

Il cavo a 4 pin è contrassegnato con A, A1, B1 e B. Il motore posteriore destro è collegato alla porta B della scheda di espansione driver motore 8833 e il motore anteriore sinistro è collegato alla porta A della scheda di espansione driver motore 8833.

(4)Codice di Test:

(Nota: Non collegare il modulo Bluetooth prima di caricare il codice, perché il caricamento del codice utilizza anch’esso la comunicazione seriale, e potrebbero verificarsi conflitti con la comunicazione seriale Bluetooth, che possono causare il fallimento del caricamento.)

/*
  Keyestudio Mini Tank Robot V3 (Popular Edition)
  lesson 10
  light follow tank
  http://www.keyestudio.com
*/
#define light_L_Pin A1   // Definisce il pin del sensore fotosensibile a sinistra
#define light_R_Pin A2   // Definisce il pin del sensore fotosensibile a destra
#define ML_Ctrl 4  // Definisce il pin di controllo della direzione del motore sinistro
#define ML_PWM 6   // Definisce il pin di controllo PWM del motore sinistro
#define MR_Ctrl 2  // Definisce il pin di controllo della direzione del motore destro
#define MR_PWM 5   // Definisce il pin di controllo PWM del motore destro
int left_light;
int right_light;
void setup() 
{
  Serial.begin(9600);
  pinMode(light_L_Pin, INPUT);
  pinMode(light_R_Pin, INPUT);
  pinMode(ML_Ctrl, OUTPUT);
  pinMode(ML_PWM, OUTPUT);
  pinMode(MR_Ctrl, OUTPUT);
  pinMode(MR_PWM, OUTPUT);
}

void loop() 
{
  left_light = analogRead(light_L_Pin);
  right_light = analogRead(light_R_Pin);
  Serial.print("left_light_value = ");
  Serial.println(left_light);
  Serial.print("right_light_value = ");
  Serial.println(right_light);
  if (left_light > 650 && right_light > 650) // vai avanti
  {
    Car_front();
  }
  else if (left_light > 650 && right_light <= 650)  // gira a sinistra
  {
    Car_left();
  }
  else if (left_light <= 650 && right_light > 650) // gira a destra
  {
    Car_right();
  }
  else  // altrimenti, fermati
  {
    Car_Stop();
  }
}

void Car_front()
{
  digitalWrite(MR_Ctrl, HIGH);
  analogWrite(MR_PWM, 55);
  digitalWrite(ML_Ctrl, HIGH);
  analogWrite(ML_PWM, 55);
}

void Car_left()
{
  digitalWrite(MR_Ctrl, HIGH);
  analogWrite(MR_PWM, 55);
  digitalWrite(ML_Ctrl, LOW);
  analogWrite(ML_PWM, 200);
}

void Car_right()
{
  digitalWrite(MR_Ctrl, LOW);
  analogWrite(MR_PWM, 200);
  digitalWrite(ML_Ctrl, HIGH);
  analogWrite(ML_PWM, 55);
}

void Car_Stop()
{
  digitalWrite(MR_Ctrl, LOW);
  analogWrite(MR_PWM, 0);
  digitalWrite(ML_Ctrl, LOW);
  analogWrite(ML_PWM, 0);
}

(5)Risultato del Test

Dopo aver caricato con successo il codice di test, collegato secondo lo schema di cablaggio, spostato il selettore DIP verso destra e alimentato il dispositivo, il robot smart car si muove seguendo la luce.

Img