Bluetooth-integratie met Arduino & Android: Draadloze projecten bouwen
Onderdelen en benodigdheden
- Arduino UNO – 1 stuk
- HC-06 Bluetooth-module – 1 stuk
- LED (standaard) – 1 stuk
Apps en online diensten
- Arduino IDE
- MIT App Inventor 2
Over dit project
Een uitstekend draadloos lokaal (en persoonlijk) netwerk is ongetwijfeld Bluetooth (BT). Vandaag de dag is het alledaags om telefoons, stereo's, camera's, enz. met elkaar te verbinden via de beroemde "blauwe lampje".
In de wereld van IoT en automatisering is het veelvoorkomend om afstandsbedieningen via mobiele telefoons te gebruiken met BT-technologie. Dit is te danken aan twee basiscomponenten die cruciaal zijn:
- Eenvoudige ontwikkelplatforms voor ANDROID-apps (zoals MIT App Inventor 2)
- Betaalbare BT-modules (zoals de HC-06)
In deze tutorial ontwikkel ik ideeën over het besturen van Arduino-uitgangen via een mobiel apparaat om bijvoorbeeld een robot te bewegen, lampen in een huis aan te zetten, etc.
Stap 1: De Bluetooth-module en de Arduino
Op de markt zijn veelvoorkomend "Master-Slave" BT 3.0-modules als de HC-05 en "Slave"-modules als de HC-06. Recent zijn de HC-08 en HC-10 verschenen die werken met BT 4.0 of BLE (Bluetooth Low Energy). BLE-modules zijn de enigen die verbonden kunnen worden met een iPhone, omdat Apple geen ondersteuning biedt voor BT 3.0.
Voor de projecten hier gebruik ik een HC-06 die erg populair en goedkoop is (Doei, iPhone! Androids heersen hier!). De BT-module werkt op 5V, wat eenvoudige verbinding met een Arduino UNO mogelijk maakt. De transmit (Tx) en receive (Rx) pinnen kunnen direct aan de UNO worden aangesloten, zonder spanningsdelers zoals bij de ESP8266. Normaal wordt de HC-06 aangesloten op pinnen 0 en 1 van de Arduino ("Serial 0"):
- HC06-Tx naar Arduino pin 0 (Rx)
- HC06-Rx naar Arduino pin 1 (Tx)
Bij het gebruik van "Serial 0" ingangen (de enige hardware seriële poort op de UNO) is het belangrijk te onthouden dat de HC-06 fysiek niet verbonden mag zijn met pinnen 0 en 1 tijdens het laden van het programma, omdat de USB-poort dezelfde seriële poort gebruikt. Een eenvoudige oplossing (als je project niet veel GPIO's van de UNO gebruikt) is een "software seriële poort" via de SoftwareSerial bibliotheek. Hier gebruiken we pinnen 10 en 11 van de UNO (Tx, Rx respectievelijk).
Stap 2: Testen en configureren van de HC-06
De volgende stap is het schrijven van een eenvoudige code om de HC-06 te testen, programmeren en initialiseren. We beginnen met het includeren van de SoftwareSerial bibliotheek en het instellen van de variabele "BT" naar de nieuwe seriële poort.
#include <SoftwareSerial.h>
SoftwareSerial BT(10, 11); // RX, TX
String command = ""; // Slaat reactie van bluetooth apparaat op
void setup() {
Serial.begin(9600);
Serial.println("Type AT commands");
BT.begin(9600); // HC-06 standaard baudrate
}
Daarna volgt de hoofdcode die wacht op data van de BT. Bij ontvangst worden de data naar de Serial Monitor geschreven. AT-commando's kunnen van de Serial Monitor naar de HC-06 worden gestuurd.
void loop() {
if (BT.available()) {
while (BT.available()) {
delay(10); // Delay voor stabiliteit
char c = BT.read();
command += c; // Bouw de string op
}
Serial.println(command);
command = ""; // Geen herhalingen
}
if (Serial.available()) {
delay(10);
BT.write(Serial.read());
}
}
Na het laden van het programma kun je via de Serial Monitor basis-tests uitvoeren:
- Stuur "AT" – de module moet "OK" antwoorden.
- Vraag firmwareversie: "AT+VERSION" – bijvoorbeeld "linvorV1.8".
- Definieer een modulenaam: "AT+NAMENaam" – de HC-06 antwoordt "OKsetname" (je kunt de ingestelde naam niet opvragen).
Standaard heeft de HC-06 wachtcode (PIN): 1234. Je kunt een nieuwe instellen met:
AT+PINxxxxwaar 'xxxx' 4 cijfers zijn.
Stap 3: Het Android-apparaat
De module is aangesloten en draait. Nu het Android-apparaat. Er zijn veel apps in de Google Play Store. Ik gebruik een app die ik zelf ontwikkelde met MIT App Inventor 2: MJRoBot BT Digital Analog Voice Control (gratis beschikbaar).
De app stuurt digitale commando's (via knoppen of stem) en analoge commando's voor PWM-apparaten zoals servos (waarden 0-255).
- Download de app
- Ga in Android-instellingen naar Bluetooth, zoek de module en koppel (PIN 1234 of je eigen PIN). Dit hoeft maar één keer.
- Start de app. De tweede keer koppelt automatisch.
- Selecteer de modulenaam (bij mij die met HC-06 erin).
De app toont "CONNECTED". Test de knoppen en kijk in de Serial Monitor welke data wordt gestuurd. Bijvoorbeeld voor 4 apparaten:
dev1on dev1off dev2on dev2off dev3on dev3off dev4on dev4off
Nu we een Android-app hebben die praat met de BT-module, laten we iets nuttigs bouwen!
Stap 4: Arduino-uitgangen besturen
Bouw de schakeling zoals getoond. Het idee: de app zet LEDs aan/uit en regelt hun intensiteit.
Aansluitingen:
- Apparaat 1: "dev1on / dev1off" → Rode LED → Pin 3 UNO
- Apparaat 2: "dev2on / dev2off" → Gele LED → Pin 5 UNO
- Apparaat 3: "dev3on / dev3off" → Groene LED → Pin 6 UNO
- Apparaat 4: "dev4on / dev4off" → Blauwe LED → Pin 9 UNO
Deze 4 pinnen ondersteunen PWM (merk de "~" op de UNO). Belangrijk voor de "sliders" in de app die numerieke data (0-255) sturen voor PWM-intensiteit:
- Dev A0: "r / 0-255" → Rode LED → Pin 3
- Dev A1: "y / 0-255" → Gele LED → Pin 5
- Dev A2: "g / 0-255" → Groene LED → Pin 6
- Dev A3: "b / 0-255" → Blauwe LED → Pin 9
Bij sliders wordt eerst een karakters gestuurd om aan te geven dat een slider-commando volgt, gevolgd door de PWM-waarde.
Stap 5: IoT-apparaten besturen met stemcommando's
Stembesturing is een trend in IoT. Met Arduino / HC-06 / Android is dit extreem simpel. Android heeft dit standaard. In mijn app is een knop toegevoegd die Android laat "luisteren" en het commando in tekstformaat naar de Arduino stuurt. De code leest de binnenkomende string.
Voorbeeld: bij "Connect TV" gaat de groene LED (apparaat 3) aan (in plaats van LED zou een relais de TV kunnen schakelen).
Pas de strings in de loop() aan naar jouw taal. Ik gebruikte Portugees (mijn moedertaal) vanwege accentverschillen met mijn Engels. Gebruik korte zinnen of woorden. Belangrijk is een perfecte match tussen wat je programmeert en wat Google Spraakherkenning retourneert.
Het .aia bestand voor MIT App Inventor 2 is beschikbaar.
Stap 6: Conclusie
Met deze tutorial heb je inzicht in het enorme potentieel van het besturen van "dingen" met BT / Android / Arduino. Ik hoop dat dit project anderen helpt in de spannende wereld van electronica, robotica en IoT! Meer projecten op mijn blog: MJRoBot.org
Groeten uit het zuiden van de wereld!
Tot de volgende tutorial!
Marcelo
Code
Code snippet #1 – Test & AT-commando's
#include <SoftwareSerial.h>
SoftwareSerial BT(10, 11); // RX, TX
String command = "";
void setup() {
Serial.begin(9600);
Serial.println("Type AT commands");
BT.begin(9600);
}
void loop() {
if (BT.available()) {
while (BT.available()) {
delay(10);
char c = BT.read();
command += c;
}
Serial.println(command);
command = "";
}
if (Serial.available()) {
delay(10);
BT.write(Serial.read());
}
}
Code snippet #2 – Voorbeeld output app
dev1on dev1off dev2on dev2off dev3on dev3off dev4on dev4off
Productieproces
- Bouw een Bluetooth-gecontroleerde Raspberry Pi Robot met Audio Feedback
- Atmel AT89-serie moeiteloos programmeren met Arduino Uno – Stapsgewijze handleiding
- Universele Android-afstandsbediening bouwen met Arduino, 1Sheeld en IR-besturing
- Bouw een Android-bestuurd extern voertuig met Raspberry Pi Motor Shield
- Een LED bedienen via Bluetooth met Arduino – Eenvoudige DIY Handleiding
- Spraakgestuurde huishoudapparaten: Bluetooth-besturing met Google Assistant
- Arduino UNO & WiFi Shield: Realtime Temperatuurweergave op het Web via Serieel
- Bewegingsgeactiveerd verlichtingssysteem met Intel Curie (Arduino 101)
- Bestuur Arduino LED Knipperen vanaf iOS & Android App via WiFi/Ethernet
- Afstandsbediening van een Lamp met Arduino Uno, Relais en Android App
- Arduino robotarm besturen via speciale Android-app