Índice:
- Etapa 1: Instale o Raspbian e configure um endereço IP estático
- Etapa 2: instalar e configurar o movimento
- Etapa 3: Instale o Apache e configure a página de controle da Web
- Etapa 4: configurar e testar o código
- Etapa 5: Montagem
- Etapa 6: iniciando o código Python na inicialização / finalizando
Vídeo: Robô Roomba controlado por navegador com o Raspberry Pi Model 3 A +: 6 etapas (com imagens)
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:38
Visão geral
Este Instructable se concentrará em como dar a um Roomba morto um novo cérebro (Raspberry Pi), olhos (webcam) e uma maneira de controlar tudo a partir de um navegador da web.
Existem muitos hacks do Roomba que permitem o controle por meio da interface serial. Não tive a sorte de encontrar um Roomba com firmware atual ou placa-mãe funcionando. O Roomba é muito antigo ou está morto. Encontrei o Roomba que usei para este projeto em uma caixa de pechinchas de um brechó local por US $ 5. Ele ainda tinha uma bateria decente, mas uma placa-mãe morta. (Eu também encontrei a webcam na mesma loja de artigos baratos por cerca de US $ 5). Tudo o que estou usando do Roomba original são os motores, o chassi e a bateria. Você não precisa usar um Roomba para este projeto. Você pode usar diferentes motores, rodas e chassis, se quiser. Eu só gosto de transformar um pedaço de lixo em algo utilizável.
Para esta construção, usei o Raspberry Pi Model 3 A + e um controlador de motor Riorand. Estou usando o código do Robô Controlado por Navegador das Indústrias Dexter que modifiquei. A versão Dexter Industries configura o Pi como um servidor de websocket que permite controlar seu robô (plataforma brick pi) a partir de um arquivo html de cliente executando outro computador.
Eu mudei o código de uso dos pinos GPIO e adicionei uma maneira para o Pi desligar quando um botão é clicado / quando a tecla Escape é pressionada no navegador. Também fiz algumas alterações na página da web de controle para permitir a visualização de um fluxo de movimento por meio de um iframe, enquanto controlava o robô em uma única página. Eu configurei o Pi com um IP estático para hospedar o arquivo do cliente para que eu pudesse me conectar usando qualquer computador ou dispositivo na minha rede.
Estou documentando o processo aqui na esperança de mostrar como criar um robô de base simples e barato.
Peças usadas
Raspberry Pi 3 A + (Adafruit Link) $ 30
Riorand Dual Motor Driver Controller H-Bridge (Amazon Link) $ 22
Bateria 12V para motores (Amazon Link) $ 19
Bateria de 5 V para o Raspberry Pi (Amazon Link) $ 10
Cartão Micro SD de 8 GB (Amazon Link) $ 5
Jumper Wires (Amazon Link) $ 7
Roomba 500 series
. Todos juntos, pouco menos de $ 100.
Etapa 1: Instale o Raspbian e configure um endereço IP estático
Usei Raspbian Stretch Lite. Não vi necessidade do desktop, mas você pode instalar a versão desktop se preferir.
Vou assumir que você já sabe como instalar o Raspbian. Se precisar de ajuda, você pode encontrar o guia da Raspberry Pi Foundation aqui.
Depois de ter o Raspbian instalado e funcionando, faça o login e execute o programa raspi-config.
pi @ raspberrypi: ~ $ sudo raspi-config
Configure sua conexão WiFi em raspi-config
Selecione
2 opções de rede
Selecione
N2 Wi-fi
Selecione um país, digite seu SSID e digite sua senha
Configurar SSH em raspi-config
Depois de fazer a configuração inicial, usei SSH para configurar tudo sem cabeça. (Você poderia pular isso se usar um monitor. Era mais fácil para mim fazer alterações no código sem ter que parar o robô e conectá-lo a um monitor.)
De volta ao menu principal do raspi-config
Selecione
5 opções de interface
Selecione
P2 SSH
Selecione
sim
De volta ao menu principal do raspi-config, selecione
Verifique se você está conectado à sua rede
pi @ raspberrypi: ~ $ ifconfig
Você deve receber uma saída semelhante a esta. (Anote o endereço IP; você pode precisar dele mais tarde, por exemplo, 1992.168.1.18)
wlan0: flags = 4163 mtu 1500
inet 192.168.1.18 netmask 255.255.255.0 broadcast 192.168.1.255 inet6 fe80:: c74f: 42ec: 8cd3: 2fda prefixlen 64 scopeid 0x20 ether b8: 27: eb: 6a: a4: 95 txqueuelen 1000 (Ethernet) pacotes RX 44.396 bytes 5847726 (5,5 MiB) Erros RX 0 descartado 0 ultrapassa 0 quadro 0 pacotes TX 30530 bytes 39740576 (37,8 MiB) Erros TX 0 descartado 0 ultrapassado 0 portadora 0 colisões 0
Verifique se você pode acessar a Internet.
pi @ raspberrypi: ~ $ ping google.com
Você deve receber uma saída semelhante a esta.
PING google.com (216.58.194.110) 56 (84) bytes de dados.
64 bytes de dfw06s48-in-f14.1e100.net (216.58.194.110): icmp_seq = 1 ttl = 54 tempo = 18,2 ms 64 bytes de dfw06s48-in-f14.1e100.net (216.58.194.110): icmp_seq = 2 ttl = 54 tempo = 19,4 ms 64 bytes de dfw06s48-in-f14.1e100.net (216.58.194.110): icmp_seq = 3 ttl = 54 tempo = 23,6 ms 64 bytes de dfw06s48-in-f14.1e100.net (216.58.194.110)): icmp_seq = 4 ttl = 54 tempo = 30,2 ms ^ C --- estatísticas de ping do google.com --- 4 pacotes transmitidos, 4 recebidos, 0% de perda de pacote, tempo 3004 ms rtt min / avg / max / mdev = 18,209 / 22,901 / 30,267 / 4,715 ms
Configure um IP estático
Para poder se conectar de forma consistente ao seu robô usando o mesmo endereço em sua rede, você deve configurar um IP estático.
Obtenha seu endereço de rede atual, por exemplo, 192.168.1.18
Estou usando o endereço que foi atribuído automaticamente pelo DHCP quando o Pi se conectou à minha rede. Você pode alterar isso para o que quiser, desde que corresponda à sua rede e não entre em conflito com nenhum outro endereço atribuído.
Abra o dhcp.conf em um editor de texto. (Eu uso nano)
pi @ raspberrypi: ~ $ sudo nano /etc/dhcpcd.conf
Role para baixo até #Example configuração de IP estático e altere as seguintes linhas.
#interface eth0
#static ip_address = 192.168.11.13 #static routers = 192.168.11.1 #static domain_name_servers = 192.168.11.1 8.8.8.8
Mude para corresponder à sua rede e remova o # no início de cada linha.
Exemplo:
interface wlan0
static ip_address = 192.168.1.18 static routers = 192.168.1.1 static domain_name_servers = 192.168.1.1 8.8.8.8
Salvar e sair.
Reinicialize e conecte-se ao Pi via SSH
pi @ raspberrypi: ~ $ sudo reboot
Conecte-se de outro computador usando SSH. Os usuários do Windows podem usar o PuTTY ou o subsistema Windows para Linux (Windows10).
ian @ computer: ~ $ ssh [email protected]
Digite sua senha (o padrão é framboesa).
senha de [email protected]:
Você deve estar agora no prompt de comando do seu Pi.
pi @ raspberrypi: ~ $
Etapa 2: instalar e configurar o movimento
O Motion é um programa usado em muitos projetos de câmeras de segurança / webcams. O movimento tem muitos recursos. No entanto, estamos configurando para simplesmente transmitir vídeo da webcam para a porta 8081.
Teste sua webcam
Conecte sua webcam e liste os dispositivos USB conectados (pode ser necessário reiniciar após a conexão).
pi @ raspberrypi: ~ $ lsusb
Você deve obter uma saída semelhante a esta. Observe o Logitech C210.
Dispositivo 001 do barramento 002: ID 046d: 0819 Logitech, Inc. Webcam C210
Barramento 001 Dispositivo 001: ID 1d6b: 0002 hub raiz Linux Foundation 2.0
Se sua câmera não aparecer, pode não ser compatível ou você pode precisar instalar drivers adicionais.
Instale o Motion
Pacotes de atualização.
pi @ raspberrypi: ~ $ sudo apt-get update
Instale o Motion.
pi @ raspberrypi: ~ $ sudo apt-get install motion -y
Depois de instalar o Motion, edite o arquivo de configuração.
pi @ raspberrypi: ~ $ sudo nano /etc/motion/motion.conf
Altere as seguintes linhas para corresponder abaixo.
daemon em
largura 640 altura 480 taxa de quadros 100 output_pictures off ffmpeg_output_movies off text_right stream_port 8081 stream_quality 100 stream_localhost off webcontrol_localhost off
Inicie o Motion Daemon na inicialização
Abra o arquivo / etc / default / motion.
pi @ raspberrypi: ~ $ sudo nano / etc / default / motion
Mudar para
start_motion_daemon = yes
Salve o arquivo e saia
Reinício
pi @ raspberrypi: ~ $ sudo reboot
Após a reinicialização do Pi, abra o navegador e verifique se há streaming de vídeo no navegador na porta 8081
Exemplo:
192.168.1.18:8081
Solução de problemas do Motion Daemon
Tive problemas para iniciar o daemon de movimento na inicialização enquanto tentava diferentes opções no arquivo motion.conf.
Se você iniciar o motion antes do daemon de movimento no Raspian Stretch, provavelmente terá problemas para iniciá-lo na inicialização mais tarde. Executar "sudo motion" sem configurar o daemon para fazê-lo cria primeiro o diretório / var / log / motion sem conceder permissão de gravação ao usuário.
Etapa 3: Instale o Apache e configure a página de controle da Web
Apache é o servidor da web para a página da web de controle do robô. Vamos substituir o arquivo index.html padrão do Apache por um arquivo baixado do github. Você também alterará algumas linhas de código para exibir o fluxo de vídeo de movimento e designar para onde enviar os comandos para controlar o robô.
Instale Apache e Git
pi @ raspberrypi: ~ $ sudo apt-get install apache2 git -y
Assim que o apache e o git estiverem instalados, baixe os arquivos.
pi @ raspberrypi: ~ $ git clone
Abra o diretório roombarobot.
pi @ raspberrypi: ~ $ cd roombarobot
Substitua o arquivo index.html na pasta / var / www / html pelo arquivo index.html no / home / pi / roombarobot
pi @ raspberrypi: ~ / roombarobot $ sudo cp index.html / var / www / html
Edite o arquivo index.html
Abra o arquivo index.html com um editor de texto.
pi @ raspberrypi: ~ / roombarobot $ sudo nano /var/www/html/index.html
Localize essas duas linhas
var host = "ws: // SEU ENDEREÇO: 9093 / ws";
Altere "SEUIPADDRESS" para o endereço IP estático que você configurou na Etapa 1 e salve o arquivo.
Exemplo:
var host = "ws: //192.168.1.18: 9093 / ws";
Em outro computador, abra um navegador e digite o endereço IP do seu Pi. Você deve ver a página da web de controle com uma caixa à esquerda, transmitindo vídeo de sua webcam e os botões de controle da web à direita.
Etapa 4: configurar e testar o código
Este código foi escrito em python e requer a biblioteca tornado. O código usa a biblioteca para configurar um servidor para ouvir comandos da página da web de controle por meio de websockets na porta 9093.
Instale o PIP e a Biblioteca Tornado
Instale o pip
pi @ raspberrypi: ~ $ sudo apt-get install python-pip
Instalar biblioteca de tornado
pi @ raspberrypi: ~ $ sudo pip install tornado
Inicie o programa Roombabot e teste a conexão
Inicie o programa roombabot.py
pi @ raspberrypi: ~ $ sudo python /home/pi/roombarobot/roombabot.py
Uma vez executado, você deve ver "Pronto" no terminal. Abra a página da web de controle em um navegador e clique em conectar. Em seguida, clique em qualquer um dos botões direcionais na página. Você também pode usar as setas do teclado.
Você deve ver uma saída no terminal semelhante a esta.
Preparar
conexão aberta … conexão aberta … recebida: u 8 Conexão em execução para a frente aberta … recebida: l 6 Conexão para a esquerda aberta … recebida: d 2 Conexão reversa em execução aberta … recebida: r 4 Girada para a direita
Pressione ctrl + c para parar o programa.
Quando terminar de testar, desligue o Pi.
pi @ raspberrypi: ~ $ sudo poweroff
Insetos
Percebi um problema com o botão de desligamento na página da web de controle. Às vezes, o botão de desligamento não faz nada quando é clicado ou tocado. Não consegui descobrir o que está causando isso, mas há uma solução alternativa. Se você deseja desligar o robô e o botão de desligamento não funcionar, recarregue a página, clique / toque no botão conectar e, em seguida, clique / toque no botão desligar. Ele deve desligar.
Etapa 5: Montagem
Como mencionado antes, você não precisa usar um Roomba para este projeto. Qualquer coisa com dois motores, duas rodas e um quadro funcionaria. Desmontei o Roomba e removi tudo, exceto os módulos de roda e a bateria.
Módulos de roda
As rodas e motores do Roomba são alojados juntos em um módulo removível. Cada módulo possui uma caixa externa azul contendo o motor, caixa de engrenagens, roda, mola de suspensão e placa de interface.
Placa de Interface
Cada placa de interface possui seis fios conectados a ela. Existem dois fios (vermelho [+], preto [-]) que giram o motor, um fio de dados para um sensor de efeito Hall, um fio para a chave de queda da roda, um fio de 5 V e um fio GND para alimentar o sensor. Você terá que desmontar o módulo para acessar a placa de interface. Retirei tudo do motor e soldei novos fios [+] e [-] no motor (veja as fotos). Depende de você se deseja preservar os sensores ou não.
Suspension Springs
Depois de remover a porção de vácuo, o peso do Roomba é jogado fora. Se você não remover as molas, o Roomba ficará inclinado. Eu os removi originalmente, mas depois os adicionei de volta quando descobri que ele estava lutando para rolar sobre o carpete. Colocar a mola de volta corrigiu o problema.
Conectando os motores ao controlador do motor
Os motores estão afastados um do outro. Isso significa que, para conduzir o Roomba para a frente, um motor terá que girar para frente enquanto o outro gira para trás. Eu não pensei muito sobre isso até depois de conectar tudo. Acabei escrevendo o código em torno de como inicialmente conectei os motores. Este foi um acidente feliz porque sempre que o Raspberry Pi é ligado / desligado, há saída de voltagem para os pinos GPIO. Do jeito que eu tenho as coisas conectadas, o Roomba gira até que o Raspberry Pi seja inicializado (cerca de trinta segundos) e gira quando é desligado até que a energia seja removida. Se conectado de forma diferente, ele iria potencialmente rolar para frente / para trás, o que seria irritante. Pretendo consertar isso com um simples interruptor para o controlador do motor.
Conectando os motores e a bateria ao controlador do motor
Alimentação- - - - - - - - - - - - - - - - - - - 12 V [+] - - - - - - - - - - - - - - Bateria Roomba [+]
Motor 2- - - - - - - - - - - - - - - - - Preto- - - - - - - - - - - - - - -Motor esquerdo [-] Motor 2- - - - - - - - - - - - - - - - Vermelho- - - - - - - - - - - - - - - Motor esquerdo [+] Motor 1- - - - - - - - - - - - - - - - Preto- - - - - - - - - - - - - - -Motor direito [-] Motor 1- - - - - - - - - - - - - - - - Vermelho- - - - - - - - - - - - - - - -Motor direito [+] GND- - - - - - - - - - - - - - - - - - 12V [-] - - - - - - - - - - - - - - - Bateria Roomba [-]
Conectando o controlador do motor ao Raspberry Pi
Pinos do controlador do motor Cor dos fios (ver fotos) Pinos Raspberry Pi
GND- - - - - - - - - - - - - - - - - - - Preto- - - - - - - - - - - - - - -GND PWM 2- - - - - - - - - - - - - - - - - Azul - - - - - - - - - - - - - - - -GPIO 18 DIR 2- - - - - - - - - - - - - - - - - Verde- - - - - - - - - - - - - -GPIO 23 PWM 1- - - - - - - - - - - - - - - - - Amarelo - - - - - - - - - - - - - - -GPIO 24 DIR 1- - - - - - - - - - - - - - - - Laranja - - - - - - - - - - - - - -GPIO 25 5V - - - - - - - - - - - - - - - - - - - Vermelho- - - - - - - - - - - - - - - -5V
Montagem da Eletrônica
Não há muita coisa envolvida em colocar tudo junto. Eu desmontei o roomba de seu chassi. Com a tampa removida, você pode facilmente cortar os espaçadores de plástico existentes e fazer orifícios para montar os componentes eletrônicos. Existem portas para a passagem de cabos dos motores. Se você estiver usando a bateria original do Roomba, já existe um recorte para acesso aos terminais da bateria.
Baterias
Usei baterias separadas para o Raspberry Pi e o controlador do motor. A bateria do Pi é apenas uma bateria de 5V usada para impulsionar telefones celulares. Para o controlador do motor, usei a bateria original do Roomba que veio com ele. Os terminais da bateria não estão etiquetados, por isso é melhor verificar a tensão com um voltímetro antes de conectá-la ao controlador do motor. Para conectar os fios à bateria do Roomba, usei quatro ímãs de neodímio (veja as fotos). Soldei dois dos ímãs aos fios e os outros dois grudei aos terminais da bateria. A soldagem desmagnetiza os ímãs. No entanto, o revestimento externo ainda pode se prender aos ímãs nos terminais e conduzir eletricidade. Isso torna a conexão e desconexão da bateria muito fácil.
Testando
Depois de juntar tudo, verifique se tudo está conectado corretamente, apóie seu robô em algo (para que não role) e ligue-o.
Faça login e inicie o programa roombabot.py
pi @ raspberrypi: ~ $ sudo python /home/pi/roombarobot/roombabot.py
Vá para a página de controle da web e teste. Se tudo estiver conectado corretamente, as rodas devem girar na direção correspondente quando os botões são clicados / as teclas de seta são pressionadas (não se esqueça de clicar em conectar).
Etapa 6: iniciando o código Python na inicialização / finalizando
A última coisa que precisamos fazer é dizer ao Raspbian para iniciar o programa python na inicialização. Para fazer isso, vamos fazer um script e agendá-lo para ser executado na reinicialização usando o crontab.
Crie o Script
Crie um novo arquivo de script chamado startrobot.sh no diretório do usuário pi
pi @ raspberrypi: ~ $ sudo nano startrobot.sh
Copie as seguintes linhas para o arquivo
#! / bin / sh
# startrobot.sh cd / cd / home / pi / roombarobot sudo python roombabot.py cd /
Salve o arquivo e saia
Torne o arquivo startrobot.sh executável
pi @ raspberrypi: ~ $ sudo chmod 755 startrobot.sh
Teste-o (pressione ctrl + c para parar)
pi @ raspberrypi: ~ $ sh startrobot.sh
Edite o arquivo crontab
pi @ raspberrypi: ~ $ sudo crontab -e
Adicione a seguinte linha ao final do arquivo
# m h dom mon dow comando
@reboot sh /home/pi/startrobot.sh
Salvar e sair
O programa roombabot.py agora deve iniciar quando o Pi for reiniciado ou desligado e ligado novamente.
Terminando
Neste ponto, você deve ter um robô funcional que pode controlar usando o navegador de qualquer dispositivo em sua rede. Eu levei isso um pouco mais longe desde a construção original e configurei uma VPN para poder acessar o robô quando estou fora de casa. Pretendo fazer algumas mudanças adicionais no futuro. Eu pretendo torná-lo autônomo e possivelmente seguir o movimento enquanto ainda posso assumir os controles quando eu quiser.
Recomendado:
Construir um robô de telepresença controlado por wi-fi: 11 etapas (com imagens)
Construir um robô de telepresença controlado por wi-fi: Este projeto é sobre a construção de um robô que pode interagir com um ambiente remoto e ser controlado de qualquer parte do mundo usando wi-fi. Este é o meu projeto de engenharia do último ano e aprendi muito sobre eletrônica, IoT e programação, embora eu
Robô Arduino com distância, direção e grau de rotação (leste, oeste, norte, sul) controlado por voz usando o módulo Bluetooth e movimento autônomo do robô: 6 etapas
Robô Arduino com distância, direção e grau de rotação (leste, oeste, norte, sul) controlado por voz usando o módulo Bluetooth e movimento autônomo do robô .: Este Instructable explica como fazer o robô Arduino que pode ser movido na direção necessária (para frente, para trás , Esquerda, Direita, Leste, Oeste, Norte, Sul) Distância necessária em centímetros usando o comando de voz. O robô também pode ser movido de forma autônoma
Robô controlado por Wi-Fi usando Wemos D1 ESP8266, Arduino IDE e aplicativo Blynk: 11 etapas (com imagens)
Robô controlado por Wi-Fi usando Wemos D1 ESP8266, Arduino IDE e aplicativo Blynk: Neste tutorial, mostro como fazer um tanque robótico controlado por Wi-Fi controlado de um smartphone usando o aplicativo Blynk. Neste projeto uma placa ESP8266 Wemos D1 foi usada, mas outros modelos de placa também podem ser usados (NodeMCU, Firebeetle, etc.), e o pr
Gesture Hawk: robô controlado por gestos manuais usando interface baseada em processamento de imagens: 13 etapas (com imagens)
Gesture Hawk: Robô controlado por gestos manuais usando uma interface baseada em processamento de imagem: Gesture Hawk foi apresentado no TechEvince 4.0 como uma interface homem-máquina baseada em processamento de imagem simples. Sua utilidade reside no fato de que nenhum sensor adicional ou vestível, exceto uma luva, é necessário para controlar o carro robótico que funciona em diferentes
Robô de streaming de vídeo controlado por Wi-Fi Raspberry Pi: 8 etapas (com imagens)
Robô de streaming de vídeo controlado por wi-fi Raspberry Pi: Já pensou em construir um robô bacana com uma câmera? Bem, você veio ao lugar certo, vou mostrar-lhe passo a passo como construir este robô. Com isso, você pode ir à caça de fantasmas à noite, controlando e vendo o feed de vídeo em seu