Projet 14 Contrôle du Robot par Bluetooth

Description
Nous avons appris les connaissances de base sur le Bluetooth. Dans cette leçon, nous allons créer une voiture intelligente télécommandée par Bluetooth. Dans l’expérience, nous considérons par défaut le module Bluetooth HM-10 comme Esclave et le téléphone portable comme Maître.
keyes BT car est une application développée par l’équipe keyestudio. Vous pouvez contrôler facilement la voiture robot avec celle-ci.
APPLICATION
Application Android
Veuillez télécharger l’application ici.

Appuyez sur l’icône Tank_Car pour accéder à l’application Bluetooth. Comme indiqué ci-dessous.

Après avoir téléchargé le code sur la carte UNO R3, connectez le module Bluetooth, la LED du module Bluetooth clignotera. Ensuite, appuyez sur l’option CONNECT dans l’application pour rechercher le Bluetooth.

Cliquez pour connecter le Bluetooth. HMSoft connecté, la LED Bluetooth s’allumera normalement.

Appuyez sur le bouton
①, le panneau LED 8x16 affichera l’icône avant. Relâchez le bouton, affichage « STOP ».Ci-dessous se trouve l’interface de l’application Bluetooth du robot Tank et nous avons listé la fonction de chaque touche :



Application iOS
Ouvrez l’App Store

Cliquez pour rechercher keyestudio, et vous verrez keyes BT car.

Appuyez pour ouvrir keyes BT car
Pour ouvrir le Bluetooth, cliquez sur « Connect » dans le coin supérieur gauche, recherchez et connectez le Bluetooth.

Appuyez sur l’icône Tank_Car pour accéder à l’interface de contrôle.


Ci-dessous se trouve l’interface de l’application Bluetooth du robot Tank et nous avons listé la fonction de chaque touche :



Code de Test
/*
keyestudio Mini Tank Robot V2.1
lesson 14.1
test bluetooth
http://www.keyestudio.com
*/
char ble_val; //variable de caractère, utilisée pour enregistrer la valeur reçue par Bluetooth
void setup()
{
Serial.begin(9600);
}
void loop()
{
if(Serial.available() > 0) //vérifier s'il y a des données dans la zone tampon
{ ble_val = Serial.read(); //lire les données du tampon série
Serial.println(ble_val); //afficher
}
}//**************************************************************
Retirez le module Bluetooth, téléchargez le code de test, reconnectez le module Bluetooth, ouvrez le moniteur série et réglez la vitesse de transmission à 9600. Pointez vers le module Bluetooth et appuyez sur les touches de l’application, le caractère correspondant s’affiche comme ci-dessous.

Le caractère détecté et la fonction correspondante :


Schéma de Connexion

Attention au Câblage :
Panneau LED 8x16 |
Carte d’Extension |
|
|---|---|---|
GND |
→ |
-(GND) |
VCC |
→ |
+(VCC) |
SDA |
→ |
SDA |
SCL |
→ |
SCL |
Insérez le module Bluetooth verticalement, vous n’avez pas besoin de connecter ses broches STATE et BRK |
Code de Test
Remarque : Retirez le module Bluetooth avant de télécharger le code de test. Sinon, le téléchargement du code de test échouera.
/*
keyestudio Robot Car v2.0
lesson 14.2
voiture bluetooth
http://www.keyestudio.com
*/
//Tableau, utilisé pour stocker les données du motif, peut être calculé par vous-même ou obtenu à partir de l'outil de modulus
unsigned char start01[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
unsigned char front[] = {0x00,0x00,0x00,0x00,0x00,0x24,0x12,0x09,0x12,0x24,0x00,0x00,0x00,0x00,0x00,0x00};
unsigned char back[] = {0x00,0x00,0x00,0x00,0x00,0x24,0x48,0x90,0x48,0x24,0x00,0x00,0x00,0x00,0x00,0x00};
unsigned char left[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x28,0x10,0x44,0x28,0x10,0x44,0x28,0x10,0x00};
unsigned char right[] = {0x00,0x10,0x28,0x44,0x10,0x28,0x44,0x10,0x28,0x44,0x00,0x00,0x00,0x00,0x00,0x00};
unsigned char STOP01[] = {0x2E,0x2A,0x3A,0x00,0x02,0x3E,0x02,0x00,0x3E,0x22,0x3E,0x00,0x3E,0x0A,0x0E,0x00};
unsigned char clear[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
#define SCL_Pin A5 //Définir la broche d'horloge à A5
#define SDA_Pin A4 //Définir la broche de données à A4
#define ML_Ctrl 13 //définir la broche de contrôle de direction du moteur gauche
#define ML_PWM 11 //définir la broche de contrôle PWM du moteur gauche
#define MR_Ctrl 12 //définir la broche de contrôle de direction du moteur droit
#define MR_PWM 3 //définir la broche de contrôle PWM du moteur droit
char bluetooth_val; //enregistrer la valeur reçue par Bluetooth
void setup(){
Serial.begin(9600);
pinMode(SCL_Pin,OUTPUT);
pinMode(SDA_Pin,OUTPUT);
matrix_display(clear); //Effacer l'affichage
matrix_display(start01); //afficher le motif de démarrage
pinMode(ML_Ctrl, OUTPUT);
pinMode(ML_PWM, OUTPUT);
pinMode(MR_Ctrl, OUTPUT);
pinMode(MR_PWM, OUTPUT);
}
void loop(){
if (Serial.available())
{
bluetooth_val = Serial.read();
Serial.println(bluetooth_val);
}
switch (bluetooth_val)
{
case 'F': //commande d'avance
Car_front();
matrix_display(front); //afficher le motif d'avance
break;
case 'B': //commande de recul
Car_back();
matrix_display(back); //afficher le motif de recul
break;
case 'L': //commande de virage à gauche
Car_left();
matrix_display(left); //afficher le signe de virage à gauche
break;
case 'R': //commande de virage à droite
Car_right();
matrix_display(right); //afficher le signe de virage à droite
break;
case 'S': //commande d'arrêt
Car_Stop();
matrix_display(STOP01); //afficher l'image d'arrêt
break;
}
}
/**************Fonction du panneau de points**************/
//cette fonction est utilisée pour l'affichage du panneau de points
void matrix_display(unsigned char matrix_value[])
{
IIC_start();
IIC_send(0xc0); //Choisir l'adresse
for(int i = 0;i < 16;i++) //les données du motif ont 16 bits
{
IIC_send(matrix_value[i]); //données pour transmettre les motifs
}
IIC_end(); //terminer la transmission du motif de données
IIC_start();
IIC_send(0x8A); //contrôle d'affichage, définir la largeur d'impulsion à 4/16
IIC_end();
}
//La condition pour commencer la transmission de données
void IIC_start()
{
digitalWrite(SCL_Pin,HIGH);
delayMicroseconds(3);
digitalWrite(SDA_Pin,HIGH);
delayMicroseconds(3);
digitalWrite(SDA_Pin,LOW);
delayMicroseconds(3);
}
//transmettre les données
void IIC_send(unsigned char send_data)
{
for(char i = 0;i < 8;i++) //Chaque octet a 8 bits
{
digitalWrite(SCL_Pin,LOW); //abaisser la broche d'horloge SCL_Pin pour modifier les signaux de SDA
delayMicroseconds(3);
if(send_data & 0x01) //définir le niveau haut et bas de SDA_Pin selon le 1 ou 0 de chaque bit
{
digitalWrite(SDA_Pin,HIGH);
}
else
{
digitalWrite(SDA_Pin,LOW);
}
delayMicroseconds(3);
digitalWrite(SCL_Pin,HIGH); //relever la broche d'horloge SCL_Pin pour arrêter la transmission de données
delayMicroseconds(3);
send_data = send_data >> 1; //Détecter bit par bit, donc décaler les données vers la droite d'un
}
}
//Le signe que la transmission de données est terminée
void IIC_end()
{
digitalWrite(SCL_Pin,LOW);
delayMicroseconds(3);
digitalWrite(SDA_Pin,LOW);
delayMicroseconds(3);
digitalWrite(SCL_Pin,HIGH);
delayMicroseconds(3);
digitalWrite(SDA_Pin,HIGH);
delayMicroseconds(3);
}
/*************la fonction pour faire fonctionner le moteur**************/
void Car_front()
{
digitalWrite(MR_Ctrl,LOW);
analogWrite(MR_PWM,200);
digitalWrite(ML_Ctrl,LOW);
analogWrite(ML_PWM,200);
}
void Car_back()
{
digitalWrite(MR_Ctrl,HIGH);
analogWrite(MR_PWM,200);
digitalWrite(ML_Ctrl,HIGH);
analogWrite(ML_PWM,200);
}
void Car_left()
{
digitalWrite(MR_Ctrl,LOW);
analogWrite(MR_PWM,255);
digitalWrite(ML_Ctrl,HIGH);
analogWrite(ML_PWM,255);
}
void Car_right()
{
digitalWrite(MR_Ctrl,HIGH);
analogWrite(MR_PWM,255);
digitalWrite(ML_Ctrl,LOW);
analogWrite(ML_PWM,255);
}
void Car_Stop()
{
digitalWrite(MR_Ctrl,LOW);
analogWrite(MR_PWM,0);
digitalWrite(ML_Ctrl,LOW);
analogWrite(ML_PWM,0);
}
void Car_T_left()
{
digitalWrite(MR_Ctrl,LOW);
analogWrite(MR_PWM,255);
digitalWrite(ML_Ctrl,LOW);
analogWrite(ML_PWM,180);
}
void Car_T_right()
{
digitalWrite(MR_Ctrl,LOW);
analogWrite(MR_PWM,180);
digitalWrite(ML_Ctrl,LOW);
analogWrite(ML_PWM,255);
}
//****************************************************************
Résultat du Test
Après avoir téléchargé le code avec succès, réglez le commutateur DIP à l’extrémité droite et mettez sous tension. Après la connexion Bluetooth, vous pouvez contrôler la voiture intelligente pour se déplacer via l’application Bluetooth.
Appuyez sur
, le robot tank avance ;
cliquez sur
, la voiture intelligente recule ;
appuyez sur le bouton
, le robot tank tourne à gauche ; cliquez sur
, le robot tourne à droite ;
maintenez
, il s’arrête.
Cliquez sur
pour activer le contrôle gravitationnel, appuyez sur
à nouveau pour désactiver le contrôle gravitationnel. En même temps, le panneau LED 8X16 sur la voiture robot affiche le motif correspondant.