ultimo aggiornamento 6 gennaio 2013


 

La prima versione del robot Magic BOT prevedeva l'utilizzo per il comando da remoto l'utilizzo del modulo Easy Bluetooth venduto dalla PARALLAX è realizzato  dalla RoboTech srl
Questo può però essere sostituito con altri modelli in commercio come il modulo BlueSMiRF Silver è un modem wireless Bluetooth prodotto dalla SparkFun, basato sull'integrato BlueSMiRF-42 RN, e può sostituire un collegamento di tipo seriale mediante cavo

Modulo Easy Bluetooth - Parallax

Modulo Blue SMRF Silver - SparkFun

homotix

PCBONLINE

Caratteristiche del modulo BlueSMiRF Silver

• Approvazione FCC Classe 2 Bluetooth Modem Radio
• Piccole dimensioni  - 51.5x15.8x5.6mm
• Collegamento molto robusto sia in integrità che come distanza di trasmissione (18m)
• Hardy frequency hopping scheme - opera in ambienti RF come il Wi-Fi, 802.11g, e Zigbee
• Connessione crittografata
• Frequenza: 2.4 ~ 2,524 GHz
• Tensione di funzionamento: 3.3V-6V
• Comunicazione seriale: 2400-115200 bps
• Temperatura di funzionamento: -40 ~ +70 C
• Antenna integrata

 

Il modulo BlueSMiRF Silver viene installato sulla piccola breadboard analogamente al precedente modello.

Sono sufficienti quattro cavi: +5V, GND, TX, RX. Resta inteso che il collegamento con arduino prevede che i due segnali TX e RX siano incrociati.

Quando viene alimentato il robot si accenderà lampeggiando il led rosso sino a quando non sarà instaurato un collegamento.

Quando verrà effettuato il collegamento il led rosso si spegnerà e si accendeà il led verde.

La modifica prevede solamente una piccola modifica al programma che è quella della velocità di collegamento che da 9600 dovrà essere portata a 115200

Serial.begin(115200);       //imposta la porta di comunicazione con il modulo 

/*
 MagicBOT.ino
 Il programma permette il test della parte controllo motore. 
 
 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
 
 Ultima modifica il 5/1/2013
 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(115200);       //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:
06/01/2013 Emissione preliminare