Qi-geschikte Wi‑Fi RC-auto: bouwen van een draadloos oplaadbare bestuurbare auto
Onderdelen en benodigdheden
- IDT Qi 5W Transmitter Prototype Kit (1×)
- IDT Qi 5W Receiver Prototype Kit (1×)
- Arduino MKR1000 (1×)
- 2WD Robot Chassis voor Arduino (1×)
- L293DNE motordriver (1×)
- CN6009 Step-up boost converter module (1×)
- 3,7 V Li-Po accu (min. 700 mAh) (1×)
- 1N4007 diodes (8×)
- LED (1×)
- 221 Ω weerstand (1×)
- Kabelbinders (5×)
- Breadboard (optioneel) (1×)
Benodigde tools en machines
- Solderbout
- Lijmpistool
- Schroevendraaier
- Multimeter
Apps en online diensten
- Arduino IDE
Over dit project
Deze handleiding laat stap voor stap zien hoe je een Wi-Fi-gecontroleerde RC-auto bouwt die zich zelf draadloos oplaat zodra hij geparkeerd staat op de laadstation.
Hoe het werkt
De Arduino MKR1000 is de hersenen en communiceert via Wi-Fi met je mobiele apparaat. Het bord wordt gevoed door een 3,7 V Li-Po accu. Voor de motorbesturing dient een L293DNE motordriver, die minimaal 4,5 V nodig heeft. Een CN6009 step-up converter verhoogt de 3,7 V naar 5 V voor de driver.
De MKR1000 heeft een ingebouwde laadcontroller voor Li-Po accu's. Wanneer een externe 5 V bron aangesloten is, laadt de accu. De IDT P9025AC-R-EVK Qi 5W Receiver (op de auto) fungeert als die externe bron. Zodra de auto over de IDT P9038-R-EVK Qi 5W Transmitter (laadstation) parkeert, begint de accu op te laden.
De besturing heeft twee snelheidsmodi: Snel en Langzaam.
Hoe te bouwen – Hardware
- Solder draden aan de motorpolen en aan de IDT Receiver (rood = OUT, zwart = GND).
- Bouw de elektronische schakeling op breadboard of soldeer vast. Let op: gebruik een 3,7 V Li-Po van minstens 700 mAh, anders oververhitting/explosierisico!
- Stel de CN6009 in op 5 V uitgang (schroevendraaier, meet met multimeter).
- Monteer de Qi-ontvanger op de onderkant van de auto (plastic kaartje als basis, vastlijmen met silicone). Rood draad → VIN Arduino, zwart → GND.
- Bevestig accu en breadboard met kabelbinders aan het chassis.





Software – Wi-Fi verbinding
Kopieer de code en vul je netwerk-SSID en wachtwoord in (regels 12-13). De code werkt standaard met WPA/WPA2; voor WEP of open netwerk volg de commentaar-instructies (regels 34-37).

Gebruik
Stap 1: Verbinden met de MKR1000
Twee opties: (1) Wi-Fi-hotspot op je telefoon aanzetten en de MKR1000 ermee verbinden, of (2) beide apparaten op dezelfde router zetten. Vul in de code de SSID/wachtwoord van de gekozen methode in. Hotspot-methode is handiger: geen router nodig.
Stap 2: IP-adres van de MKR1000 vinden
Bij hotspot: in hotspot-instellingen van je telefoon staat het IP-adres (bijv. 192.168.1.1). Bij router: in router-instellingen zoeken. De LED op de auto brandt bij succesvolle verbinding.
Stap 3: Webserver benaderen
Open browser, typ het IP-adres in de adresbalk.
Stap 4: Laadstation aansluiten
Sluit de IDT Qi 5W Transmitter aan op een 5 V DC-adapter in het stopcontact.
Stap 5: Genieten!
Testrit en draadloos laden!
Code
Arduino_IDT_Wi-Fi_Car.ino (Arduino)
#include <SPI.h>
#include <WiFi101.h>
const int motor1Control = 2; // Rechter motor
const int motor2Control = 3; // Linker motor
const int motor1Input1 = 4;
const int motor1Input2 = 5;
const int motor2Input1 = 8;
const int motor2Input2 = 9;
const int wifiLed = 10;
char ssid[] = "example"; // Vul je SSID in
char pass[] = "password"; // Vul je wachtwoord in
int keyIndex = 0; // Alleen voor WEP
int status = WL_IDLE_STATUS;
String readString;
WiFiServer server(80);
String speedMode = "fast";
void setup() {
pinMode(motor1Control, OUTPUT);
pinMode(motor2Control, OUTPUT);
pinMode(motor1Input1, OUTPUT);
pinMode(motor1Input2, OUTPUT);
pinMode(motor2Input1, OUTPUT);
pinMode(motor2Input2, OUTPUT);
pinMode(wifiLed, OUTPUT);
while (status != WL_CONNECTED) {
status = WiFi.begin(ssid, pass); // WPA/WPA2
// status = WiFi.begin(ssid, keyIndex, pass); // WEP
// status = WiFi.begin(ssid); // Open
delay(10000);
}
server.begin();
digitalWrite(wifiLed, HIGH);
}
void loop() {
WiFiClient client = server.available();
if (client) {
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
if (readString.length() < 100) readString += c;
if (c == '\n') {
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println();
client.println("");
client.println("");
client.println("FORWARDS
");
client.println("LEFT");
client.println("STOP");
client.println("RIGHT
");
client.println("BACKWARDS
");
client.println("SPEED MODES
");
client.println("FAST");
client.println("SLOW");
client.println("");
break;
}
// Commando's verwerken
if (readString.indexOf("?fast") > 0) { speedMode = "fast"; readString = ""; }
if (readString.indexOf("?slow") > 0) { speedMode = "slow"; readString = ""; }
if (speedMode == "fast") {
if (readString.indexOf("?moveForwards") > 0) { moveForwards(); readString = ""; }
if (readString.indexOf("?moveBackwards") > 0) { moveBackwards(); readString = ""; }
} else {
if (readString.indexOf("?moveForwards") > 0) { moveForwardsSlow(); readString = ""; }
if (readString.indexOf("?moveBackwards") > 0) { moveBackwardsSlow(); readString = ""; }
}
if (readString.indexOf("?turnLeft") > 0) { turnLeft(); readString = ""; }
if (readString.indexOf("?turnRight") > 0) { turnRight(); readString = ""; }
if (readString.indexOf("?stopMoving") > 0) { stopMoving(); readString = ""; }
}
}
delay(1);
client.stop();
}
}
// Motor-functies
void moveForwards() {
digitalWrite(motor1Control, HIGH); digitalWrite(motor2Control, HIGH);
digitalWrite(motor1Input1, LOW); digitalWrite(motor1Input2, HIGH);
digitalWrite(motor2Input1, LOW); digitalWrite(motor2Input2, HIGH);
}
void moveBackwards() {
digitalWrite(motor1Control, HIGH); digitalWrite(motor2Control, HIGH);
digitalWrite(motor1Input1, HIGH); digitalWrite(motor1Input2, LOW);
digitalWrite(motor2Input1, HIGH); digitalWrite(motor2Input2, LOW);
}
void turnRight() {
analogWrite(motor1Control, 0); analogWrite(motor2Control, 200);
digitalWrite(motor1Input1, HIGH); digitalWrite(motor1Input2, LOW);
digitalWrite(motor2Input1, LOW); digitalWrite(motor2Input2, HIGH);
}
void turnLeft() {
analogWrite(motor1Control, 200); analogWrite(motor2Control, 0);
digitalWrite(motor1Input1, LOW); digitalWrite(motor1Input2, HIGH);
digitalWrite(motor2Input1, HIGH); digitalWrite(motor2Input2, LOW);
}
void stopMoving() {
digitalWrite(motor1Control, LOW); digitalWrite(motor2Control, LOW);
digitalWrite(motor1Input1, LOW); digitalWrite(motor1Input2, LOW);
digitalWrite(motor2Input1, LOW); digitalWrite(motor2Input2, LOW);
}
void moveForwardsSlow() {
analogWrite(motor1Control, 200); analogWrite(motor2Control, 200);
digitalWrite(motor1Input1, LOW); digitalWrite(motor1Input2, HIGH);
digitalWrite(motor2Input1, LOW); digitalWrite(motor2Input2, HIGH);
}
void moveBackwardsSlow() {
analogWrite(motor1Control, 200); analogWrite(motor2Control, 200);
digitalWrite(motor1Input1, HIGH); digitalWrite(motor1Input2, LOW);
digitalWrite(motor2Input1, HIGH); digitalWrite(motor2Input2, LOW);
}
Aangepaste onderdelen en behuizingen
Arduino%20IDT%20Wireless%20charging%20wifi%20car.cad
Schema's

Productieproces
- Premium precisie motoronderdelen productie met CNC draai- en freesmachines
- Uw Wagenkrik Beheersen: Typen, Toepassingen en Veiligheidstips
- Hoe Cilinderaantal Moderne Motorprestaties Vormt
- Hoe AutoMotoren Werken: Inzicht in de Kracht Achter het Stuur
- Hoe u een benzinelek in uw auto snel en veilig repareert
- Hoe voertuig-upgrades uw garantie beïnvloeden: wat u moet weten
- Stap-voor-stap handleiding voor het repareren van uw autodeurhandvat
- Waarom Wi-Fi-ingeschakelde IoT-apparaten een groeiende beveiligingsdreiging vormen
- C# Constructors: Types, Voorbeelden en Geavanceerde Patronen
- C# Geneste Classes: Definitie, Gebruik en Inheritance
- Constructor overloading in C#: flexibele klassen ontwerpen