Construa um Spybot Controlado por Bluetooth com Arduino
Componentes e Materiais
- 1x Arduino UNO
- 1x Módulo Bluetooth HC-06
- 1x Proto Shield Arduino (ou qualquer protoboard soldável com headers)
- 1x Shield Motor/Stepper/Servo Adafruit V2
- 1x Servo de rotação contínua SM-S4306R
- 4x Motor DC (genérico)
- 4x Pneu para motor
- 8x Fios jumper (para motores)
- 2x Suporte 4x pilhas AA
- 8x Pilhas AA
- 1x Celular (usado Nokia Lumia 520)
- 1x Suporte para celular
- 1x Chassi personalizado (madeira simples)
Aplicativos e Serviços Online
- Johnny-Five (framework JavaScript para robótica com Arduino)
Sobre o Projeto
Introdução
Este é um carro simples de quatro rodas controlável via conexão Bluetooth. O carro comporta qualquer celular que pode ser usado como câmera IP. Decidi fazer este robô com JavaScript usando um servidor web Node.js onde posso monitorar para onde o robô vai.
O circuito das partes principais pode ser visto na Figura 1.
Após iniciar o servidor, obtenho uma tela com introdução sobre controles e janela para visualização da câmera (Figura 2). O layout é responsivo.
O Chassi
Nesta versão, decidi fazer o chassi próprio. Se não tiver furadeira ou quiser solução mais fácil, pode comprar carcaças plásticas prontas.
Fiz meu próprio chassi e não foi tão fácil quanto parece. A regra mais importante: coloque os pneus o mais próximo possível uns dos outros se quiser usar direção diferencial para virar. Erros principais e regras básicas de física em: 4-Wheel-Drive Robot Design.
Outro desafio: como fixar os motores DC ao chassi. Não tinha peças especiais, então usei abraçadeiras de cabo (150/3,5). Para fixação adequada dos pneus, precisei furar furos o mais precisos possível e usar 2 abraçadeiras por motor. Infelizmente, há chance de os motores não ficarem perfeitamente retos e o carro tender a puxar para esquerda ou direita ao controlar frente/trás.
As Baterias
Para alimentar placas e motores, escolhi uma única fonte DC. O chassi não tinha espaço para suporte de 8 pilhas AA, então precisei personalizar: fixei dois suportes de 4x AA com 2 parafusos um no outro, furando o plástico.
Alimentação
Alimento o Arduino Uno com 8 pilhas AA recarregáveis. Isso basta para alimentar o shield motor também. Há um jumper removível no shield para que ele não receba energia do Arduino. Nesse caso, pode alimentar o shield separadamente usando os pinos de alimentação nele. Opções de alimentação em: Adafruit Motor Shield V2 - Powering Motors.
Conexão Sem Fio
Usei módulo Bluetooth HC-06 para conectar o carro ao computador. Queria usar o mínimo de cabos, então construí um shield Arduino personalizado colocando o módulo Bluetooth em um proto shield vazio, fiz a fiação sob o shield e soldei headers para fixação correta. Veja resultado nas Figuras 3 e 4. Vantagem: pode desacoplar o módulo Bluetooth do shield a qualquer momento pois não é soldado à placa.
Para configurar o módulo Bluetooth, siga instruções em: Johnny-Five Bluetooth Setup.
Movimento
O robô move frente, trás e vira usando direção diferencial. O suporte da câmera está acoplado a um servo de rotação contínua para olhar ao redor com o celular sem mover o carro.
Celular
Usei Nokia Lumia 520 com aplicativo Win IP Camera (disponível na Microsoft Store: Win IP Camera).
Sobre o Código
Como desenvolvedor JavaScript, criei um servidor web Node.js para a página de controle e usei bibliotecas para aparência e sintaxe. Código completo no GitHub.
Usei modularização tanto no frontend quanto backend. Ponto de entrada da aplicação:
var boardModule = require('./src/boardModule'),
servoModule = require('./src/servoModule'),
motorModule = require('./src/motorModule');
boardModule.initBoard().then(function() {
motorModule.initMotors();
servoModule.initServo();
});
No frontend, também separação por módulo:
import {moveWheels, stopWheels} from './wheelsControl';
import {moveServo, stopServo} from './servoControl';
document.onkeydown = checkKeyDown;
document.onkeyup = checkKeyUp;
function checkKeyDown(e) {
moveWheels(e.keyCode);
moveServo(e.keyCode);
}
function checkKeyUp(e) {
stopWheels(e.keyCode);
stopServo(e.keyCode);
}
Bibliotecas de Software
- express.js - aprimorar aplicação Node.js
- johnny-five - API JavaScript para controle Arduino
- socket.io - websockets para comunicação backend-frontend
- susy - layout e design responsivo
- google material design - elementos Material Design
- gulpJS - automação de tarefas
- BabelJS - transpilação ES6
- Browserify - suporte a módulos
Considerações Finais
Sou iniciante no mundo IoT e este é meu primeiro projeto. Não afirmo ter usado soluções ótimas, mas espero que encontre informações úteis neste guia.
Código
Repositório GitHub: https://github.com/dominikfilkus/arduino-spybot-V2
Esquemáticos
Arquivo Fritzing: arduino-spybot.fzz
Processo de manufatura
- Guia Profissional de Animação de Bitmap no Shield TFT Touchscreen ILI9341 2,4″ com Arduino
- Sistema de Iluminação DMX Controlado via Web – Controlador Mestre Arduino
- FlickMote: Controle Remoto IR por Gestos para Casa Inteligente
- DIY Arduino TV B-Gone: Controle Remoto Universal para Todas as TVs
- Construa um Relógio Mestre LED Personalizado com Alarme – Visível a 12 Metros
- Relógio HSV: Relógio Vibrante e Personalizável para Entusiastas de Arduino
- Veículo Remoto Controlado por Android com Raspberry Pi e Motor Shield
- Find Me: Localizador Inteligente de Objetos com Arduino e Bluetooth
- Soluções de Energia Otimizadas para Projetos Arduino
- Jogo da Velha com Arduino, Matriz LED MAX7219 e Caixa de Papelão