ultimo aggiornamento 23 novembre 2014


 

Per testare il robot, è possibile utilizzare usa semplice applicazione che si chiama BlueStick Control

realizzata dalla Inex Robotics, si tratta di un’applicazione FREE per Android che può essere scaricata dall’ Android market. L’applicazione usa la connessione bluetooth in Serial Port Profile (SPP) e invia un codice esadecimale al robot secondo quanto indicato nella Tabella

Carattere
esadecimale
Carattere
numerico
Direzione di
movimento del robot/Azione
0x30 0 Stop
0x38 8 Avanti
0x32 2 Indietro
0x34 4 Sinistra
0x36 6 Destra
0x43 C Accende faro (Grab)
0x44 D

Spegne faro (Release)

homotix

PCBONLINE

Durante l'uso di questa applicazione, occorre che sullo smartphone sia attiva la connessione bluetooth, se così non fosse occorrerà far riferimento alle istruzioni del proprio dispositivo per attivarla.
Quindi si dovrà accendere il robot ed effettuare la connessione tra smartphone e Robot.
Per comandare il il robot, si potrà utilizzare una delle due modalità disponibili che sono: " Button Mode ", oppure "Mode Tilt " dove il comando del robot avviene tramite l’inclinazione dello smartphone

Altro esempio di applicazione per tablet utilizzabile per il controllo del robot denominata BT Bot Control

Descrizione del Programma

Per la gestione del robot occorre caricare nella memoria del processore presente sulla scheda Arduino Nano, il programma.
Il programma è molto semplice: permetterà di testare essenzialmente il collegamento Bluetooth e i motori per verificare che siano collegati nel modo corretto. Sara inoltre, possibile attivare il faro frontale.
Il programma, dopo aver impostato i pin utilizzati, attende dal modulo bluetooth il ricevimento dei caratteri corrispondenti alle direzioni di spostamento o ai comandi inviati dallo smartphone.
A ognuno è poi associata una sequenza di comandi che impostano il senso e la velocità di rotazione dei motori che viene eseguita dalla scheda controllo motori.
E’ possibile modificare la velocità del robot modificando il valore della variabile vel che, attualmente, nel programma è impostata al valore di 100.

#define vel 100 //velocità dei motori

il valore può variare teoricamente tra 0 e 255 ma se è troppo basso, i motori non ruoteranno.
Questo perché i motori sono controllati in PWM (Pulse wWdth Modulation): con questo sistema la velocità del motore non viene regolata variando la tensione, ma variando il tempo durante il quale, l'intera tensione di alimentazione viene applicata ai terminali del motore.
Nota:
Il modulo Bluetooth comunica con Arduino Nano attraverso la porta hardware UART, la stessa porta è anche utilizzata dall'IDE Arduino per effettuare il download del firmware.
Esiste quindi, un accesso contemporaneo alla risorsa e chiaramente le due cose non possono funzionare insieme.
Quindi, quando dovete programmare la scheda Arduino NANO, occorre rimuovere il modulo Bluetooth, effettuare il download, inserire nuovamente il modulo Bluetooth ed infine accendere la scheda.

 

Programma robot 

 
/*
 Test_Littlebot.ino
 Il programma verifica il funzionamento
 del robot tramite un collegamento bluetooth
 E' possibile anche l'accensione del faro
 
 Vengono utilizzati i seguenti pin
 Pin Digital 3    -> Velocità motore A PWMA
 Pin Digital 4    -> Comando motore A AIN2
 Pin Digital 5    -> Comando motore A AIN1
 Pin Digital 6    -> Standby motori STBY
 Pin Digital 7   -> Comando motore B BIN1
 Pin Digital 8   -> Comando motore B BIN2
 Pin Digital 9    -> Velocità motore A PWMB
 Pin Digital 12   -> Faro
 
Ultima modifica il 30/12/2012
 da Adriano Gandolfo <https://www.adrirobot.it>
 This example code is in the public domain.
 */

/* Pin Digitale */
#define PWMA 3
#define AIN1 5
#define AIN2 4
#define PWMB 9
#define BIN1 7
#define BIN2 8
#define STBY 6
#define luce 12

#define vel 100 //velocità dei motori

void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200); //imposta la porta di comunicazione con il modulo

  pinMode(PWMA,OUTPUT);
  pinMode(AIN1,OUTPUT);
  pinMode(AIN2,OUTPUT);
  pinMode(PWMB,OUTPUT);
  pinMode(BIN1,OUTPUT);
  pinMode(BIN2,OUTPUT);
  pinMode(STBY,OUTPUT);
  pinMode(luce, OUTPUT);
  robot_accendi ();
}

void loop() {

  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)               // Esegue 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 'C'://Se il carattere ricevuto è 'C' Accende faro frontale
    digitalWrite(luce, HIGH);
     break;
  case 'D'://Se il carattere ricevuto è 'D' Spegne il faro frontale
    digitalWrite(luce, LOW);
      break;
  case '0'://Se il carattere ricevuto è '0' esegue la routine Robot fermo
    stop();
    break;
  default:
    stop(); // Ferma il robot
    break;
  }
}

void stop (void)
{
  digitalWrite (AIN1,HIGH);
  digitalWrite (AIN2,HIGH);
  analogWrite(PWMA,vel);
  digitalWrite (BIN1,HIGH);
  digitalWrite (BIN2,HIGH);
  analogWrite(PWMB,vel);  
}

void robot_indietro ()
{
  digitalWrite (AIN1,HIGH);
  digitalWrite (AIN2,LOW);
  analogWrite(PWMA,vel);
  digitalWrite (BIN1,HIGH);
  digitalWrite (BIN2,LOW);
  analogWrite(PWMB,vel);  
}

void robot_avanti ()
{
  digitalWrite (AIN1,LOW);
  digitalWrite (AIN2,HIGH);
  analogWrite(PWMA,vel);
  digitalWrite (BIN1,LOW);
  digitalWrite (BIN2,HIGH);
  analogWrite(PWMB,vel);  
}

void robot_destra ()
{
  digitalWrite (AIN1,HIGH);
  digitalWrite (AIN2,LOW);
  analogWrite(PWMA,vel);
  digitalWrite (BIN1,LOW);
  digitalWrite (BIN2,HIGH);
  analogWrite(PWMB,vel);  
}

void robot_sinistra ()
{
  digitalWrite (AIN1,LOW);
  digitalWrite (AIN2,HIGH);
  analogWrite(PWMA,vel);
  digitalWrite (BIN1,HIGH);
  digitalWrite (BIN2,LOW);
  analogWrite(PWMB,vel);  
}

void robot_accendi ()
{
  digitalWrite(STBY,HIGH);
}

void robot_spegni()
{
  digitalWrite(STBY,LOW);
}

 

Elenco revisioni
23/11/2014 Emissione preliminare