Progetto 14 Controllo del Robot via Bluetooth

Descrizione
Abbiamo imparato le conoscenze di base del Bluetooth. In questa lezione, realizzeremo un’auto intelligente controllata da remoto via Bluetooth. Nell’esperimento, consideriamo il modulo Bluetooth HM-10 come Slave e il cellulare come Host.
keyes BT car è un’APP sviluppata dal team keyestudio. Puoi controllare facilmente l’auto robot con essa.
APP
APP Android
Scarica l’APP da qui.

Tocca l’icona Tank_Car per accedere all’APP Bluetooth. Come mostrato di seguito.

Dopo aver caricato il codice sulla scheda UNO R3, collega il modulo Bluetooth, il LED sul modulo Bluetooth lampeggerà. Quindi tocca l’opzione CONNECT sull’APP per cercare il Bluetooth.

Fai clic per connettere il Bluetooth. HMSoft connesso, il LED del Bluetooth si accenderà normalmente.

Tocca il pulsante
①, il pannello LED 8x16 visualizzerà l’icona anteriore. Rilascia il pulsante, visualizza “STOP”.Di seguito è riportata l’interfaccia dell’APP Bluetooth del Robot Tank e abbiamo elencato la funzione di ogni tasto:



APP iOS
Apri l’APP store

Fai clic per cercare keyestudio e vedrai keyes BT car.

Tocca per aprire keyes BT car
Per aprire il Bluetooth, fai clic su “Connect” nell’angolo in alto a sinistra, cerca e connetti il Bluetooth.

Tocca l’icona Tank_Car per accedere all’interfaccia di controllo.


Di seguito è riportata l’interfaccia dell’APP Bluetooth del Robot Tank e abbiamo elencato la funzione di ogni tasto:



Codice di Test
/*
keyestudio Mini Tank Robot V2.1
lezione 14.1
test bluetooth
http://www.keyestudio.com
*/
char ble_val; //variabile carattere, utilizzata per salvare il valore ricevuto dal Bluetooth
void setup()
{
Serial.begin(9600);
}
void loop()
{
if(Serial.available() > 0) //verifica se ci sono dati nell'area buffer
{ ble_val = Serial.read(); //leggi i dati dal buffer seriale
Serial.println(ble_val); //stampa
}
}//**************************************************************
Scollega il modulo Bluetooth, carica il codice di test, ricollega il modulo Bluetooth, apri il monitor seriale e imposta il baud rate a 9600. Punta verso il modulo Bluetooth e premi i tasti sull’APP, quindi il carattere corrispondente è mostrato di seguito.

Il carattere rilevato e la funzione corrispondente:


Diagramma di Collegamento

Attenzione al Cablaggio:
Pannello LED 8x16 |
Scheda di Espansione |
|
|---|---|---|
GND |
→ |
-(GND) |
VCC |
→ |
+(VCC) |
SDA |
→ |
SDA |
SCL |
→ |
SCL |
Inserisci il modulo Bluetooth verticalmente, non è necessario collegare i pin STATE e BRK |
Codice di Test
Nota: Rimuovi il modulo Bluetooth prima di caricare il codice di test. Altrimenti, il caricamento del codice di test avrà esito negativo.
/*
keyestudio Robot Car v2.0
lezione 14.2
auto bluetooth
http://www.keyestudio.com
*/
//Array, utilizzato per memorizzare i dati del modello, può essere calcolato da te o ottenuto dallo strumento modulo
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 //Imposta il pin di clock a A5
#define SDA_Pin A4 //Imposta il pin di dati a A4
#define ML_Ctrl 13 //definisci il pin di controllo della direzione del motore sinistro
#define ML_PWM 11 //definisci il pin di controllo PWM del motore sinistro
#define MR_Ctrl 12 //definisci il pin di controllo della direzione del motore destro
#define MR_PWM 3 //definisci il pin di controllo PWM del motore destro
char bluetooth_val; //salva il valore ricevuto dal Bluetooth
void setup(){
Serial.begin(9600);
pinMode(SCL_Pin,OUTPUT);
pinMode(SDA_Pin,OUTPUT);
matrix_display(clear); //Cancella il display
matrix_display(start01); //visualizza il modello di avvio
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': //comando avanti
Car_front();
matrix_display(front); //mostra il design di avanzamento
break;
case 'B': //comando indietro
Car_back();
matrix_display(back); //mostra il modello di retromarcia
break;
case 'L': //istruzione di svolta a sinistra
Car_left();
matrix_display(left); //mostra il segno di "svolta a sinistra"
break;
case 'R': //istruzione di svolta a destra
Car_right();
matrix_display(right); //visualizza il segno di svolta a destra
break;
case 'S': //comando di arresto
Car_Stop();
matrix_display(STOP01); //mostra l'immagine di arresto
break;
}
}
/**************La funzione della matrice di punti****************/
//questa funzione è utilizzata per il display della matrice di punti
void matrix_display(unsigned char matrix_value[])
{
IIC_start();
IIC_send(0xc0); //Scegli l'indirizzo
for(int i = 0;i < 16;i++) //i dati del modello hanno 16 bit
{
IIC_send(matrix_value[i]); //dati per trasmettere i modelli
}
IIC_end(); //termina la trasmissione del modello di dati
IIC_start();
IIC_send(0x8A); //controllo del display, imposta la larghezza dell'impulso a 4/16
IIC_end();
}
//La condizione per iniziare la trasmissione dei dati
void IIC_start()
{
digitalWrite(SCL_Pin,HIGH);
delayMicroseconds(3);
digitalWrite(SDA_Pin,HIGH);
delayMicroseconds(3);
digitalWrite(SDA_Pin,LOW);
delayMicroseconds(3);
}
//trasmetti dati
void IIC_send(unsigned char send_data)
{
for(char i = 0;i < 8;i++) //Ogni byte ha 8 bit
{
digitalWrite(SCL_Pin,LOW); //abbassa il pin di clock SCL_Pin per cambiare i segnali di SDA
delayMicroseconds(3);
if(send_data & 0x01) //imposta il livello alto e basso di SDA_Pin in base a 1 o 0 di ogni bit
{
digitalWrite(SDA_Pin,HIGH);
}
else
{
digitalWrite(SDA_Pin,LOW);
}
delayMicroseconds(3);
digitalWrite(SCL_Pin,HIGH); //alza il pin di clock SCL_Pin per interrompere la trasmissione dei dati
delayMicroseconds(3);
send_data = send_data >> 1; //Rileva bit per bit, quindi sposta i dati a destra di uno
}
}
//Il segno che la trasmissione dei dati è terminata
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 funzione per far funzionare il motore**************/
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);
}
//****************************************************************
Risultato del Test
Carica il codice con successo, l’interruttore DIP è posizionato all’estremità destra e accendi l’alimentazione. Dopo aver connesso il Bluetooth, puoi guidare l’auto intelligente tramite l’App Bluetooth.
Premi
, il robot tank va avanti;
fai clic su
, l’auto intelligente va indietro;
premi il pulsante
, il robot tank gira a sinistra; fai clic su
, il robot gira a destra;
tieni premuto
, si ferma.
Fai clic su
per abilitare il controllo gravitazionale, tocca di nuovo
, termina il controllo gravitazionale. Allo stesso tempo, il pannello LED 8X16 sul robot car visualizza il modello corrispondente.