Arduino Forum

International => Français => Topic started by: zTont on Feb 23, 2015, 10:07 am

Title: Bluetooth Arduino
Post by: zTont on Feb 23, 2015, 10:07 am


Bonjour,

Je suis en train de réaliser un robot. Je me suis procuré un module Bluetooth HC-06. J'ai alors suivi le tutoriel : http://tiptopboards.free.fr/arduino_forum/viewtopic.php?f=2&t=57

Comme je dispose d'une arduino Mega, j'ai utilisé Serial3 pour disposé des autres Tx et Rx que propose cette carte. J'ai ensuite fait la procédure pour la connecter :elle était sur le COM5.

Malheureusement, le robot réagit au Bluetooth seulement lorsqu'il reste tout de même connecté par l'USB (donc aucun intérêt). Ainsi, lorsque je me met dans ce COM5 du module Bluetooth (tandis que l'arduino Mega occupe le COM7, j'ai bien utilisé le bon COM, je ne me suis pas trompé hein ^^). Quand je le débranche, et que je le fais donc fonctionner sous piles, il ne réagit plus au Bluetooth, bien qu'il arrive à s'y connecter. Mes ordres n'ont plus aucun effet. J'ai déjà essayer avec plusieurs logiciels (Putty, Termite, ou même tout simplement Arduino,... -> sans succès).

Le Code de ce robot n'a pour l'instant n'a rien d'exceptionnel : aucune inclusion, puis juste un Serial3.begin(9600).

Après bien trop d'heures d'embêtements, je viens demander votre aide.

Bonne journée,
zTony
Title: Re: Bluetooth Arduino
Post by: icare on Feb 23, 2015, 10:13 am
Bonjour,
Pas de réponse possible sans ton code ;)
Title: Re: Bluetooth Arduino
Post by: zTont on Feb 23, 2015, 10:26 am
Voici le code:
(mais la seule chose vraiment intéressante est le Serial3 je pense)

Code: [Select]
#include <Servo.h>


#define serv A0
#define motor1 0 // Port A
#define motor2 1 // Port A
#define motorEnable 2 // Port A

enum Direction {gauche, centre, droit} direct = centre;
byte angle[3] ={0, 30, 60};

enum Motor {avancer, arret, reculer} motor = arret;


Servo servoD;

void setup()
{
  // moteur OUTPUT
  DDRF |= 1;
  pinMode(serv,   OUTPUT);
  DDRA |= 1<<motor1;
  DDRA |= 1<<motor2;
  DDRA |= 1<<motorEnable;
 
  PORTA |= 1<<motorEnable;
 
  //Serial
  Serial3.begin(9600);
 
  servoD.attach(serv);
  // Timer3
  TCCR3A = 0b00000110; //16 us
  TIMSK3 = 0b00000001;
  sei();
 
}


void goback()
{
  switch(motor)
  {
    case avancer :
    {
      PORTA |= 1<<motor1;
      PORTA &=~ (1<<motor2);
      break;
    }
    case arret :
    {
      PORTA &=~ (1<<motor1);
      PORTA &=~ (1<<motor2);     
      break;
    }
     case reculer :
    {
      PORTA &=~ (1<<motor1);
      PORTA |= 1<<motor2;     
      break;
    }
  }
 

}

void tourner ()
{
  servoD.write(angle[direct]);
}

void motorRac (byte a)
{
  switch (a)
  {
    case '1':
    {
      direct = gauche;
      motor = reculer;
      break;
    }
    case '2':
    {
      direct = centre;
      motor = reculer;
      break;
    }
    case '3':
    {
      direct = droit;
      motor = reculer;
      break;
    }
    case '4':
    {
      direct = gauche;
      motor = arret;
      break;
    }
    case '5':
    {
      direct = centre;
      motor = arret;
      break;
    }
    case '6':
    {
      direct = droit;
      motor = arret;
      break;
    }
    case '7':
    {
      direct = gauche;
      motor = avancer;
      break;
    }
    case '8':
    {
      direct = centre;
      motor = avancer;
      break;
    }
    case '9':
    {
      direct = droit;
      motor = avancer;
      break;
    }
    default : Serial3.print('e');
  }
}



byte result;

ISR (TIMER3_OVF_vect) { // répétition toutes les 2 ms : 125*16
  TCNT2 = 125;
  goback();
  tourner(); 
}


void loop()
{
  if (Serial3.available()>0)
  {
    result = Serial3.read();
    motorRac(result);
  }
}




EDIT:
Bonjour,

 

J'ai 2 nouvelles informations à transmettre :

 

Ma carte a, lorsqu'elle est branché par une alimentation externe ou en USB, comme un battement de cœur : sa lampe s'éteint et se rallume en quelques ms.

Le Servomoteur n'arrête pas de faire : 'tic', 'tic' et de faire un petit mouvement, comme si on le rallumait à chaque fois et qu'il tentait de revenir à sa position voulue.

 

Lorsque j'envoie quelque chose à travers le bluetooth lorsque l'usb n'est pas branche (alimentation externe), la petite led L de la carte s'éteint (mais la carte reste allumée) puis se rallume au bout d'un certain temps plus ou moins long (quelques secondes). Les battements que j'ai évoqué précédemment s'arrête aussi.

 

Merci et bonne journée

EDIT : Lorsque je débranche le servomoteur, le Bluetooth fonctionne correctement. J'avoue être un peu désemparé, je ne sais comment faire :/
Title: Re: Bluetooth Arduino
Post by: icare on Feb 23, 2015, 03:31 pm
Re,
Il faudrait que tu alimentes ton servo par une source de tension externe.
Title: Re: Bluetooth Arduino
Post by: zTont on Feb 23, 2015, 04:53 pm
Bonjour,
Merci pour ta réponse icare,
Je viens de le faire, je l'alimente par pile en 5V
Malheureusement, maintenant, le servomoteur ne suit plus mes instructions, n'en fait qu'à sa tête : j'ai beau vouloir le diriger vers 30*, 60*,...) il reste à 0°.

Je continu à chercher de mon côté.

Merci beaucoup !
Title: Re: Bluetooth Arduino
Post by: icare on Feb 23, 2015, 05:04 pm
Re,
As-tu relié les GND ?
Title: Re: Bluetooth Arduino
Post by: zTont on Feb 23, 2015, 11:59 pm
J'ai réussi finalement à le faire fonctionner, mais malheureusement, le servo à un dysfonctionnement et est très lent.
C'est dommage pour un servo tout neuf, même en le branchant directement à l'alimentation.
Pour l'instant, je le laisse dormir tranquillement, le pauvre a été beaucoup sollicité et a besoin d'un peu de sommeil, qui je l'espère, sera récupérateur. ^^


Bonne journée à tous, et je remercie humblement icare, tu m'as beaucoup aidé (notamment l'idée de l'alimenter de façon externe).

zTony
Title: Re: Bluetooth Arduino
Post by: icare on Feb 24, 2015, 10:28 am
Bonjour
Bonne journée à tous, et je remercie humblement icare, tu m'as beaucoup aidé (notamment l'idée de l'alimenter de façon externe).
De rien, le forum est là pour cela. ;)