Índice:

Robô Roomba controlado por navegador com o Raspberry Pi Model 3 A +: 6 etapas (com imagens)
Robô Roomba controlado por navegador com o Raspberry Pi Model 3 A +: 6 etapas (com imagens)

Vídeo: Robô Roomba controlado por navegador com o Raspberry Pi Model 3 A +: 6 etapas (com imagens)

Vídeo: Robô Roomba controlado por navegador com o Raspberry Pi Model 3 A +: 6 etapas (com imagens)
Vídeo: DIY Radar With Ultrasonic Sensor And Chat-GPT Generated Arduino Code | Coders Cafe 2024, Novembro
Anonim
Robô Roomba controlado por navegador com o Raspberry Pi Model 3 A +
Robô Roomba controlado por navegador com o Raspberry Pi Model 3 A +
Robô Roomba controlado por navegador com o Raspberry Pi Model 3 A +
Robô Roomba controlado por navegador com o Raspberry Pi Model 3 A +

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

Instale o Raspbian e configure um endereço IP estático
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

Instalar e configurar o movimento
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

Instale o Apache e configure a página de controle da Web
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

Configurar e testar o código
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

conjunto
conjunto
conjunto
conjunto
conjunto
conjunto
conjunto
conjunto

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

Iniciando o código Python na inicialização / finalizando
Iniciando o código Python na inicialização / finalizando
Iniciando o código Python na inicialização / finalizando
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: