Coche RC Wi‑Fi con carga inalámbrica Qi: Kit de coche teledirigido sin cables
Componentes y materiales
| Componente | Cantidad |
|---|---|
| Kit prototipo transmisor Qi 5W (IDT) | 1 |
| Kit prototipo receptor Qi 5W (IDT) | 1 |
| Arduino MKR1000 | 1 |
| Chasis robot 2WD para Arduino | 1 |
| Driver motor L293DNE | 1 |
| Módulo elevador CN6009 (Step-up) | 1 |
| Batería Li-Po 3.7V | 1 |
| Diodo 1N4007 | 8 |
| LED (genérico) | 1 |
| Resistencia 221 Ω | 1 |
| Bridas | 5 |
| Protoboard (genérica, opcional) | 1 |
Herramientas necesarias
- Soldador
- Pistola de silicona caliente
- Destornillador
- Voltímetro
Aplicaciones y servicios en línea
- Arduino IDE
Sobre el proyecto
Este proyecto muestra paso a paso cómo crear un coche RC controlado por Wi-Fi que se recarga automáticamente de forma inalámbrica mientras está aparcado.
¿Cómo funciona?
El cerebro es el Arduino MKR1000, conectado por Wi-Fi a tu móvil. Alimentado por batería Li-Po 3.7V. Para control de motores se usa L293DNE, que necesita mínimo 4.5V. Elevamos la tensión de 3.7V a 5V con el CN6009 (Step-up). Para cargar la batería, el MKR1000 tiene cargador automático Li-Po: al detectar 5V DC externo, carga la batería conectada. El receptor Qi 5W (IDT P9025AC-R-EVK) se conecta como fuente externa 5V DC. Cuando el coche aparca sobre la base transmisora Qi 5W (IDT P9038-R-EVK), la batería se carga. Dos modos de velocidad: Rápido y Lento.
Parte hardware
- Soldar cables en bornes de los motores y en placa receptora IDT (pin OUT → rojo, GND → negro). Necesitas soldador y 6 cables.
- Circuito electrónico: usa protoboard o suelda todo según esquemático.
- ⚠ PRECAUCIÓN: Usa batería Li-Po 3.7V de al menos 700 mAh. Menor capacidad → riesgo de sobrecalentamiento y explosión.
- Ajustar CN6009 a 5V salida (destornillador). Verifica con voltímetro en OUT+ / OUT-.
- Montar receptor Qi: base de plástico (ej. tarjeta) en fondo del coche, pega receptor con silicona. Conecta rojo a VIN de Arduino, negro a GND.
- Estabilizar vehículo: sujeta batería y protoboard con bridas.
Parte software – Conexión Wi-Fi
Copia el código. Rellena SSID y contraseña (líneas 12-13). Configurado para WPA/WPA2. Para WEP o red abierta, sigue comentarios en código (líneas 34-37).
¿Cómo usarlo?
Paso 1: Conectar al Arduino MKR1000
Dos opciones: (1) Activar Hotspot Wi-Fi en móvil y conectar la placa al hotspot. (2) Conectar móvil y Arduino al mismo router Wi-Fi. Rellena SSID/contraseña del router en el código. Mejor método 1: controlas el coche sin router.
Paso 2: Obtener IP del Arduino MKR1000
Si usas hotspot: en ajustes del hotspot verás la IP de la placa (ej. 192.168.1.1). Si usas router: mira en configuración del router.
El LED del coche indica conexión exitosa y servidor activo.
Paso 3: Acceder al servidor web del Arduino
En navegador, escribe la IP del Arduino en la barra de direcciones.
Paso 4: Conectar base de carga
Conecta el transmisor Qi 5W (IDT P9038-R-EVK) a enchufe con adaptador 5V DC.
Paso 5: ¡Diviértete!
¡Hora de cargar! Prueba de conducción.
Código
Arduino_IDT_Wi-Fi_Car.ino (Arduino)
#include <SPI.h>
#include <WiFi101.h>
const int motor1Control = 2; // Motor derecho
const int motor2Control = 3; // Motor izquierdo
const int motor1Input1 = 4;
const int motor1Input2 = 5;
const int motor2Input1 = 8;
const int motor2Input2 = 9;
const int wifiLed = 10;
char ssid[] = "example"; // Tu SSID
char pass[] = "password"; // Tu contraseña
int keyIndex = 0; // Índice clave (solo 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) {
// WPA/WPA2:
status = WiFi.begin(ssid, pass);
// WEP: status = WiFi.begin(ssid, keyIndex, pass);
// Abierta: status = WiFi.begin(ssid);
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("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;
}
// Botones de modo velocidad
if (readString.indexOf("?fast") > 0) { speedMode = "fast"; readString = ""; }
if (readString.indexOf("?slow") > 0) { speedMode = "slow"; readString = ""; }
// Modo rápido
if (speedMode == "fast") {
if (readString.indexOf("?moveForwards") > 0) { moveForwards(); readString = ""; }
if (readString.indexOf("?moveBackwards") > 0) { moveBackwards(); readString = ""; }
}
// Modo lento
else if (speedMode == "slow") {
if (readString.indexOf("?moveForwards") > 0) { moveForwardsSlow(); readString = ""; }
if (readString.indexOf("?moveBackwards") > 0) { moveBackwardsSlow(); readString = ""; }
}
// Dirección y parada (comunes a ambos modos)
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();
}
}
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);
}
Partes personalizadas y cajas
Archivo CAD: Arduino IDT Wireless charging wifi car.cad
Esquemático
Esquema del circuito (imagen referenciada).
Proceso de manufactura
- Fabricación de Piezas de Motor de Precisión Premium con Tornos CNC y Fresado
- Dominando tu gato hidráulico: Tipos, usos y consejos de seguridad
- Cómo el Número de Cilindros Define el Rendimiento del Motor Moderno
- Cómo Funciona el Motor de Coche: El Corazón que Impulsa tus Ruedas
- Cómo reparar una fuga de gasolina en el coche: soluciones rápidas y seguras
- Cómo afectan las modificaciones del coche a la garantía: lo que debes saber
- Guía Paso a Paso para Reparar el Tirador de la Puerta de tu Coche
- Por Qué los Dispositivos IoT con Wi-Fi Representan una Amenaza de Seguridad Creciente
- Constructores en C#: Tipos, ejemplos y patrones avanzados
- Entendiendo clases anidadas en C#: Definición, uso y herencia
- Dominando la Sobrecarga de Constructores en C#