Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Robô de vigilância Roomberry:Roomba + Pi Zero + Câmera

Roomberry é um robô de vigilância baseado no Roomba usando um Raspberry Pi Zero W e um módulo de câmera. Anos atrás, comecei a fazer alguns testes para controlar um Roomba remotamente usando um Arduino One com um módulo RN-VX WiFly.


No mês passado decidi revitalizar a ideia, mas com um novo objetivo:transformar o Roomba em um robô de vigilância com a capacidade de tirar fotos e vídeos. A primeira ideia era continuar usando o Arduino como microcontrolador empregando um módulo Arducam para captura de fotos. No entanto, descobri rapidamente que a capacidade de processamento de imagem do Arduino era muito limitada para meus interesses. A segunda opção foi mudar a plataforma e usar um Raspberry Pi Zero W com um módulo de câmera. Esta alternativa significou alguns desafios, principalmente no que diz respeito à alimentação, mas também ofereceu mais possibilidades. Neste post, explicarei como construir o Roomberry, um robô de vigilância baseado no Roomba usando um Raspberry Pi Zero W e um módulo de câmera.

Uma demonstração dos recursos do Roomberry e da interface da web desenvolvido para interagir com ele pode ser visto no vídeo a seguir.


iRobot Roomba

iRobot’s Roomba oferece uma Interface aberta (OI) para interagir com o robô através de um conector mini DIN. O OI é uma interface de software projetada para o criador 2 do Roomba (uma adaptação da série 600). No entanto, também é totalmente compatível com as séries 500 e 700. No entanto, existem alguns bugs dependendo da plataforma e da versão de firmware usada. A interface do software permite que você manipule o comportamento do Roomba e leia seus sensores. Uma descrição completa de seus recursos pode ser encontrada neste documento.

Conector Mini DIN



O mini conector DIN do Roomba está localizado no lado direito frontal do Roomba serie 700 e tem 7 pinos. Sua posição varia ligeiramente na série 600, cuja localização é na parte traseira direita do Roomba, sob uma proteção de plástico removível. Mini DIN 7 os conectores machos são complicados de comprar, no entanto, o mais comum mini conector macho DIN de 8 pinos também é compatível.

Para garantir uma conexão / desconexão suave e confiável da porta, soldei um cabo de 5 pinos (projetado para tiras de LED) com um conector fêmea a um conector mini DIN de 8 pinos macho usando os pinos 1-2 (potência), 6-7 (terra), 3 (RxD), 4 (TxD) e 5 (BRC). No entanto, como comentado posteriormente, a conexão de energia / aterramento finalmente não foi necessária. O cabo resultante pode ser visto nas fotos a seguir.


Porta serial do Roomba

Para usar o OI, os comandos deve ser enviado por meio de uma comunicação serial bidirecional criado em mini DIN 7 pinos 3 (RxD) e 4 (TxD). Esta porta UART funciona em níveis TTL (0 - 5 V). Essa tensão é perfeitamente adequada para microcontroladores que usam lógica de 5 V, como a maioria das placas Arduino. No entanto, não é bom para aqueles com níveis lógicos de voltagem mais baixos (como o Raspberry Pi).

Em teoria, o pino 3 (RxD) terá 3,3 V como o nível lógico alto. Mas o Roomba produzirá 5 V em seu pino 4 (TxD), o que pode danificar o Raspberry Pi Zero. Para manter o hardware seguro, um deslocador de nível lógico deve ser usado. A maneira mais simples de fazer isso é com um divisor de resistor, como já implementado em meu projeto anterior Calduino, mas isso pode não funcionar em altas velocidades (a porta serial do Roomba funciona a 115200 bauds).

Em vez disso, um deslocador de nível ativo é preferível. Se você quiser construir seu próprio circuito, use o transistor de efeito de campo AN10441 conforme explicado aqui. Uma opção muito mais fácil é usar um dos conversores de nível lógico bidirecional existentes, como este da Adafruit. Este dispositivo pode gerenciar até 4 sinais e reduzi-los com segurança de 5V para 3,3V. Ao mesmo tempo, ele aumenta os sinais de 3,3 V para 5 V.

Alimentando Raspberry Pi do Roomba

Existem algumas alternativas para fornecer fonte de alimentação por meio da bateria do Roomba:

Alimentando a partir do Mini DIN 7

O mini DIN 7 fornece uma conexão direta não regulamentada nos pinos 1/2 (Vcc) - 6/7 (Gnd) à bateria do Roomba. A conexão é limitada a 200 mA através de um fusível PTC reajustável . Oferece uma tensão entre 20,5 e 10 V, limitada a 0,2 A com uma potência de 2 W. O consumo contínuo desses dois pinos juntos não deve exceder 200 mA. Desenhar um pico maior que 500 mA reinicializará o fusível.

Um Raspberry Pi Zero W deve ser capaz de funcionar com este suprimento. A Raspberry Pi Foundation avalia o consumo de corrente ativa típico de placa nua em 150 mA. Este benchmark o coloca entre 120 mA em inativo status e 180 mA under stress (reproduzindo vídeo FullHD, por exemplo). No entanto, aqui o consumo extra da câmera não é considerado. Pelas minhas medições, a câmera (eu uso esta, com o mesmo sensor da câmera Pi oficial da versão 1) aumenta o consumo de energia para mais de 300 mA, com picos de 450 mA. Durante meu teste, o fusível disparou várias vezes durante a gravação de vídeos.

Como conclusão, o termofusível existente descarta o uso desta conexão para alimentar o Raspberry Pi Zero W. Não consegui descobrir se é possível e seguro remover o fusível da placa sem danificar outros componentes.

Alimentando a partir de um banco de energia externo

Existem algumas alternativas para evitar esse limite de fusível. Por outro lado, a solução mais fácil seria usar um banco de potência para fornecer alimentação externa ao Raspberry Pi Zero. No entanto, será necessário que o usuário o carregue periodicamente. Outra opção seria projetar uma conexão serial entre a fonte de alimentação mini DIN 7 e o banco de energia. Com alguns componentes eletrônicos, deve ser possível usar a bateria do Roomba para carregar o banco de energia. Para simplificar meu projeto, decidi evitar o uso de quaisquer fontes adicionais de energia.

Alimentando a bateria

Eu finalmente decidi ignorar o fusível construindo uma conexão direta para o pacote de bateria . A contrapartida desta opção é que você terá que desmontar parcialmente o robô . No Roomba série 600, há dois grandes pads conectados diretamente à bateria abaixo do botão de dock. Na série Roomba 700/800, você terá que desmontar mais alguns componentes. Dê uma olhada no vídeo a seguir até o minuto 6 para ver, passo a passo, como acessar a placa-mãe do seu robô . Feito isso, basta soldar alguns cabos na almofada da bateria, conforme mostrado nas próximas fotos.



Esses cabos fornecem uma conexão direta com a bateria não limitada por qualquer fusível. Eles fornecem entre 20,5 e 10V, dependendo do nível de carga da bateria. No entanto, o Raspberry Pi Zero W precisa de uma fonte de alimentação regulada de 5 V. Para reduzir a tensão, uma redução é usado. Existem muitas opções para fazer isso, desde o uso de um regulador linear barato (como o 7805 TO-220) com alguns capacitores para instalar um regulador de comutação .

Devido à sua maior eficiência , e considerando que estará sempre conectado, aconselho usar / comprar um de boa qualidade (evite imitações da China) regulador de comutação abaixador . Eu usei o regulador de buck Pololu D24V5F5 que pega uma entrada de até 36 V e reduz para 5 V para uma corrente de saída máxima de 500 mA. Sua eficiência é avaliada entre 85% e 90% e tem um dropout muito baixo. Você também pode usar um UBEC (Circuito de Eliminação de Bateria Universal), como o comumente usado no mundo RC. Coloquei meu regulador de tensão em um espaço livre situado no centro - lado direito do robô.


As conexões foram devidamente protegidas com termoencolhível e o módulo D24V5F5 foi coberto com plástico isolante (eu não tirei nenhuma foto disso). Soldei a saída do módulo a um cabo micro-USB, o que me permite conectá-lo diretamente à entrada de alimentação Raspberry Pi Zero W.


Usando uma ferramenta de perfuração rotativa e uma lixa, criei um pequeno entalhe na tampa superior do Roomba para permitir uma saída limpa do cabo micro USB, como pode ser visto em a imagem a seguir.

Modos OI do Roomba

O Roomba OI tem quatro modos de operação:Desligado, Passivo, Seguro e Completo.


Modo desligado :Após a troca da bateria ou quando ligado pela primeira vez, o OI está no modo desligado. Nesse status, o Roomba escuta a porta na taxa de transmissão padrão (115200), aguardando um comando de início. Os comandos reset e stop podem ser enviados a qualquer momento e colocarão o OI no modo off.

Modo Passivo: Assim que um comando Iniciar é enviado, o Roomba entra no modo passivo . Nesse status, você pode solicitar e receber dados do sensor usando qualquer um dos comandos do sensor. No entanto, você não pode alterar os parâmetros de comando atuais para os atuadores (motores, alto-falante, luzes, drivers de baixo, saídas digitais). O Roomba entrará no modo passivo também se um dos comandos do modo de limpeza (Spot, Clean, Seek Dock, etc.) for enviado.

Enquanto estiver no modo passivo, o Roomba entrará no modo desativado após cinco minutos de inatividade para economizar energia e preservar a bateria. De acordo com a documentação do iRobot, o sono pode ser desativado apenas pressionando o pino BRC para baixo periodicamente antes que esses cinco minutos expirem. Cada pulso deve zerar este contador de cinco minutos. Nos testes que realizei (com um Roomba 780), puxar o BRC para baixo apenas acordará o robô, mas não o impedirá de ir para o modo de economia de energia. O robô emitirá um bipe ao acordar (se não estiver sendo carregado na dock station).

Modo de segurança :O Roomba entrará no modo de segurança se o comando Safe for enviado. O modo de segurança oferece controle total do robô e desliga todos os motores e LEDs. No entanto, se uma condição relacionada à segurança não for atendida, o robô mudará automaticamente para o modo passivo . Essas condições de segurança são:detecção de um precipício durante o avanço, queda da roda e conexão do carregador. Neste modo, o Roomba não carrega (embora esteja na base) e não economiza energia ao alternar para o modo desligado após 5 minutos de inatividade. Este ponto é muito importante:você pode acabar descarregando a bateria do robô e danificando-a se não alternar para o modo passivo ou desligado.

Modo completo :Quando você envia um comando Full para a OI, o Roomba entra no modo Full . O robô se comportará exatamente como no modo de segurança, mas não levará em consideração as condições relacionadas à segurança comentadas anteriormente, portanto, esteja ciente dos riscos!

Precauções com a bateria :Conforme comentado, no modo Passivo, o Roomba entrará em hibernação após 5 minutos de inatividade para preservar a energia da bateria. Nos modos Seguro e Completo, o Roomba nunca hibernará e, se for deixado nesse estado por um longo período de tempo, descarregará profundamente a bateria, mesmo se conectado ao carregador. O carregador alimentará o Roomba em todos os modos, mas não carregará a bateria no modo Seguro ou Completo. É importante retornar o Roomba ao modo Passivo ou Desligado assim que um trabalho for concluído e / ou quando o nível da bateria estiver baixo para protegê-lo.

Raspberry Pi Zero W

O Raspberry Pi Zero W é uma versão atualizada do Raspberry Pi Zero com LAN sem fio e Bluetooth . O modelo inclui uma CPU de núcleo único de 1 GHz, 512 MB de RAM, mini-HDMI, uma porta micro-USB OTG, micro-USB para alimentação, conector de 40 pinos, vídeo composto, redefinir cabeçalhos, um conector de câmera, bem como os novos recursos sem fio. Ele usa o chip sem fio Cypress CYW43438 que oferece suporte a 802.11b / g / n Wi-Fi (apenas 2,4 GHz) e Bluetooth 4.0 (mesmo chip do Raspberry Pi 3 Modelo B). Comprei-o na Pimoroni com cabeçalhos (não soldados) e adaptadores por 16 €.

Câmera

O conector da câmera Raspberry Pi Zero W CSI é menor do que o Pi 3. Se você já tem uma câmera, terá que comprar um adaptador para usá-la. Caso contrário, eu recomendaria comprar este módulo de câmera, que incorpora um sensor de 5MP (igual à câmera Pi oficial da versão 1) e pode gravar vídeo em 1080p. Custa 18 €. Eu escolhi a câmera grande angular com corte IR. Eu sei que não poderei ver nada à noite, mas o uso de LEDs IR aumentará o consumo de energia, que eu queria manter baixo. Você sempre pode usar as luzes Philips HUE para controlar remotamente as luzes de sua casa.

Energizando Raspberry Pi Zero W

Há algumas considerações a serem feitas em relação à fonte de alimentação do Pi Zero. Em primeiro lugar, e ao contrário dos modelos maiores, o Pi Zero não tem qualquer regulamento ou fusível para protegê-lo de sobretensão ou picos de corrente. Isso significa que você deve fornecer uma fonte estável de energia com 5 V. A fonte de alimentação pode ser conectada ao micro USB do lado direito (Pwr In) ou ao pino de 5 V no conector GPIO. Ambos são da mesma linha. Certifique-se de que, se uma tensão incorreta for aplicada ou um pico de corrente ocorrer na linha, você provavelmente danificará seu Raspberry Pi permanentemente .

Como já foi comentado, picos de consumo de 400 mA com a câmera conectada foram medidos durante a execução de testes de estresse. A Raspberry Pi Foundation recomenda uma fonte de alimentação de pelo menos 1,2 A. No entanto, os 0,5 A fornecidos pelo regulador de buck têm sido suficientes para mim. Até agora não encontrei nenhum problema relacionado com a fonte de alimentação.

Redução do consumo de energia

Considerando que o Raspberry funcionará com a bateria do Roomba, será interessante reduzir o consumo de energia tanto quanto possível. Por exemplo, sabendo que o Pi Zero funcionará sem cabeça (sem um monitor conectado) e só será acessado por SSH, não há necessidade de ligar o circuito do monitor. Desativar a porta HDMI pode economizar até 25 mA. Para fazer isso, basta executar / usr / bin / tvservice -o (ou com -p para reativar). Coloquei um pequeno script em /etc/rc.local que verifica se o cabo HDMI está conectado ou não e desativa a porta HDMI de acordo.

# Obtenha o tipo de saída de vídeo atual e remova os bits sem importância
video =“$ (tvservice -s | sed“ s /^.*\[\([^] * \). * $ / \ 1 / ”)“

if [“$ video“! =“HDMI”]; em seguida,
printf “HDMI não detectado. Desligando. \ N ”
tvservice -off> / dev / null
else
printf“ HDMI detectado. \ N ”
fi

Outra forma de reduzir o consumo de energia é desabilitando os LEDs do Pi. O Raspberry Pi Zero tem apenas um, o LED de atividade, que pisca toda vez que o cartão SD é acessado. Seu consumo é de aproximadamente 5 mA. Para desabilitá-lo totalmente, adicione estas linhas em seu arquivo /etc/rc.local:

# Defina o acionador de LED Pi Zero ACT para ‘nenhum’
echo nenhum | sudo tee / sys / class / leds / led0 / trigger

# Desligue o LED Pi Zero ACT
echo 1 | sudo tee / sys / class / leds / led0 / brilho

Você também pode fazer isso editando o arquivo /etc/config.txt:

# Desative o LED ACT no Pi Zero

dtparam =act_led_trigger =nenhum
dtparam =act_led_activelow =on

Não tenho certeza se isso se traduzirá em uma redução real do consumo, mas como não será usado, você pode desativar o módulo bluetooth do Pi Zero adicionando a seguinte linha a / etc / config .TXT:

# Desative o bluetooth no Pi Zero

dtoverlay =pi3-disable-bt

Finalmente, tente reduzir o software instalado e em execução no Pi Zero. Por exemplo, use Raspbian Lite em vez da versão para desktop e não instale software extra, a menos que seja realmente necessário. Quanto mais processos rodando em sua máquina, mais consumo ela terá.

Outras considerações

Construindo Roomberry

Depois que todas as peças foram descritas, vamos ver como construir e executar o Roomberry, sua interface do Raspberry com o Roomba.

Meu objetivo era encapsular os componentes (Raspberry Pi Zero, módulo de câmera, conversor de nível lógico e botão switch) em uma caixa estável com fácil acesso a todas as portas e cartão SD. A única opção que encontrei, excluindo imprimir meu próprio design 3D, foi esta. Este gabinete atende a todos os requisitos e me permite conectar um HAT (Hardware Attached on Top), uma placa complementar com alguns componentes eletrônicos necessários. A imagem a seguir mostra o esquema PCB. Observe que os pinos de execução estão localizados no Pi Zero e não no HAT. Para construí-lo, um pedaço de uma placa PCB de 12 x 10 pinos será suficiente. Para cortar o PCB, usei uma ferramenta rotativa.


O conversor de nível lógico precisará de alta e baixa tensão, que podem ser obtidas no GPIO (o Pi Zero inclui um conversor redutor de 5 para 3,3 V denominado PAM2306AYPKE). Coloquei o botão de mudança no meio do Pi Zero, pois era uma extensão do HAT. Ao fazer isso, a haste do botão destaca-se da caixa para que possa ser pressionado externamente. Você terá que fazer alguns furos na caixa:um para o botão de vapor e outro (e maior) para a câmera. Além disso, tive que lixar cuidadosamente o espaço da caixa projetado para o conector CSI para abrir espaço para uma volta de 180 graus do cabo. As fotos a seguir mostram os resultados:


Configurando Raspbian Stretch

Antes de conectar o Roomberry ao conector mini DIN 7 do Roomba, algumas etapas de configuração devem ser executadas. Supondo que o Raspberry Pi Zero W esteja executando a última versão do Raspbian e já esteja configurado sem cabeça.

Conecte a fonte de alimentação micro USB construído anteriormente para o Pi Zero. Após alguns segundos, o sistema deve estar instalado e funcionando. Abra uma conexão SSH com seu pi Zero.

Por padrão, a porta serial do Pi é configurada para ser usada para entrada / saída do console . Para se comunicar com o Roomba por meio dessa porta, o login do console serial precisa ser desativado. Você pode fazer isso com o menu 5 de configuração do raspi - Opções de interface e P6 - Serial. Resposta Não à pergunta “Você gostaria de fazer login no shell para ser acessível via serial?” e Sim para “Deseja que o hardware da porta serial seja habilitado?”. Não reinicie o sistema ainda. Como alternativa, você também pode comentar a definição do console e adicionar ao final do arquivo / boot / config a seguinte linha:

# Encontre e comente a definição do console
# console =serial0,115200
...
enable_uart =1

Se você ainda não fez isso, ative o módulo da câmera . Novamente, você pode fazer isso através do raspi-config escolhendo o menu 5 e a opção P1. Por outro lado, você também pode editar o arquivo / boot / config e incluir essas alterações (desativar o LED da câmera não é necessário, mas recomendado para economizar energia):

start_x =1
gpu_mem =128
disable_camera_led =1

Não tenho certeza de qual é a quantidade ideal de RAM para atribuir como gpu_memory quando o módulo da câmera está sendo usado. Até agora, não encontrei nenhum erro de “Sem recursos” ao operar a câmera, então presumo que 128 Mb seja uma boa escolha.

Desative todas as trocas e o diretório mount / tmp no disco RAM com 50 megabytes de espaço. Este local será usado para armazenar arquivos efêmeros, como instantâneos de câmera e arquivos de status do Roomba. Aumente o tempo de confirmação em etc / fstab para 30 minutos e inclua a opção noatime na partição SD. Encontre os comandos neste post.

Agora é hora de testar se tudo está funcionando corretamente. Abaixe seu Pi e conecte a porta serial ao Roomba. Coloque o Roomba na base de carregamento . Inicialize o sistema e verifique se tudo está funcionando conforme o esperado (e se o robô não está fazendo nada de estranho).

Teste de leitura da porta serial :Usei o minicom para ler os dados enviados pelo Roomba. Para instalar basta digitar:

sudo apt-get minicom

Conecte-se à porta serial do Roomba fazendo:

minicom –b 115200 -o -D / dev / serial0

Se o seu Roomba estiver carregando, você deverá ver um texto semelhante à imagem a seguir relatando o estado de carga do Roomba a cada segundo. Pressione CTRL + A e X para sair do minicom.


Leia mais detalhes:Roomberry Surveillance Robot:Roomba + Pi Zero + Camera

Processo de manufatura

  1. Como fazer uma plataforma de robô Arduino + Raspberry Pi
  2. BrickPi Bookreader
  3. Robô da caixa de CD do Raspberry Pi
  4. Robô de alarme rotativo
  5. Crie um Minecraft Creeper Robot
  6. Arquimedes:A coruja robô AI
  7. Robô de vigilância Roomberry:Roomba + Pi Zero + Câmera
  8. Abra o Robô CV
  9. Robô ROS
  10. Robô Pi Simples