zurück zur Übersicht...
13.03.2018

Arduino und Bluetooth

Bluetooth ist ein Industriestandard gemäß IEEE 802.15.1 für die Datenübertragung zwischen Geräten über kurze Distanz per Funktechnik (WPAN). Dabei sind verbindungslose sowie verbindungsbehaftete Übertragungen von Punkt zu Punkt und Ad-hoc- oder Piconetze möglich (ISM-Band zwischen 2,402 GHz und 2,480 GHz). Die Reichweite beträgt je nach Leistung und Klasse zwischen 1-100m, meist jedoch um die 10m.
(Weitere Details siehe: Wikipedia - Bluetooth

HC-05 Bluetooth Tranceiver-Modul
Abb.: HC-05 Bluetooth Tranceiver-Modul

Mit dem Bluetooth-Modul HC-05 ist eine drahtlose Kommunikation zwischen einem Arduino und z.B. einem Smartphone oder Laptop möglich. Es können Daten zum Mikrocontroller gesendet aber auch vom Mikrokontroller empfangen werden (Slave und Master).
Zur Bluetooth-Steuerung wurde hier ein Android-Smartphone mit der App BlueTerm bzw. Serial Bluetooth Terminal verwendet. Nach der Installation und Öffnen der App lässt man einen Scan über alle empfangsbereiten Bluetooth-Geräte in der Umgebung laufen. Dann verbindet man sich mit dem HC-05 (Passwort: 1234) und kann dann Befehle übertragen.

Technische Daten des HC-05

Anschlüsse

HC-05 Arduino
GND GND
VCC 3,3V - 6V
RX (nur 3,3V!) TX
TX RX

Vorsicht: der RX-Pin am Bluetooth-Modul darf nur mit 3,3V betrieben werden!
Ein Spannungsteiler muss daher die 5V des Arduino-Pins TX verringern.

Ex. 1: Pairing des Bluetooth-Moduls und Steuerung einer LED

Verwendete Bauteile

Aufbau der Schaltung

Aufbau der Schaltung

Sketch

Achtung! Beim Hochladen auf den Mikrocontroller muss das Bluetooth-Modul herausgenommen werden, sonst erscheint eine Fehlermeldung, dass der Code nicht hochgeladen werden kann. Dannach kann man das Modul wieder einsetzen.
Zur Steuerung via Bluetooth habe ich die Android-App BlueTerm bzw. Serial Bluetooth Terminal verwendet.

#define PIN_LED 7

char blueToothValue;
byte ledStatus = 0;

void setup()
{
    Serial.begin(9600);
    pinMode(PIN_LED, OUTPUT);
}

void loop()
{
    if(Serial.available()) {
        blueToothValue = Serial.read();
    }

    switch(blueToothValue) {
        case '1':
            if(ledStatus == 0) {
                digitalWrite(PIN_LED, HIGH);
                Serial.println("LED is on");
                ledStatus = 1;
            }
            break;
        case '0':
            if(ledStatus == 1) {
                digitalWrite(PIN_LED, LOW);
                Serial.println("LED is off");
                ledStatus = 0;
            }
        break;
    }
}

Ex. II: Steuerung mehrerer Komponenten mit einer RC-App

Verwendete Bauteile

Sketch

Achtung! Beim Hochladen auf den Mikrocontroller muss das Bluetooth-Modul herausgenommen werden, sonst erscheint eine Fehlermeldung, dass der Code nicht hochgeladen werden kann. Dannach kann man das Modul wieder einsetzen.
Zur Steuerung via Bluetooth habe ich die Android-App Arduino Bluetooth RC Car verwendet.

#include <Servo.h>

#define PIN_LED_RED   13
#define PIN_LED_GREEN 12
#define PIN_RELAY     8
#define PIN_SERVO     9

#define BLINK_DELAY 300

char blueToothValue;
byte ledStatus = 0;
bool emergencyBlink = false;
unsigned int lastBlinkAction = 0;
Servo servoMotor;

void setup()
{
    Serial.begin(9600);
    pinMode(PIN_LED_RED, OUTPUT);
    pinMode(PIN_LED_GREEN, OUTPUT);
    pinMode(PIN_RELAY, OUTPUT);
    servoMotor.attach(PIN_SERVO);
}

void loop()
{
  if (emergencyBlink == true) {
    if (millis() - lastBlinkAction >= BLINK_DELAY) {
        lastBlinkAction += BLINK_DELAY;
        ledStatus++;
        ledStatus%=2;
    }
    digitalWrite(PIN_LED_RED, ledStatus);
    digitalWrite(PIN_LED_GREEN, ledStatus);
  }

  if(Serial.available()) {
    blueToothValue = Serial.read();

    switch(blueToothValue)
    {
        case 'X':
          emergencyBlink = true;
          Serial.println("Emergency on");
          break;
        case 'x':
          emergencyBlink = false;
          ledStatus = 0;
          digitalWrite(PIN_LED_RED, LOW);
          digitalWrite(PIN_LED_GREEN, LOW);
          Serial.println("Emergency off");
          break;

        case 'W':
          Serial.println("Frontlight on");
          digitalWrite(PIN_LED_GREEN, HIGH);
          break;
        case 'w':
          Serial.println("Frontlight off");
          digitalWrite(PIN_LED_GREEN, LOW);
          break;

        case 'U':
          Serial.println("Backlight on");
          digitalWrite(PIN_LED_RED, HIGH);
          break;
        case 'u':
          Serial.println("Backlight off");
          digitalWrite(PIN_LED_RED, LOW);
          break;

        case 'F':
          Serial.println("Motor on");
          digitalWrite(PIN_RELAY, HIGH);
          break;
        case 'B':
          Serial.println("Motor off");
          digitalWrite(PIN_RELAY, LOW);
          break;

        case 'L':
          Serial.println("Left");
          servoMotor.write(45);
          break;
        case 'R':
          Serial.println("Right");
          servoMotor.write(135);
          break;

        case 'S':
          break;
        default:
          Serial.println("unknown: " + String(blueToothValue));
          break;
    }
  }
}