Je Arduino-robotauto draadloos besturen met HC-05 Bluetooth, NRF24L01 en HC-12 transceiver-modules
In deze tutorial leren we hoe we de Arduino-robotauto die we in de vorige video maakten, draadloos besturen. Ik laat je drie verschillende methoden van draadloze besturing zien: met de HC-05 Bluetooth-module, de NRF24L01-transceivermodule en de HC-12 lange-afstand draadloze module, alsook met een smartphone en een zelfgemaakte Android-applicatie. Je kunt de volgende video bekijken of de geschreven tutorial hieronder lezen voor meer details.
Ik heb al tutorials over hoe je elk van deze modules met het Arduino-board kunt verbinden en gebruiken, dus als je meer details nodig hebt, kun je die altijd raadplegen. De links naar elk van hen vind je beneden in het artikel.
Arduino-robotauto besturen met HC-05 Bluetooth-module
We beginnen met de Bluetooth-communicatie, en daarvoor hebben we twee HC-05 Bluetooth-modules nodig die geconfigureerd moeten worden als master- en slave-apparaten.
We kunnen dat eenvoudig doen met AT-commando's, en ik stelde de joystick in als master en de Arduino-robotauto als slave. Hier is het complete schakelschema voor dit voorbeeld:
Je kunt de benodigde componenten voor dit voorbeeld via de onderstaande links verkrijgen:
- HC-05 Bluetooth-module
- Joystick-module
- 18650 Accu's
- 18650 Accu-lader
- L298N Driver
- 12V Hoge koppel DC-motor
- Arduino-board
Broncode
We zullen dezelfde code gebruiken als in de vorige tutorial, waar we de Arduino-robotauto direct met de joystick besturen, en we zullen er enkele wijzigingen in aanbrengen.
HC-05 Master-code:
/* Arduino Robot Auto Draadloze Besturing met HC-05 Bluetooth == MASTER APPARAAT - Joystick ==
by Dejan Nedelkovski, www.HowToMechatronics.com
*/
int xAxis, yAxis;
void setup() {
Serial.begin(38400); // Standaard communicatiesnelheid van de Bluetooth-module
}
void loop() {
xAxis = analogRead(A0); // Lees joystick X-as
yAxis = analogRead(A1); // Lees joystick Y-as
// Stuur de waarden via de seriële poort naar de slave HC-05 Bluetooth-apparaat
Serial.write(xAxis/4); // Delen door 4 voor omrekening van 0-1023 naar 0-256 (1 byte bereik)
Serial.write(yAxis/4);
delay(20);
}
De code bij het master-apparaat, of de joystick, is vrij simpel. We hoeven alleen de X- en Y-waarden van de joystick te lezen, die eigenlijk de snelheid van de motoren regelen, en ze via de seriële poort naar het slave HC-05 Bluetooth-apparaat te sturen. We kunnen hier opmerken dat de analoge waarden van de joystick van 0 tot 1023 worden omgerekend naar waarden van 0 tot 255 door ze door 4 te delen.
We doen dit omdat dat bereik, van 0 tot 255, als 1 byte over het Bluetooth-apparaat verstuurd kan worden, wat aan de andere kant, of bij de Arduino-robotauto, makkelijker te accepteren is.
Hier, als de seriële poort de 2 bytes heeft ontvangen, de X- en Y-waarden, lezen we ze allebei met de Serial.read()-functie.
// Code van de Arduino Robot Auto
// Lees de binnenkomende data van de Joystick, of het master Bluetooth-apparaat
while (Serial.available() >= 2) {
x = Serial.read();
delay(10);
y = Serial.read();
}
Nu hoeven we de waarden alleen terug te rekenen naar het bereik van 0 tot 1023, geschikt voor de motorbesturingscode hieronder, die we al uitlegden hoe die werkt in de vorige video.
// Code van de Arduino Robot Auto
// Reken terug het 0-255 bereik naar 0-1023, geschikt voor motorbesturingscode
xAxis = x*4;
yAxis = y*4;
Even een kleine opmerking: bij het uploaden van de code moeten we de RX- en TX-pinnen van het Arduino-board loskoppelen.
Complete HC-05 Slave-code:
/* Arduino Robot Auto Draadloze Besturing met HC-05 Bluetooth == SLAVE APPARAAT - Arduino robot auto ==
by Dejan Nedelkovski, www.HowToMechatronics.com
*/
#define enA 9
#define in1 4
#define in2 5
#define enB 10
#define in3 6
#define in4 7
int xAxis, yAxis;
unsigned int x = 0;
unsigned int y = 0;
int motorSpeedA = 0;
int motorSpeedB = 0;
void setup() {
pinMode(enA, OUTPUT);
pinMode(enB, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
Serial.begin(38400); // Standaard communicatiesnelheid van de Bluetooth-module
}
void loop() {
// Standaardwaarde - geen beweging wanneer joystick in het midden blijft
x = 510 / 4;
y = 510 / 4;
// Lees de binnenkomende data van de Joystick, of het master Bluetooth-apparaat
while (Serial.available() >= 2) {
x = Serial.read();
delay(10);
y = Serial.read();
}
delay(10);
// Reken terug het 0-255 bereik naar 0-1023, geschikt voor motorbesturingscode
xAxis = x*4;
yAxis = y*4;
// Y-as gebruikt voor vooruit en achteruit besturing
if (yAxis < 470) {
// Motor A achteruit
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
// Motor B achteruit
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
// Reken de dalende Y-as waarden voor achteruit rijden van 470 naar 0 om naar 0-255 waarde voor PWM-signaal voor het verhogen van de motortoer
motorSpeedA = map(yAxis, 470, 0, 0, 255);
motorSpeedB = map(yAxis, 470, 0, 0, 255);
} else if (yAxis > 550) {
// Motor A vooruit
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
// Motor B vooruit
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
// Reken de stijgende Y-as waarden voor vooruit rijden van 550 naar 1023 om naar 0-255 waarde voor PWM-signaal
motorSpeedA = map(yAxis, 550, 1023, 0, 255);
motorSpeedB = map(yAxis, 550, 1023, 0, 255);
}
// Als joystick in het midden blijft, bewegen de motoren niet
else {
motorSpeedA = 0;
motorSpeedB = 0;
}
// X-as gebruikt voor links en rechts besturing
if (xAxis < 470) {
// Reken de dalende X-as waarden van 470 naar 0 om naar stijgende 0-255 waarde
int xMapped = map(xAxis, 470, 0, 0, 255);
// Naar links - verlaag linker motorsnelheid, verhoog rechter motorsnelheid
motorSpeedA = motorSpeedA - xMapped;
motorSpeedB = motorSpeedB + xMapped;
// Beperk bereik van 0 tot 255
if (motorSpeedA < 0) { motorSpeedA = 0; }
if (motorSpeedB > 255) { motorSpeedB = 255; }
}
if (xAxis > 550) {
// Reken de stijgende X-as waarden van 550 naar 1023 om naar 0-255 waarde
int xMapped = map(xAxis, 550, 1023, 0, 255);
// Naar rechts - verlaag rechter motorsnelheid, verhoog linker motorsnelheid
motorSpeedA = motorSpeedA + xMapped;
motorSpeedB = motorSpeedB - xMapped;
if (motorSpeedA > 255) { motorSpeedA = 255; }
if (motorSpeedB < 0) { motorSpeedB = 0; }
}
// Voorkom brullen bij lage snelheden (Aanpassen aan je motoren. Mijn motoren konden niet starten als PWM-waarde onder 70 was)
if (motorSpeedA < 70) { motorSpeedA = 0; }
if (motorSpeedB < 70) { motorSpeedB = 0; }
analogWrite(enA, motorSpeedA); // Stuur PWM-signaal naar motor A
analogWrite(enB, motorSpeedB); // Stuur PWM-signaal naar motor B
}
Arduino-robotauto besturen met een smartphone en een zelfgebouwde Android-app
Vervolgens laten we zien hoe we onze Arduino-robotauto kunnen besturen met een zelfgebouwde Android-app. Het schakelschema van de robotauto is precies hetzelfde als het vorige voorbeeld, met de HC-05 Bluetooth-module ingesteld als slave-apparaat.
Aan de andere kant, met de MIT App Inventor online applicatie bouwen we onze eigen Android-app, en zo ziet die eruit.
Eigenlijk simuleert de app een joystick, wiens uiterlijk bestaat uit twee afbeeldingen, of image sprites.
Als we kijken naar de blokken van deze app, zien we dat wanneer de joystick-sprite gesleept wordt, de afbeelding van de joystick-bal naar de huidige locatie van onze vinger wordt verplaatst, en tegelijkertijd sturen we de X- en Y-waarden via Bluetooth naar de Arduino-auto.
Deze waarden worden door de Arduino op dezelfde manier geaccepteerd als in het vorige voorbeeld, met de Serial.read-functie.
// Lees de binnenkomende data van de Smartphone Android App
while (Serial.available() >= 2) {
x = Serial.read();
delay(10);
y = Serial.read();
}
Wat we hier extra moeten doen is de ontvangen X- en Y-waarden van de smartphone omrekenen naar het bereik van 0 tot 1023, geschikt voor de motorbesturingscode hieronder. Deze waarden hangen af van de canvas-grootte, en de X- en Y-waarden die ik uit mijn app kreeg, waren van 60 tot 220, wat ik met de map()-functie eenvoudig omrekende.
// Zorg dat we correcte waarden ontvangen
if (x > 60 & x < 220) {
xAxis = map(x, 220, 60, 1023, 0); // Reken smartphone X- en Y-waarden om naar 0-1023 bereik, geschikt voor motorbesturingscode
}
if (y > 60 & y < 220) {
yAxis = map(y, 220, 60, 0, 1023);
}
In de applicatieblokken kunnen we ook zien dat wanneer de image sprite losgelaten wordt, de joystick-bal terug naar het midden van het canvas beweegt en de juiste waarden naar de auto worden gestuurd om te stoppen. Je kunt deze app op de website downloaden, alsook de twee afbeeldingen van de joystick om je eigen app te bouwen of deze aan te passen.
Je kunt de Android-app hieronder downloaden, alsook de twee afbeeldingen voor de joystick:
Arduino_Robot_Car_Joystick_App.apk (1,62 MB)
Arduino_Robot_Car_Joystick_App_aia_file (171,20 KB)
Joystick App Afbeeldingen (44,36 KB)
Complete Arduino-code:
/* Arduino Robot Auto Draadloze Besturing met HC-05 Bluetooth en zelfgebouwde Android-app == SLAVE APPARAAT - Arduino robot auto ==
by Dejan Nedelkovski, www.HowToMechatronics.com
*/
#define enA 9
#define in1 4
#define in2 5
#define enB 10
#define in3 6
#define in4 7
int xAxis, yAxis;
int x = 0;
int y = 0;
int motorSpeedA = 0;
int motorSpeedB = 0;
void setup() {
pinMode(enA, OUTPUT);
pinMode(enB, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
Serial.begin(38400); // Standaard communicatiesnelheid van de Bluetooth-module
}
void loop() {
// Standaardwaarde - geen beweging wanneer joystick in het midden blijft
xAxis = 510;
yAxis = 510;
// Lees de binnenkomende data van de Smartphone Android App
while (Serial.available() >= 2) {
x = Serial.read();
delay(10);
y = Serial.read();
}
delay(10);
// Zorg dat we correcte waarden ontvangen
if (x > 60 & x < 220) {
xAxis = map(x, 220, 60, 1023, 0);
}
if (y > 60 & y < 220) {
yAxis = map(y, 220, 60, 0, 1023);
}
// Y-as gebruikt voor vooruit en achteruit besturing
if (yAxis < 470) {
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
motorSpeedA = map(yAxis, 470, 0, 0, 255);
motorSpeedB = map(yAxis, 470, 0, 0, 255);
} else if (yAxis > 550) {
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
motorSpeedA = map(yAxis, 550, 1023, 0, 255);
motorSpeedB = map(yAxis, 550, 1023, 0, 255);
} else {
motorSpeedA = 0;
motorSpeedB = 0;
}
// X-as gebruikt voor links en rechts besturing
if (xAxis < 470) {
int xMapped = map(xAxis, 470, 0, 0, 255);
motorSpeedA = motorSpeedA - xMapped;
motorSpeedB = motorSpeedB + xMapped;
if (motorSpeedA < 0) { motorSpeedA = 0; }
if (motorSpeedB > 255) { motorSpeedB = 255; }
}
if (xAxis > 550) {
int xMapped = map(xAxis, 550, 1023, 0, 255);
motorSpeedA = motorSpeedA + xMapped;
motorSpeedB = motorSpeedB - xMapped;
if (motorSpeedA > 255) { motorSpeedA = 255; }
if (motorSpeedB < 0) { motorSpeedB = 0; }
}
// Voorkom brullen bij lage snelheden
if (motorSpeedA < 70) { motorSpeedA = 0; }
if (motorSpeedB < 70) { motorSpeedB = 0; }
analogWrite(enA, motorSpeedA);
analogWrite(enB, motorSpeedB);
}
Arduino-robotauto draadloze besturing met NRF24L01-transceivermodule
Nu gaan we over naar de volgende methode: draadloze besturing van de Arduino-robotauto met de NRF24L01-transceivermodules.
Hier is het schakelschema. We merken dat deze modules SPI-communicatie gebruiken, dus in vergelijking met het vorige voorbeeld, moest ik de Enable A en Enable B pinnen van de L298N-driver verplaatsen naar pin 2 en 3 van het Arduino-board.
Broncode
Voor dit voorbeeld moeten we de RF24-bibliotheek installeren. Op een vergelijkbare manier als het vorige voorbeeld, na het definiëren van enkele pinnen en het instellen van de module als zender, lezen we de X- en Y-waarden van de joystick en sturen we ze naar de andere NRF24L01-module bij de Arduino-robotauto.
We kunnen opmerken dat de analoge waarden Strings zijn, die met de string.toCharArray()-functie in een karakterarray worden gezet. Vervolgens sturen we met de radio.write()-functie die karakterarray-data naar de andere module.
Zendercode:
/* Arduino Robot Auto Draadloze Besturing met NRF24L01 Transceiver-module == Zender - Joystick ==
by Dejan Nedelkovski, www.HowToMechatronics.com
Library: TMRh20/RF24, https://github.com/tmrh20/RF24/
*/
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(8, 9); // CE, CSN
const byte address[6] = "00001";
char xyData[32] = "";
String xAxis, yAxis;
void setup() {
Serial.begin(9600);
radio.begin();
radio.openWritingPipe(address);
radio.setPALevel(RF24_PA_MIN);
radio.stopListening();
}
void loop() {
xAxis = analogRead(A0);
yAxis = analogRead(A1);
// X-waarde
xAxis.toCharArray(xyData, 5);
radio.write(&xyData, sizeof(xyData));
// Y-waarde
yAxis.toCharArray(xyData, 5);
radio.write(&xyData, sizeof(xyData));
delay(20);
}
Aan de andere kant, bij de Arduino-robotauto, na het definiëren van de module als ontvanger, accepteren we data met de radio.read()-functie. Vervolgens converteren we met de atoi()-functie de ontvangen data, of de X- en Y-waarden van de joystick, naar integer-waarden, die geschikt zijn voor de motorbesturingscode hieronder.
// Code van de Arduino Robot Auto - NRF24L01 voorbeeld
if (radio.available()) {
radio.read(&receivedData, sizeof(receivedData));
xAxis = atoi(&receivedData[0]);
delay(10);
radio.read(&receivedData, sizeof(receivedData));
yAxis = atoi(&receivedData[0]);
delay(10);
}
Het is zo simpel, maar natuurlijk, zoals ik al zei, als je meer details nodig hebt over hoe je de modules kunt verbinden en instellen, kun je altijd mijn specifieke tutorial ervoor raadplegen.
Ontvangercode:
/* Arduino Robot Auto Draadloze Besturing met NRF24L01 Transceiver-module == Ontvanger - Arduino robot auto ==
by Dejan Nedelkovski, www.HowToMechatronics.com
Library: TMRh20/RF24, https://github.com/tmrh20/RF24/
*/
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#define enA 2 // Let op: Pin 9 in vorige video (pin 10 wordt gebruikt voor SPI-communicatie van NRF24L01)
#define in1 4
#define in2 5
#define enB 3 // Let op: Pin 10 in vorige video
#define in3 6
#define in4 7
RF24 radio(8, 9); // CE, CSN
const byte address[6] = "00001";
char receivedData[32] = "";
int xAxis, yAxis;
int motorSpeedA = 0;
int motorSpeedB = 0;
void setup() {
pinMode(enA, OUTPUT);
pinMode(enB, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
Serial.begin(9600);
radio.begin();
radio.openReadingPipe(0, address);
radio.setPALevel(RF24_PA_MIN);
radio.startListening();
}
void loop() {
if (radio.available()) {
radio.read(&receivedData, sizeof(receivedData));
xAxis = atoi(&receivedData[0]);
delay(10);
radio.read(&receivedData, sizeof(receivedData));
yAxis = atoi(&receivedData[0]);
delay(10);
}
// Y-as gebruikt voor vooruit en achteruit besturing
if (yAxis < 470) {
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
motorSpeedA = map(yAxis, 470, 0, 0, 255);
motorSpeedB = map(yAxis, 470, 0, 0, 255);
} else if (yAxis > 550) {
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
motorSpeedA = map(yAxis, 550, 1023, 0, 255);
motorSpeedB = map(yAxis, 550, 1023, 0, 255);
} else {
motorSpeedA = 0;
motorSpeedB = 0;
}
// X-as gebruikt voor links en rechts besturing
if (xAxis < 470) {
int xMapped = map(xAxis, 470, 0, 0, 255);
motorSpeedA = motorSpeedA - xMapped;
motorSpeedB = motorSpeedB + xMapped;
if (motorSpeedA < 0) { motorSpeedA = 0; }
if (motorSpeedB > 255) { motorSpeedB = 255; }
}
if (xAxis > 550) {
int xMapped = map(xAxis, 550, 1023, 0, 255);
motorSpeedA = motorSpeedA + xMapped;
motorSpeedB = motorSpeedB - xMapped;
if (motorSpeedA > 255) { motorSpeedA = 255; }
if (motorSpeedB < 0) { motorSpeedB = 0; }
}
// Voorkom brullen bij lage snelheden
if (motorSpeedA < 70) { motorSpeedA = 0; }
if (motorSpeedB < 70) { motorSpeedB = 0; }
analogWrite(enA, motorSpeedA);
analogWrite(enB, motorSpeedB);
}
Arduino-robotauto draadloze besturing met HC-12 lange-afstand transceiver
Voor de laatste methode van draadloze besturing van de Arduino-robotauto zullen we de HC-12 lange-afstand transceiver-modules gebruiken. Deze modules kunnen met elkaar communiceren over afstanden tot 1,8 km.
Het schakelschema voor dit voorbeeld is bijna hetzelfde als dat voor de HC-05 Bluetooth-modules, aangezien ze dezelfde communicatiemethode met de Arduino gebruiken, via de seriële poort.
Je kunt de HC-12 Transceiver-module via de volgende Amazon-link verkrijgen.
Broncode
De joystick-code is precies dezelfde als die voor de Bluetooth-communicatie. We lezen gewoon de analoge waarden van de joystick en sturen ze naar de andere module met de Serial.write()-functie.
Zendercode:
/* Arduino Robot Auto Draadloze Besturing met HC-12 lange-afstand draadloze module == Zender - Joystick ==
by Dejan Nedelkovski, www.HowToMechatronics.com
*/
int xAxis, yAxis;
void setup() {
Serial.begin(9600); // Standaard communicatiesnelheid van de Bluetooth-module
}
void loop() {
xAxis = analogRead(A0);
yAxis = analogRead(A1);
Serial.write(xAxis/4);
Serial.write(yAxis/4);
delay(20);
}
Aan de andere kant wachten we met de while()-lus tot de data aankomt, lezen het met de Serial.read()-functie en rekenen het terug naar het bereik van 0 tot 1023, geschikt voor de motorbesturingscode hieronder.
Ontvangercode:
/* Arduino Robot Auto Draadloze Besturing met HC-12 lange-afstand draadloze module == Ontvanger - Arduino robot auto ==
by Dejan Nedelkovski, www.HowToMechatronics.com
*/
#define enA 9
#define in1 4
#define in2 5
#define enB 10
#define in3 6
#define in4 7
int xAxis, yAxis;
int x = 0;
int y = 0;
int motorSpeedA = 0;
int motorSpeedB = 0;
void setup() {
pinMode(enA, OUTPUT);
pinMode(enB, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
Serial.begin(9600); // Standaard communicatiesnelheid van de Bluetooth-module
}
void loop() {
// Standaardwaarde - geen beweging wanneer joystick in het midden blijft
xAxis = 510;
yAxis = 510;
// Lees de binnenkomende data van de
while (Serial.available() == 0) {}
x = Serial.read();
delay(10);
y = Serial.read();
delay(10);
// Reken terug het 0-255 bereik naar 0-1023, geschikt voor motorbesturingscode
xAxis = x * 4;
yAxis = y * 4;
// Y-as gebruikt voor vooruit en achteruit besturing
if (yAxis < 470) {
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
motorSpeedA = map(yAxis, 470, 0, 0, 255);
motorSpeedB = map(yAxis, 470, 0, 0, 255);
} else if (yAxis > 550) {
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
motorSpeedA = map(yAxis, 550, 1023, 0, 255);
motorSpeedB = map(yAxis, 550, 1023, 0, 255);
} else {
motorSpeedA = 0;
motorSpeedB = 0;
}
// X-as gebruikt voor links en rechts besturing
if (xAxis < 470) {
int xMapped = map(xAxis, 470, 0, 0, 255);
motorSpeedA = motorSpeedA - xMapped;
motorSpeedB = motorSpeedB + xMapped;
if (motorSpeedA < 0) { motorSpeedA = 0; }
if (motorSpeedB > 255) { motorSpeedB = 255; }
}
if (xAxis > 550) {
int xMapped = map(xAxis, 550, 1023, 0, 255);
motorSpeedA = motorSpeedA + xMapped;
motorSpeedB = motorSpeedB - xMapped;
if (motorSpeedA > 255) { motorSpeedA = 255; }
if (motorSpeedB < 0) { motorSpeedB = 0; }
}
// Voorkom brullen bij lage snelheden
if (motorSpeedA < 70) { motorSpeedA = 0; }
if (motorSpeedB < 70) { motorSpeedB = 0; }
analogWrite(enA, motorSpeedA);
analogWrite(enB, motorSpeedB);
}
Dat is ongeveer alles voor deze tutorial. Voel je vrij om vragen te stellen in de reacties hieronder.
Productieproces
- Bouw een Bluetooth-gecontroleerde Raspberry Pi Robot met Audio Feedback
- Universele Android-afstandsbediening bouwen met Arduino, 1Sheeld en IR-besturing
- Een slimme voltmeter bouwen met Arduino en smartphone – Eenvoudig DIY-project
- Een LED bedienen via Bluetooth met Arduino – Eenvoudige DIY Handleiding
- Bestuur een Arduino-rover naadloos met Firmata en een Xbox One-controller
- Slimme Parkeer Teller: Real-time Voertuigvolging met Arduino, Processing en PHP
- Je TV bedienen met Alexa via Arduino IoT Cloud – stapsgewijze handleiding
- Bouw een compacte FM-radio met Arduino Nano en RDA5807M
- Draadloze Arduino Programmeer Shield met HC-05 Bluetooth – Geen USB Nodig
- Arduino Uno & Bluetooth voor afstandsbediening van auto: stap-voor-stap handleiding
- Gebarenbestuurde PC met Arduino en Python – handvrije bediening