Carro RC Wi-Fi - Qi ativado
Componentes e suprimentos
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 8 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 5 | ||||
| × | 1 |
Ferramentas e máquinas necessárias
| ||||
| ||||
| ||||
|
Aplicativos e serviços online
|
Sobre este projeto
O que você construirá neste projeto?
Este é um projeto que mostrará passo a passo como criar um carro RC controlado por Wi-Fi que recarregará automaticamente sem fio enquanto estiver estacionado.
Como funciona?
O cérebro do projeto é o Arduino MKR1000 e ele está conectado por Wi-Fi ao seu dispositivo móvel. A placa Arduino é alimentada por uma bateria Li-Po de 3,7 V. Para o controle do motor, um driver de motor L293DNE é usado. No entanto, ele precisa de pelo menos 4,5 V para operar. Aumentaremos a tensão de 3,7 V para 5 V com um Módulo Conversor de Potência Step-up boost (converte a tensão baixa para mais alta) e, desta forma, o driver do motor será alimentado com 5V.
Para carregar a bateria, a placa Arduino MKR1000 possui um sistema de carregamento automático para baterias Li-Po. Quando uma fonte externa (5 V DC) de energia é conectada, a bateria conectada à placa está sendo carregada. Portanto, o IDT P9025AC-R-EVK - Qi 5W O receptor será conectado à placa Arduino como uma fonte externa (5 Vcc). Quando o estacionamento estaciona na estação de carregamento (que é o IDT P9038-R-EVK - Qi 5W Transmissor), a bateria será carregada.
O sistema de controle possui dois modos de velocidade:Rápido e Lento.
Como construir?
Peça de Hardware
Soldar os fios nos pólos do motor e na placa do receptor IDT (Pin OUT com fio vermelho e pino GND com fio preto). Para esta etapa, você precisará de um ferro de solda e 6 fios.
Fazendo o circuito eletrônico. Você pode usar uma placa de ensaio para criar seu circuito ou então soldar todas as conexões.
CUIDADO:Use uma bateria Li-Po de 3,7 V com pelo menos 700mAh de capacidade! Caso contrário, a bateria pode superaquecer e explodir!
Ajustando o CN6009. Módulo conversor de potência para 5V. O valor de saída do Toadjust CN6009 usa uma chave de fenda. Certifique-se de verificar a tensão de saída (conectando um voltímetro aos pinos OUT + e OUT-).
Conectando o receptor IDT wireless power Qi 5W. Pegue um pedaço de plástico (por exemplo, cartão de plástico) para fazer uma base para o receptor de energia sem fio na parte inferior do carro. Em seguida, cole a peça de plástico, bem como o receptor, na parte inferior do carro com silicone. Finalmente, conecte o fio vermelho do receptor IDT ao pino VIN do arduino e o fio preto ao pino GND.
Tornando o veículo estável. Prenda com laço envolve a bateria e a placa de pão no veículo.
Parte do software - Conexão Wi-Fi
Para esta parte apenas copie o código. No arquivo de código, preencha o SSID e a senha de sua rede (linhas 12, 13 no arquivo de código). Você precisa seguir as instruções de comentário. O código está definido para funcionar com redes WPA / WPA2. Se você deseja se conectar a um WEP ou a uma rede aberta, siga as instruções nos comentários do código (linhas 34-37).
Como usá-lo?
Etapa 1:Conectando-se ao Arduino MKR1000
Controlar o veículo requer conexão wi-fi. Você pode conseguir isso de duas maneiras. O primeiro é habilitar o Hotspot Wi-Fi em seu dispositivo móvel e conectar a placa ao Hotspot. O segundo é conectar seu dispositivo móvel e a placa Arduino ao mesmo roteador Wi-Fi. Certifique-se de preencher as configurações de SSID e senha do roteador no arquivo de código que será carregado para a placa Arduino.
Nota:É preferível utilizar o primeiro método (Wi-Fi Hotspot) porque desta forma poderá controlar o seu veículo sem a necessidade de um router.
Etapa 2:obtendo o endereço IP do Arduino MKR1000
Se a placa Arduino estiver conectada ao ponto de acesso do seu dispositivo móvel, acesse as configurações do ponto de acesso Wi-Fi e você verá o endereço IP da sua placa (por exemplo, 192.168.1.1).
Se a placa Arduino estiver conectada a um roteador Wi-Fi, você precisa verificar isso nas configurações do roteador.
O LED no carro indica conexão bem-sucedida com a rede especificada e ativação do servidor.
Etapa 3:Acessando o servidor da Web do Arduino MKR1000
Vá para o seu navegador e na caixa URL digite o endereço IP do seu Arduino.
Etapa 4:conectar a base de carregamento
Conecte o IDT P9038-R-EVK - Transmissor Qi 5W a uma tomada de parede usando um adaptador DC 5V.
Etapa 5:Divirta-se!
O tempo de carga!!
Passeio de teste:
Arquivos Gerber do PCBWeb
Código
- Arduino_IDT_Wi-Fi_Car.ino
Arduino_IDT_Wi-Fi_Car.ino Arduino
Substitua example e password nas linhas 12-13 com seu ssid e senha respectivamente.#include#include const int motor1Control =2; // Motorconst direito int motor2Control =3; // Motorconst int motor1Input1 =4; const int motor1Input2 =5; const int motor2Input1 =8; const int motor2Input2 =9; const int wi-fiLed =10; // Para indicar conexão Wi-Fi bem-sucedida, ssid [] ="exemplo"; // Preencha sua rede SSID (nome) char pass [] ="senha"; // Preencha sua senha de redeint keyIndex =0; // Preencha o número do índice da sua chave de rede (opcional - necessário apenas para WEP) int status =WL_IDLE_STATUS; String readString; WiFiServer server (80); // Defina a porta do serverString speedMode ="fast"; void setup () {pinMode (motor1Control, OUTPUT); pinMode (motor2Control, OUTPUT); pinMode (motor1Input1, OUTPUT); pinMode (motor1Input2, OUTPUT); pinMode (motor2Input1, OUTPUT); pinMode (motor2Input2, OUTPUT); pinMode (wi-fiLed, SAÍDA); // Tentativa de se conectar à rede Wifi:while (status! =WL_CONNECTED) {// Conectar à rede WPA / WPA2. Altere esta linha se estiver usando rede aberta ou WEP:// Para rede WEP, substitua por:status =WiFi.begin (ssid, keyIndex, pass); // Para rede aberta, substitua por:status =WiFi.begin (ssid); status =WiFi.begin (SSID, aprovação); // aguarde 10 segundos pela conexão:delay (10000); } // Inicie o servidor web server.begin (); // Indica que o servidor está executando digitalWrite (wifiLed, HIGH);} void loop () {// Ouvir clientes de entrada WiFiClient client =server.available (); if (client) {// uma solicitação http termina com uma linha em branco boolean currentLineIsBlank =true; while (client.connected ()) {if (client.available ()) {char c =client.read (); // Se você chegou ao final da linha (recebeu um caractere de nova linha //) e a linha está em branco, a solicitação http terminou, // então você pode enviar uma resposta se (readString.length () <100 ) {// armazena caracteres na string readString + =c; } if (c =='\ n') {// enviar um cabeçalho de resposta http padrão client.println ("HTTP / 1.1 200 OK"); client.println ("Content-Type:text / html"); client.println (); client.println (""); client.println (""); client.println (""); client.println (""); client.println (""); client.println (""); // Botão para mover Forwards client.println (" FORWARDS "); client.println ("
"); // Botão para virar à esquerda client.println (" ESQUERDA "); // Botão para parar o carro client.println (" STOP " ); // Botão para virar à direita client.println (" RIGHT "); client.println ("
"); // Botão para mover para trás client.println (" BACKWARDS "); client.println ("
"); client.println ("
"); // Botão para retroceder client.println ("MODOS DE VELOCIDADE
"); client.println (" RÁPIDO "); client.println (" SLOW "); client.println (" "); client.println (" "); break;} // Decida qual botão foi clicado (se houver) // Botão Modo rápido if (readString.indexOf ("? fast ")> 0) {speedMode ="fast"; // Limpe o readString para poder obter o próximo comando readString ="";} // Botão Modo lento if (readString.indexOf ("? Slow")> 0) {speedMode ="slow"; // Limpe o readString para poder obter o próximo comando readString ="";} // Modo rápido if (speedMode =="fast") {if (readString.indexOf ("? moveForwards")> 0 ) {moveForwards (); // Limpe o readString para poder obter o próximo comando readString ="";} if (readString.indexOf ("? moveBackwards")> 0) {moveBackwards (); // Limpe o readString para ser capaz de obter o próximo comando readString ="";}} else if (speedMode =="slow") {// Modo lento if (readString.indexOf ("? moveForwards")> 0) {moveForwardsSlow (); // Limpe o readString para poder obter o próximo comando r eadString =""; } if (readString.indexOf ("? moveBackwards")> 0) {moveBackwardsSlow (); // Limpe o readString para poder obter o próximo comando readString =""; }} if (readString.indexOf ("? turnLeft")> 0) {turnLeft (); // Limpe o readString para poder obter o próximo comando readString =""; } if (readString.indexOf ("? turnRight")> 0) {turnRight (); // Limpe o readString para poder obter o próximo comando readString =""; } if (readString.indexOf ("? stopMoving")> 0) {stopMoving (); // Limpe o readString para poder obter o próximo comando readString =""; }}} // Dê ao navegador da web tempo para receber o atraso de dados (1); // Feche a conexão:client.stop (); }} // Comandos para mover para frentevoid moveForwards () {digitalWrite (motor1Control, HIGH); digitalWrite (motor2Control, HIGH); digitalWrite (motor1Input1, LOW); digitalWrite (motor1Input2, HIGH); digitalWrite (motor2Input1, LOW); digitalWrite (motor2Input2, HIGH);} // Comandos para mover para trásvoid moveBackwards () {digitalWrite (motor1Control, HIGH); digitalWrite (motor2Control, HIGH); digitalWrite (motor1Input1, HIGH); digitalWrite (motor1Input2, LOW); digitalWrite (motor2Input1, HIGH); digitalWrite (motor2Input2, LOW);} // Comandos para virar para a direita evite turnRight () {// Tensão mais baixa é fornecida para virar mais devagar - melhor controle analogWrite (motor1Control, 0); analogWrite (motor2Control, 200); digitalWrite (motor1Input1, HIGH); digitalWrite (motor1Input2, LOW); digitalWrite (motor2Input1, LOW); digitalWrite (motor2Input2, HIGH);} // Comandos para girar para a esquerdavoid turnLeft () {// A tensão mais baixa é fornecida para girar mais devagar - melhor controle analogWrite (motor1Control, 200); analogWrite (motor2Control, 0); digitalWrite (motor1Input1, LOW); digitalWrite (motor1Input2, HIGH); digitalWrite (motor2Input1, HIGH); digitalWrite (motor2Input2, LOW);} // Comandos para parar o carvoid stopMoving () {digitalWrite (motor1Control, LOW); digitalWrite (motor2Control, LOW); digitalWrite (motor1Input1, LOW); digitalWrite (motor1Input2, LOW); digitalWrite (motor2Input1, LOW); digitalWrite (motor2Input2, LOW);} // Comandos para movimento de avanço em baixa velocidade evita moverForwardsSlow () {analogWrite (motor1Control, 200); analogWrite (motor2Control, 200); digitalWrite (motor1Input1, LOW); digitalWrite (motor1Input2, HIGH); digitalWrite (motor2Input1, LOW); digitalWrite (motor2Input2, HIGH);} // Comandos para mover para trás em baixa velocidade evita moverBackwardsSlow () {analogWrite (motor1Control, 200); analogWrite (motor2Control, 200); digitalWrite (motor1Input1, HIGH); digitalWrite (motor1Input2, LOW); digitalWrite (motor2Input1, HIGH); digitalWrite (motor2Input2, LOW);}
Peças personalizadas e gabinetes
Arduino% 20IDT% 20Wireless% 20charging% 20wifi% 20car.cadEsquemas
Processo de manufatura
- Construtor C#
- Classe aninhada C#
- Sobrecarga do construtor C#
- A crescente ameaça da IoT habilitada para Wi-Fi
- Peças de motor de carro feitas de precisão
- Entendendo o sistema de macacos automotivos
- Como consertar um vazamento de gás no meu carro?
- A atualização do carro afeta a garantia?
- Como consertar a maçaneta da porta do seu carro
- Como reparar a ferrugem no seu carro?