top of page
Immagine del redattoreRobNico

Arduino car 4wd all-in-one #1parte

Aggiornamento: 25 gen 2021

Questo sarà il primo di una serie di post in cui andremo a costruire una Car robot a 4 ruote motrici, completa di sensore ultrasuoni, sensore segui linea 3 vie, modulo bluetooth, sensore infrarossi.


Basato sulla scheda controller Arduino Uno , avrà diverse modalità come auto-go, prevenzione degli ostacoli, modalità di tracciamento della linea, controllo a infrarossi con telecomando e controllo bluetooth tramite App Android.

Hardware occorrente:

  • 1 Chassis Car 4 WD *

  • 1 Arduino Uno

  • 1 L298 motor driver

  • 1 Arduino shield v5.0 **

  • 1 Modulo bluetooth HC-05/06

  • 1 Servo motore SG-90

  • 1 Sensore ultrasuoni HC-SR04

  • 1 Sensore segui linea 3 Vie

  • 1 Sensore infrarossi IR

  • 1 Telecomando

  • 1 Porta batterie al litio

  • 2 Batterie 18650 litio ****

    • 1 Caricabatterie x 18650

Cavetteria varia, ecc..


* Chassis Car 4 WD Kit

Questi kit si trovano in molte versioni, occorre controllare, se non si vuole ricorrere all'uso del trapano, che sia compatibile con Arduino, con foratura predisposta per i moduli e le schede, nonchè per il servo SG90, tipo questo qui.


** Arduino shield v5.0

Questa shield si può anche non usare, serve esclusivamente a rendere più pulito e più semplice il cablaggio.


**** Batterie 18650 litio

Le batterie al Litio possiono essere sostituite con le classiche 4 pile 1,5V AA.


Passiamo al montaggio dello chassis inferiore, posizioniamo i 4 motori DC, la disposizione può variare in base al modello dello Chassis Car 4 WD.



Posizioniamo il modulo Motor driver L298, possiamo utilizzare distanziatori e viti oppure utilizzando un buon nastro biadesivo, la posizione è indifferente importante è la possibilità di accedere facilmente ai morsetti.





Se utilizzate Arduino shield v5.0 i collegamenti sono facilmente eseguibili con cavetti Jumper Femmina-Femmina.



Far muovere l'auto

ENA e ENB controllano separatamente la velocità del motore destro e la velocità del motore sinistro da parte di PWM.

IN1, IN2, IN3, IN4: IN1 e IN2 sono usati per controllare il motore destro, IN3 e IN4 sono usati per controllare il motore sinistro.

(Prendiamo per esempio il motore a destra)



Vediamo come muovere il motore senza il controllo della velocità.

Dopo il cablaggio copiare il codice nel IDE di Arduino, collegare la scheda del controller UNO al computer, Carica il programma nella

UNO board.



// Rotazione motori destra
//  ENA   IN1    IN2         
// ALTO  BASSO  BASSO Il motore è fermo (frena)
// ALTO  BASSO  ALTO  Il motore è acceso e gira in avanti
// ALTO  ALTO   BASSO Il motore è acceso e gira all'indietro
// ALTO  ALTO   ALTO  Il motore è fermo (frena)

// definire IO pin
#define ENA 5 
#define IN1 2
#define IN2 4

void setup() {
  pinMode(IN1, OUTPUT);    //imposta pin IO OUTPUT
  pinMode(IN2, OUTPUT);
  pinMode(ENA, OUTPUT);
  digitalWrite(ENA, HIGH); //Abilita motore destro   
}

void loop() {
  digitalWrite(IN1, LOW);      
  digitalWrite(IN2, HIGH); //Ruota destra che gira in avanti
  delay(500);              //ritardare 500 ms
  digitalWrite(IN1, LOW);      
  digitalWrite(IN2, LOW);  //Ruota destra ferma
  delay(500);
  digitalWrite(IN1, HIGH);      
  digitalWrite(IN2, LOW);  //Ruota destra che gira all'indietro
  delay(500);
  digitalWrite(IN1, HIGH);      
  digitalWrite(IN2, HIGH); //Ruota destra ferma
  delay(500);
}

Sulla base del codice sopra riportato, abbiamo un semplice programma per far ruotare la ruota destra in direzione positiva 0.5s, arresto 0.5s, girare 0.5s in direzione negativa e fermata 0.5s. E la ruota ripeterà la reazione.

Se la direzione di rotazione di uno dei motori è opposta, modifica la posizione di collegamento dei suoi fili neri e rossi.

 

Ripetiamo i passaggi per la ruota sinistra.


Copiare il codice nel IDE di Arduino, collegare la scheda del controller UNO al computer, Carica il programma nella UNO board.


// Rotazione motori sinistra
//  ENB   IN3    IN4         
// ALTO  BASSO  BASSO Il motore è fermo (frena)
// ALTO  BASSO  ALTO  Il motore è acceso e gira in avanti
// ALTO  ALTO   BASSO Il motore è acceso e gira all'indietro
// ALTO  ALTO   ALTO  Il motore è fermo (frena)

// definire IO pin
#define ENB 6
#define IN3 7
#define IN4 8

void setup() {
  pinMode(IN3, OUTPUT);    //imposta pin IO OUTPUT
  pinMode(IN4, OUTPUT);
  pinMode(ENB, OUTPUT);
  digitalWrite(ENB, HIGH); //Abilita motore sinistro       
}

void loop() {
  digitalWrite(IN3, LOW);      
  digitalWrite(IN4, HIGH); //Ruota sinistra che gira in avanti
  delay(500);              //ritardare 500 ms
  digitalWrite(IN3, LOW);      
  digitalWrite(IN4, LOW);  //Ruota sinistra ferma
  delay(500);
  digitalWrite(IN3, HIGH);      
  digitalWrite(IN4, LOW);  //Ruota sinistra che gira all'indietro
  delay(500);
  digitalWrite(IN3, HIGH);      
  digitalWrite(IN4, HIGH); //Ruota sinistra ferma
  delay(500);
}

Stessa condizione, il programma in questo caso fa ruotare la ruota sinistra in direzione positiva 0.5s, arresto 0.5s, girare 0.5s in direzione negativa e fermata 0.5s. E la ruota ripeterà la reazione.

Se la direzione di rotazione di uno dei motori è opposta, modifica la posizione di collegamento dei suoi fili neri e rossi.

 

Per finire un codice per Il controllo della velocità con la funzione CAR_SPEED che permette di modificare il valore della velocità dell’auto.



//Controllo velocità

#define ENA 5
#define ENB 6
#define IN1 2
#define IN2 4
#define IN3 7
#define IN4 8

void setup() {
  pinMode(IN1,OUTPUT);
  pinMode(IN2,OUTPUT);
  pinMode(IN3,OUTPUT);
  pinMode(IN4,OUTPUT);
  pinMode(ENA,OUTPUT);
  pinMode(ENB,OUTPUT);
}

void loop() {
  //avanti
  digitalWrite(IN1,LOW); 
  digitalWrite(IN2,HIGH);  
  digitalWrite(IN3,LOW);  
  digitalWrite(IN4,HIGH);
  //riduce la velocità
  for(int i = 255; i >= 0; i--){ 
    analogWrite(ENB,i);
    analogWrite(ENA,i);
    delay(20);
  }

  //stop
  analogWrite(ENB,0); //velocità = 0
  analogWrite(ENA,0);  
  delay(1000);

  //indietro
  digitalWrite(IN1,HIGH);
  digitalWrite(IN2,LOW);
  digitalWrite(IN3,HIGH);
  digitalWrite(IN4,LOW);
  //accellera
  for(int i = 0; i <= 255; i++){ 
    analogWrite(ENB,i);
    analogWrite(ENA,i);
    delay(20);
  } 
  
  //stop
  digitalWrite(ENB,LOW); 
  digitalWrite(ENA,LOW);  
  delay(2000);   
}

 

Per riassumere vediamo come sono impostate le uscite digitali del Motor drive L298n in base alla direzione:

 

Passiamo ora a montare il Servo motore SG-90 con il Sensore ultrasuoni HC-SR04 nella piastra superiore come in figura:



Il servomotore ha tre conduttori. Il colore dei cavi varia tra i servomotori, nel SG90 il cavo rosso/arancione è +5V VCC , il cavo marrone è GND , il giallo è il cavo di controllo > PIN A2 (signal).


Per finire dobbiamo fissare il sensore HC-SR04 nella relativa staffa di montaggio e sul servo Motore SG90.


Il sensore HC-SR04 ha 4 Pin, VCC > V, Trigger > A1, Echo > A0, GND > G


Codice controllo test servo motore SG90.

Dopo il cablaggio del servo SG90 copiare il codice nel IDE di Arduino, collegare la scheda del controller UNO al computer, carica il programma nella UNO board. (Occorre installare la libreria Servo.h se non disponibile nella cartella Libraries di Arduino IDE)


#include <Servo.h>

Servo myservo;  

int pos = 0;   // variabile per memorizzare la posizione del servo

void setup() {
  myservo.attach(A2);  // attacca il servo sul pin A2 
   
}

void loop() {
  
  for (pos = 0; pos <= 180; pos += 1) { // va da 0 gradi a 180 gradi
    // incrementi di 1 grado
    myservo.write(pos);    // dice a servo di andare in posizione nella variabile 'pos'
    delay(15);            // attende 15ms che il servo raggiunga la posizione
  }
  for (pos = 180; pos >= 0; pos -= 1) { // va da 180 gradi a 0 gradi
    myservo.write(pos);  // dire al servo di andare in posizione nella variabile 'pos'
    delay(15);          // attende 15ms che il servo raggiunga la posizione
  }
  
}

Il programma farà ruotare il servo motore con step di 1 grado da 0° a 180°.


Codice controllo test sensore HC-SR04

Dopo il cablaggio del sensore HC-SR04 copiare il codice nel IDE di Arduino, collegare la scheda del controller UNO al computer, carica il programma nella UNO board. (Occorre installare la libreria SR04.h se non disponibile nella cartella Libraries di Arduino IDE)



#include "SR04.h"
#define TRIG_PIN A1
#define ECHO_PIN A0
SR04 sr04 = SR04(ECHO_PIN,TRIG_PIN);
long a;

void setup() {
   Serial.begin(9600);
   delay(1000);
}

void loop() {
   a=sr04.Distance();
   Serial.print(a);
   Serial.println("cm");
   delay(1000);
}

Il programma una volta caricato mostra sul Monitor seriale la distanza in cm di qualunque oggetto posizionato davanti al sensore Ultrasuoni HC-SR04.

 

977 visualizzazioni0 commenti

Post recenti

Mostra tutti

Comments


bottom of page