Projekt 14 Bluetooth-Steuerung Roboter

Beschreibung

Wir haben die grundlegenden Kenntnisse über Bluetooth erworben. In dieser Lektion werden wir ein Bluetooth-Fernbedienungs-Smartcar herstellen. Im Experiment gehen wir davon aus, dass das HM-10 Bluetooth-Modul als Slave und das Mobiltelefon als Host fungiert.

keyes BT car ist eine APP, die vom keyestudio-Team entwickelt wurde. Sie können den Roboter damit problemlos steuern.

APP

  • Android APP

    • Bitte laden Sie die APP hier herunter.

    • Tippen Sie auf das Tank_Car-Symbol, um die Bluetooth-APP zu öffnen. Wie unten gezeigt.

    • Nach dem Hochladen des Codes auf das UNO R3-Board verbinden Sie das Bluetooth-Modul. Die LED am Bluetooth-Modul blinkt. Tippen Sie dann auf die Option CONNECT in der APP, um nach Bluetooth zu suchen.

    • Klicken Sie, um das Bluetooth zu verbinden. HMSoft verbunden, die Bluetooth-LED leuchtet normal.

    • Tippen Sie auf die Schaltfläche①, das 8x16 LED-Panel zeigt das Vorne-Symbol an. Lassen Sie die Schaltfläche los, wird „STOP“ angezeigt.

    • Unten ist die Tank Robot Bluetooth APP-Oberfläche und wir haben aufgelistet, welche Funktion jede Taste hat:

  • iOS APP

    • Öffnen Sie den APP Store

    • Klicken Sie, um keyestudio zu suchen, und Sie werden keyes BT car sehen.

    • Tippen Sie, um keyes BT car zu öffnen

    • Um Bluetooth zu öffnen, klicken Sie auf „Connect“ in der oberen linken Ecke und suchen und verbinden Sie Bluetooth.

    • Tippen Sie auf das Tank_Car-Symbol, um die Steueroberfläche zu öffnen.

    • Unten ist die Tank Robot Bluetooth APP-Oberfläche und wir haben aufgelistet, welche Funktion jede Taste hat:

Test-Code

/*
 keyestudio Mini Tank Robot V2.1
 Lektion 14.1
 Bluetooth-Test
 http://www.keyestudio.com
*/
char ble_val; // Zeichenvariable, wird verwendet, um den Wert des Bluetooth-Empfangs zu speichern
void setup() 
{
  Serial.begin(9600);
}

void loop() 
{
  if(Serial.available() > 0)  // Überprüfen Sie, ob sich Daten im Pufferspeicher befinden
  { ble_val = Serial.read();  // Lesen Sie die Daten aus dem seriellen Puffer
    Serial.println(ble_val);  // Geben Sie aus
  }
}//**************************************************************

Entfernen Sie das Bluetooth-Modul, laden Sie den Test-Code hoch, verbinden Sie das Bluetooth-Modul erneut, öffnen Sie den seriellen Monitor und stellen Sie die Baudrate auf 9600 ein. Richten Sie das Bluetooth-Modul aus und drücken Sie die Tasten auf der APP. Das entsprechende Zeichen wird wie folgt angezeigt.

Das erkannte Zeichen und die entsprechende Funktion:

Schaltplan

Verdrahtungshinweise:

8x16 LED-Panel

Erweiterungsboard

GND

-(GND)

VCC

+(VCC)

SDA

SDA

SCL

SCL

Setzen Sie das Bluetooth-Modul senkrecht ein. Sie müssen seine STATE- und BRK-Pins nicht anschließen

Test-Code

Hinweis: Entfernen Sie das Bluetooth-Modul vor dem Hochladen des Test-Codes. Andernfalls können Sie den Test-Code nicht hochladen.

/*
 keyestudio Robot Car v2.0
 Lektion 14.2
 Bluetooth-Auto
 http://www.keyestudio.com
*/

// Array, wird verwendet, um die Daten des Musters zu speichern. Sie können diese selbst berechnen oder mit dem Modulus-Tool abrufen
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  // Setzen Sie den Taktpin auf A5
#define SDA_Pin  A4  // Setzen Sie den Datenpin auf A4

#define ML_Ctrl 13  // Definieren Sie den Richtungssteuerpin des linken Motors
#define ML_PWM 11   // Definieren Sie den PWM-Steuerpin des linken Motors
#define MR_Ctrl 12  // Definieren Sie den Richtungssteuerpin des rechten Motors
#define MR_PWM 3    // Definieren Sie den PWM-Steuerpin des rechten Motors

char bluetooth_val; // Speichern Sie den Wert des Bluetooth-Empfangs

void setup(){
  Serial.begin(9600);
  
  pinMode(SCL_Pin,OUTPUT);
  pinMode(SDA_Pin,OUTPUT);
  matrix_display(clear);    // Löschen Sie die Anzeige
  matrix_display(start01);  // Zeigen Sie das Startmuster an

  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':  // Vorwärtsbefehl
        Car_front();
        matrix_display(front);  // Zeigen Sie das Vorwärtsmuster an
        break;
     case 'B':  // Rückwärtsbefehl
        Car_back();
        matrix_display(back);  // Zeigen Sie das Rückwärtsmuster an
        break;
     case 'L':  // Linksabbiegebefehl
        Car_left();
        matrix_display(left);  // Zeigen Sie das Linksabbiegesymbol an
        break;
     case 'R':  // Rechtsabbiegebefehl
        Car_right();
        matrix_display(right);  // Zeigen Sie das Rechtsabbiegesymbol an
       break;
     case 'S':  // Stoppbefehl
        Car_Stop();
        matrix_display(STOP01);  // Zeigen Sie das Stoppbild an
        break;
  }
}

/**************Die Funktion der Punktmatrix-Anzeige****************/
// Diese Funktion wird für die Punktmatrix-Anzeige verwendet
void matrix_display(unsigned char matrix_value[])
{
  IIC_start();
  IIC_send(0xc0);  // Wählen Sie die Adresse
  
  for(int i = 0;i < 16;i++) // Das Mustermuster hat 16 Bits
  {
     IIC_send(matrix_value[i]); // Daten zum Übertragen von Mustern
  }
  IIC_end();   // Beenden Sie die Übertragung des Datenmusters
  
  IIC_start();
  IIC_send(0x8A);  // Anzeigesteuerung, stellen Sie die Pulsbreite auf 4/16 ein
  IIC_end();
}
// Die Bedingung zum Starten der Datenübertragung
void IIC_start()
{
  digitalWrite(SCL_Pin,HIGH);
  delayMicroseconds(3);
  digitalWrite(SDA_Pin,HIGH);
  delayMicroseconds(3);
  digitalWrite(SDA_Pin,LOW);
  delayMicroseconds(3);
}
// Datenübertragung
void IIC_send(unsigned char send_data)
{
  for(char i = 0;i < 8;i++)  // Jedes Byte hat 8 Bits
  {
      digitalWrite(SCL_Pin,LOW);  // Ziehen Sie den Taktpin SCL_Pin herunter, um die Signale von SDA zu ändern
delayMicroseconds(3);
      if(send_data & 0x01)  // Stellen Sie den hohen und niedrigen Pegel von SDA_Pin gemäß 1 oder 0 jedes Bits ein
      {
        digitalWrite(SDA_Pin,HIGH);
      }
      else
      {
        digitalWrite(SDA_Pin,LOW);
      }
      delayMicroseconds(3);
      digitalWrite(SCL_Pin,HIGH); // Ziehen Sie den Taktpin SCL_Pin hoch, um die Datenübertragung zu stoppen
      delayMicroseconds(3);
      send_data = send_data >> 1;  // Erkennen Sie Bit für Bit, verschieben Sie also die Daten um eins nach rechts
  }
}
// Das Zeichen, das die Datenübertragung beendet
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);
}
/*************Die Funktion zum Ausführen des Motors**************/
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);
}
  //****************************************************************

Test-Ergebnis

Code erfolgreich hochgeladen, DIP-Schalter nach rechts gestellt und eingeschaltet. Nach der Bluetooth-Verbindung können wir das Smartcar mit der Bluetooth-App steuern.

Drücken Sie, der Tank-Roboter fährt vorwärts;

Klicken Sie, das Smartcar fährt rückwärts;

Drücken Sie-Schaltfläche, der Tank-Roboter dreht sich nach links; Klicken Sie, der Roboter dreht sich nach rechts;

Halten Sie, es stoppt.

Klicken Sie, um die Gravitationssteuerung zu aktivieren. Tippen Sieerneut an, um die Gravitationssteuerung zu beenden. Gleichzeitig zeigt das 8x16 LED-Panel auf dem Roboter das entsprechende Muster an.