ultimo aggiornamento 4 giugno 2012 


 

Programma robot

Per la gestione del robot occorre caricare nella memoria del processore presente sulla scheda Arduino il programma MagicBOT.pde , e il cui listato e visibile sotto.
Il programma Ŕ molto semplice, all'inizio vengono impostati i pin utilizzati

int M1_PWM = 3;  //PWM controllo velocità per motore 1 - pin digitale 3
int M2_PWM = 5;  //PWM controllo velocità per motore 2 - pin digitale 3
int M1 = 2;            //Controllo direzione per motore 1 - pin digitale 2
int M2 = 4;            //Controllo direzione per motore 2 - pin digitale 4

quindi vengono impostati, viene anche impostata la porta di comunicazione seriale

  Serial.begin(9600);                  //imposta la porta di comunicazione con il modulo 
  pinMode(M1_PWM, OUTPUT);  //Imposta i pin come uscite
  pinMode(M2_PWM, OUTPUT);
  pinMode(M1, OUTPUT);
  pinMode(M2, OUTPUT);

homotix

PCBONLINE

PCBgogo

il programma vero e proprio attende dal modulo bluetooth il ricevimento dei caratteri corrispondenti alle direzioni di spostamento inviati dallo smartphone.

while (Serial.available() < 1) {
  }                         // Attesa sino a quando riceve un carattere
  char val = Serial.read(); // Legge il carattere dal modulo Bluetooth e lo salva nella variabile val
  switch(val)               // Eseguie i comandi in base al carattere ricevuto

A ognuno Ŕ poi associato una sequenza di comandi che impostano il senso e la velocitÓ di rotazione dei motori che viene eseguita dalla scheda controllo motori.

 

 

/*
 MagicBOT.pde
 Il programma permette il test della parte controllo
 motore. Sul display LCD dello shield, viene mostrato 
 il comando in esecuzione.
 
 Vengono utilizzati i seguenti pin
 Pin +5V     -> Alimentazione logica
 Pin GND     -> Alimentazione
 Pin Vin     -> Alimentazione motori 
 Pin 0       -> RX Modulo Bluetooth
 Pin 1       -> TX Modulo Bluetooth
 Pin 2       -> Direzione Motore A
 Pin 3       -> PWM - Velocità Motore A
 Pin 4       -> Direzione Motore B
 Pin 5       -> PWM - Velocità Motore B
 
 Creato il 23/5/2012
 da Adriano Gandolfo <https://www.adrirobot.it>
 This example code is in the public domain.
 */


int M1_PWM = 3;  //PWM controllo velocità per motore 1 - pin digitale 3 
int M2_PWM = 5;  //PWM controllo velocità per motore 2 - pin digitale 3 
int M1 = 2;      //Controllo direzione per motore 1 - pin digitale 2
int M2 = 4;      //Controllo direzione per motore 2 - pin digitale 4


void setup()
{
  Serial.begin(9600);       //imposta la porta di comunicazione con il modulo  
  pinMode(M1_PWM, OUTPUT);  //Imposta i pin come uscite
  pinMode(M2_PWM, OUTPUT);
  pinMode(M1, OUTPUT);
  pinMode(M2, OUTPUT);

 // ferma per default entambi i motori
   digitalWrite(M1_PWM, LOW); //Disabilita il comando del motore
   digitalWrite(M2_PWM, LOW);
  delay(500);

 }
void loop(void)
{

  while (Serial.available() < 1) {
  }                         // Attesa sino a quando riceve un carattere
  char val = Serial.read(); // Legge il carattere dal modulo Bluetooth e lo salva nella variabile val
  switch(val)               // Eseguie i comandi in base al carattere ricevuto
  {
  case '8':// Se il carattere ricevuto è '8' esegue la routine Robot avanti
    robot_avanti ();
    break;
  case '2'://Se il carattere ricevuto è '2' esegue la routine Robot indietro
    robot_indietro ();
    break;
  case '4'://Se il carattere ricevuto è '4' esegue la routine Robot sinistra
    robot_sinistra ();
    break;
  case '6'://Se il carattere ricevuto è '6' esegue la routine Robot destra
    robot_destra ();
    break;
  case '0'://Se il carattere ricevuto è '0' esegue la routine Robot fermo
    stop();
    break;
  default:
    stop(); // Ferma il robot
    break;
}
}
void stop(void) //Robot fermo
{
   digitalWrite(M1_PWM, LOW); //Disabilita il comando del motore
   digitalWrite(M2_PWM, LOW);
}
void robot_indietro()
{
  digitalWrite(M1, LOW);
  analogWrite(M1_PWM, 255);
  digitalWrite(M2, HIGH);
  analogWrite(M2_PWM, 255);
}
void robot_avanti ()
{
  digitalWrite(M1, HIGH);
  analogWrite(M1_PWM, 255);
  digitalWrite(M2, LOW);
  analogWrite(M2_PWM, 255);
}
void robot_destra ()
{
  digitalWrite(M1, LOW);
  analogWrite(M1_PWM, 255);
  digitalWrite(M2, LOW);
  analogWrite(M2_PWM, 255); 
 }
void robot_sinistra ()
{
  digitalWrite(M1, HIGH);
  analogWrite(M1_PWM, 255);
  digitalWrite(M2, HIGH);
  analogWrite(M2_PWM, 255); 
 }

Elenco revisioni
04/06/2012 Emissione preliminare