Robot 2wd rover con arduino

Robot 2wd rover con Arduino

Con questo progetto potrete realizzare un rover 2WD con Arduino che potrà essere integrato via via con sensori e funzioni.

Iniziamo i lavori….
Si parte dalle ruote,….
Occorreranno: 4 viti M3x30, 4 dadi e 4 rondelle.
Si faranno passare i cavi dei motori.
Montaggio ruota piroettante.
Occorreranno: 4 viti M3x16, 4 dadi, 4 rondelle e 4 spessori di 10 mm.
Montaggio Elettronica
Occorreranno: 8 viti M3x16, 8 dadi, 8 rondelle, 8 spessori da 10 mm.
Montaggio Porta-batterie ed interruttore
Occorreranno: 2 viti M3x10 svasate e 2 dadi.
Quando si inserisce l’interruttore far attenzione al verso come da foto.
Cablaggio
Questo è un esempio di collegamento
Si utilizzeranno dei cavi Dupont femmina femmina da 10 cm.
Sotto è il risultato, dopo aver connesso anche i motori.
Qui si vedono le connessioni del porta-batterie e l’interruttore.
Il cavo negativo del porta-batteire andrà direttamente GND della scheda LM298, il positivo andrà fatto passare prima dall’interruttore per poi andarà al Vin della scheda LM298.
Il Modulo BluetoothPer collegare VCC e GND del modulo si possono usare quelli del connettore ICSP di Arduino

Per tenere fermo il modulo Bluetooth si pio’ utilizzare una fascetta di plastica

Come APP per Android vi consigliamo di usare la nostra  “Makerslab 1 Robot Control” scaricabile da qui
Uno Sketc di esempio da usare è il seguente:

#include <SoftwareSerial.h>
//Connessioni al LM298
#define ENA 11
#define IN1 10
#define IN2 9
#define IN3 8
#define IN4 7
#define ENB 6
// Connessioni al Bluetooth su seriale virtuale
#define BT_TX_PIN 3
#define BT_RX_PIN 2

int velocita = 100; // velocità predefinita

char data;

SoftwareSerial bt =  SoftwareSerial(BT_RX_PIN, BT_TX_PIN);

void Avanti () {
  digitalWrite(IN1, 1);
  digitalWrite(IN2, 0);
  digitalWrite(IN3, 0);
  digitalWrite(IN4, 1);
  analogWrite(ENA, velocita); // Attiva il motore A
  analogWrite(ENB, velocita); // Attiva il motore B
}
void Indietro () {
  digitalWrite(IN1, 0);
  digitalWrite(IN2, 1);
  digitalWrite(IN3, 1);
  digitalWrite(IN4, 0);
  analogWrite(ENA, velocita); // Attiva il motore A
  analogWrite(ENB, velocita); // Attiva il motore B
}

void Sinistra () {
  digitalWrite(IN1, 1);
  digitalWrite(IN2, 0);
  digitalWrite(IN3, 1);
  digitalWrite(IN4, 0);
  analogWrite(ENA, velocita);
  analogWrite(ENB, velocita);
}

void Destra () {
  digitalWrite(IN1, 0);
  digitalWrite(IN2, 1);
  digitalWrite(IN3, 0);
  digitalWrite(IN4, 1);
  analogWrite(ENA, velocita);
  analogWrite(ENB, velocita);
}

void avantiDestra () {
  digitalWrite(IN1, 1);
  digitalWrite(IN2, 0);
  digitalWrite(IN3, 0);
  digitalWrite(IN4, 1);
  analogWrite(ENA, 0);
  analogWrite(ENB, velocita);
}

void avantiSinistra () {
  digitalWrite(IN1, 1);
  digitalWrite(IN2, 0);
  digitalWrite(IN3, 0);
  digitalWrite(IN4, 1);
  analogWrite(ENA, velocita);
  analogWrite(ENB, 0);
}

void indietroDestra () {
  digitalWrite(IN1, 0);
  digitalWrite(IN2, 1);
  digitalWrite(IN3, 1);
  digitalWrite(IN4, 0);
  analogWrite(ENA, 0);
  analogWrite(ENB, velocita);
}

void indietroSinistra () {
  digitalWrite(IN1, 0);
  digitalWrite(IN2, 1);
  digitalWrite(IN3, 1);
  digitalWrite(IN4, 0);
  analogWrite(ENA, velocita);
  analogWrite(ENB, 0);
}

void setup() {
  pinMode(BT_RX_PIN, INPUT);
  pinMode(BT_TX_PIN, OUTPUT);
  bt.begin(9600);
  bt.flush();

  pinMode(ENA, OUTPUT);
  pinMode(ENB, OUTPUT);
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  pinMode(IN3, OUTPUT);
  pinMode(IN4, OUTPUT);
  analogWrite(ENA, 0); // blocca il motore A
  analogWrite(ENB, 0); // blocca il motore B
}

void loop() {
  if (bt.available() > 0) {
    data = bt.read();
    delay(3);
  }

  switch (data) {

    case 'M':
      analogWrite(ENA, 0); // blocca il motore A
      analogWrite(ENB, 0); // blocca il motore B
      break;
    case 'U':
      Avanti();
      break;
    case 'D':
      Indietro();
      break;
    case 'L':
      Sinistra();
      break;
    case 'R':
      Destra();
      break;
    case 'F':
      avantiDestra();
      break;
    case 'E':
      indietroDestra();
      break;
    case 'A':
      avantiSinistra();
      break;
    case 'C':
      indietroSinistra();
      break;
    case '0':
      velocita = 100;
      break;
    case '1':
      velocita = 135;
      break;
    case '2':
      velocita = 150;
      break;
    case '3':
      velocita = 165;
      break;
    case '4':
      velocita = 180;
      break;
    case '5':
      velocita = 195;
      break;
    case '6':
      velocita = 210;
      break;
    case '7':
      velocita = 225;
      break;
    case '8':
      velocita = 240;
      break;
    case '9':
      velocita = 255;
      break;
  }
  bt.flush();
}