Índice:

Construa seu robô de streaming de vídeo controlado pela Internet com Arduino e Raspberry Pi: 15 etapas (com imagens)
Construa seu robô de streaming de vídeo controlado pela Internet com Arduino e Raspberry Pi: 15 etapas (com imagens)

Vídeo: Construa seu robô de streaming de vídeo controlado pela Internet com Arduino e Raspberry Pi: 15 etapas (com imagens)

Vídeo: Construa seu robô de streaming de vídeo controlado pela Internet com Arduino e Raspberry Pi: 15 etapas (com imagens)
Vídeo: Melhores Cursos de ARDUINO ONLINE (Atualizado 2022) 2024, Julho
Anonim
Construa seu robô de streaming de vídeo controlado pela Internet com Arduino e Raspberry Pi
Construa seu robô de streaming de vídeo controlado pela Internet com Arduino e Raspberry Pi
Construa seu robô de streaming de vídeo controlado pela Internet com Arduino e Raspberry Pi
Construa seu robô de streaming de vídeo controlado pela Internet com Arduino e Raspberry Pi
Construa seu robô de streaming de vídeo controlado pela Internet com Arduino e Raspberry Pi
Construa seu robô de streaming de vídeo controlado pela Internet com Arduino e Raspberry Pi

Sou @RedPhantom (também conhecido como LiquidCrystalDisplay / Itay), um estudante de 14 anos de Israel que estuda na Max Shein Junior High School para Ciências Avançadas e Matemática. Estou fazendo este projeto para que todos possam aprender e compartilhar!

Você pode ter pensado: hmm… Eu sou um geek… E meus filhos querem que eu faça um projeto com eles… Ele queria construir um robô. Ela queria vesti-lo como um cachorrinho. É um bom projeto de fim de semana!

O Raspberry Pi é perfeito para qualquer uso: hoje iremos explicitar as habilidades deste micro-computador para fazer um robô. Este robô pode:

  • Dirija e seja controlado via LAN (WiFi) usando qualquer computador conectado à mesma rede WiFi do Raspberry Pi.
  • Transmita vídeo ao vivo usando o Módulo de Câmera Raspberry Pi
  • Envie dados do sensor usando Arduino

Para ver o que você precisa para este belo projeto de luz, basta ler a próxima etapa (avisos) e depois a etapa Desejado: Componentes.

Aqui está o repositório GitHub: GITHUB REPO BY ME

Aqui está o site do projeto: SITE DO PROJETO POR MIM

Etapa 1: Aviso: cuidado ao tentar fazer isso em casa

CUIDADO:

O AUTOR DESTE TUTORIAL ASSUME QUE VOCÊ TEM CONHECIMENTOS SUFICIENTES SOBRE ELETRICIDADE E OPERAÇÃO BÁSICA DE EQUIPAMENTOS ELÉTRICOS. SE VOCÊ NÃO TOMAR CUIDADO E NÃO SEGUIR AS INSTRUÇÕES DESTE TUTORIAL, VOCÊ PODE: DANIFICAR O EQUIPAMENTO ELETRÔNICO, QUEIMAR-SE OU CAUSAR UM INCÊNDIO. Tenha cuidado e use o bom senso. Se você não tem o conhecimento necessário para este tutorial (soldagem, noções básicas de eletrônica), execute com alguém que tenha. Obrigada.

O AUTOR DESTE INSTRUÍVEL REMOVE QUALQUER RESPONSABILIDADE DE SI MESMO POR DANOS CAUSADOS OU PERDA DE PROPRIEDADE OU DANOS FÍSICOS. USE O SENSO COMUM

Etapa 2: Componentes

Conexões
Conexões
Conexões
Conexões
Conexões
Conexões
Conexões
Conexões

Antes de aquecermos o ferro de solda, precisamos revisar o que deve ser conectado a quê. Eu fiz este gráfico simples (o MS Paint nunca me decepciona) que descreve onde certas partes estão localizadas dentro do robô.

A imagem foi construída para que você possa ampliar, ver em resolução total e ler o texto.

Etapa 6: endereço para o Pi

O Arduino fala com o Pi de acordo com o plano. E o Pi fala com o computador, então como tudo isso funciona?

Vamos dar uma olhada em nossa Sequência de Iniciação de Conexão:

  1. Raspberry Pi começa
  2. Arduino inicia
  3. Raspberry Pi inicia o cliente TCP. Ele dispara seu endereço IP por meio de um LED.
  4. Raspberry Pi inicia o serviço de comunicação serial e se conecta ao Arduino

Portanto, estabelecemos algum tipo de comunicação:

Computador Raspberry Pi Arduino

Usei Visual Basic. NET (Microsoft Visual Studio 2013 Community) para escrever o programa que fala com o Raspberry Pi e Python para escrever o protocolo Arduino / Raspberry Pi.

Tudo que você precisa fazer para saber seu endereço IP Pi é conectá-lo a uma tela HDMI, fazer login no Shell e digitar o comando:

hostname -I

Etapa 7: O Plano

Agora que temos o endereço IP de Pi, faremos SSH nele (SSH é Secure Shell - conectamos remotamente ao shell Linux) e escreveremos um arquivo que exibe o endereço IP do servidor. O Pi, na inicialização, também o fará e escreverá a porta que está ouvindo. Aqui, darei apenas alguns exemplos do código, mas ele está disponível para download nesta etapa e no branch do GitHub que criei. Detalhes sobre isso mais tarde.

Funciona assim:

  1. RPi é inicializado.
  2. RPi inicia o programa Tcp em seu IP local e uma porta designada.
  3. RPI começa a transmitir vídeo
  4. RPI é encerrado.

Etapa 8: Indo físico

Agora, estamos prontos para começar a construir fisicamente a coisa toda. Se você não leu a etapa 1 (texto de aviso e licença), faça-o antes de continuar. Não sou responsável por nenhum dano causado. E em caso de dúvida, este robô não deve ser usado para fins militares, a menos que seja um apocalipse zumbi. E mesmo assim use o bom senso.

Sugere-se que você leia as instruções para ouvir na Lista de Leitura.

Baixe o esquema de conexão da etapa "Conexões".

MOTORES

Os motores que você comprou provavelmente se parecem com isto, e está tudo bem se não tiverem: se eles tiverem apenas dois fios (preto e vermelho na maioria dos casos), deve funcionar. Consulte a folha de dados online para ver a tensão e a corrente de operação. Sinta-se à vontade para fazer perguntas na seção de comentários. Eu sempre os leio.

H-BRIDGE

Nunca trabalhei com um H-Bridge antes. Pesquisei um pouco e encontrei um bom instrutivo explicando os princípios de um HB. Você também pode olhar lá (veja o passo Lista de Leitura) e ligar o seu também. Não vou explicar muito. Você pode ler lá e saber tudo o que você deve sobre este circuito.

CONDUZIU

Este pequeno lightbolb pode funcionar com voltagem lógica apenas porque requer quase nenhuma corrente e uma voltagem de 3V-5V 4mA-18mA. Opcional.

ARDUINO

O Arduino obterá sinais e comandos por meio da conexão serial do Raspberry Pi. Usamos o Arduino para controlar nossos motores porque o Raspberry Pi não pode gerar valores analógicos por meio do GPIO.

Etapa 9: Início automático do Raspberry Pi

Cada vez que você ligar o Raspberry Pi, terá que digitar o nome de usuário e a senha. Não queremos fazer isso porque às vezes simplesmente não podemos conectar um teclado ao Pi, então seguiremos estas etapas deste tutorial para iniciar automaticamente o programa que prepara o Pi. Se ficar preso em um loop, podemos sempre usar Ctrl + C para interrompê-lo.

  • sudo crontab -e
  • E então iremos inserir o comando que adiciona esse arquivo para auto-strartup no gerenciador do cron.

Chamaremos o arquivo pibot.sh que dará comandos para iniciar todos os tipos de scripts Python para operar o robô. Vamos repassar: (Sudo com programas Python de cortina para permitir que o programa acesse o GPIO)

raspivid -o - -t 0 -hf -w 640 -h 360 -fps 25 | cvlc -vvv stream: /// dev / stdin --sout '#rtp {sdp = rtsp: //: 8554}': demux = h264

O código que faz todo o trabalho no lado do pi será chamado upon_startup.sh.

É um script de shell simples que executa tudo.

Etapa 10: Houeston, tivemos um problema … Os motores DC não são do mesmo modelo

Já testei o H-Bridge e ele funciona bem, mas quando enganchei os motores que peguei na plataforma do robô, encomendei online esses dois motores giram em velocidades diferentes e fazem ruídos diferentes. Mudei o acelerador para 100% nos motores. Ambos não podiam funcionar em sua capacidade máxima.

Parece que são dois motores diferentes. Um tem um torque maior, o que é ótimo para esse tipo de robô, mas o outro simplesmente não move o robô. Então gira em círculos.

Neste ponto, o que eu tenho é o programa serial no Arduino funciona perfeitamente bem, mas o servidor Tcp no PC e o cliente Tcp no Pi ainda não estão codificados. Em Preciso preencher esta inscrição para a competição. O que eu faço?

  1. Primeiro, triplo a voltagem dos motores. A folha de dados dizia que 3V, 6V não os movia. Então é 9V. Liguei as baterias teo em paralelo para dobrar a corrente e a voltagem continua a mesma.
  2. Tenho outros motores que se encaixem no suporte da plataforma? Talvez eu possa ver se eles são modelos semelhantes.
  3. Posso substituir por Servos se o chocolate realmente bater no ventilador.

A escola começou. Terei que ver o que fazer.

Nota: Por que diabos escrevo os problemas que encontro aqui? Portanto, se você tiver menos experiência e também tiver os mesmos problemas, saberá o que fazer.

A solução:

Então, fiz outro teste. Eu adaptei a diferença de velocidade no código do Arduino.

NOTA: os motores podem girar em velocidades diferentes para você! Altere os valores no esboço do Arduino.

Etapa 11: [TCP]: Por que Tcp e Shell não seguro? O que é TCP?

Tenho duas explicações de por que usar Tcp e não SSH para o P. C. - Comunicação Pi.

  1. Em primeiro lugar, SSH (Secure Shell, consulte as Explicações) destina-se a iniciar comandos de um computador remoto. Fazer o Pi responder com as informações que desejamos é mais difícil porque nossa única opção para analisar os dados é por meio do processamento de strings difícil e tedioso.
  2. Em segundo lugar, já sabemos como usar o SSH e queremos aprender mais formas de comunicação entre dispositivos neste tutorial.

TCP, ou Transmission Control Protocol, é um protocolo central do Internet Protocol Suite. Originou-se na implementação inicial da rede na qual complementou o Protocolo de Internet (IP). Portanto, todo o conjunto é comumente referido como TCP / IP. O TCP fornece entrega confiável, ordenada e com verificação de erros de um fluxo de octetos entre aplicativos em execução em hosts que se comunicam por meio de uma rede IP.

(Da Wikipedia)

Portanto, os profissionais do TCP são:

  • Seguro
  • Rápido
  • Funciona em qualquer lugar da rede
  • Fornece métodos para verificar a transmissão correta de dados
  • Controle de Fluxo: possui proteção caso o remetente de dados envie dados muito rápido para o cliente registrar e processar.

E os contras são:

  • No TCP você não pode transmitir (enviar dados para todos os dispositivos em uma rede) e multicast (o mesmo, mas pouco diferente - dá a capacidade de transmissão de cada dispositivo como um servidor).
  • Bugs em seu programa e bibliotecas de sistema operacional (que gerenciam a comunicação TCP por conta própria, seu roteador não faz quase nada, exceto conectar os dois [ou mais] dispositivos)

Por que não usar UDP, você pode perguntar? Bem, ao contrário do TCP, o UDP não garante que seu cliente obtenha os dados antes de enviar mais. É como enviar um e-mail e não saber se o cliente o recebe. Além disso, o UDP é menos seguro. Para mais informações, leia esta postagem do Superusuário do Stack Exchange

Este artigo é bom e recomendado.

Etapa 12: [TCP]: Vamos fazer um cliente

O cliente (Raspberry Pi no nosso caso), que recebe os dados do servidor (Nosso PC no nosso caso) obterá os dados para enviar ao Pi (comandos seriais que serão executados no Arduino) e receberá os dados de volta (Leituras do sensor e feedback diretamente do Arduino. O esquema em anexo mostra a relação entre os três.

O artigo Python Wiki TcpCommunication mostra que é muito simples fazer essa comunicação com algumas linhas de código usando o módulo de soquete embutido. Teremos um programa no PC e outro programa no Pi.

Vamos trabalhar com interrupções. Saiba mais na etapa Explicações sobre eles. Leia aqui sobre buffers também. Agora, podemos ler os dados que temos usando data = s.recv (BUFFER_SIZE), mas serão quantos caracteres definimos com bits vazios. Podemos usar interrupções? Outra pergunta: o buffer estará vazio ou esperará que o servidor envie mais dados, caso em que o servidor / cliente lançará uma exceção de tempo limite?

Vamos resolver um de cada vez. Antes de fazer isso, pesquisei este artigo da Wikipedia que lista as portas TCP e UDP usadas. Após uma rápida olhada, decidi que este projeto se comunicará na porta 12298 porque ela não é usada pelo Sistema Operacional e serviços locais.

Etapa 13: experimente nossas comunicações Tcp

Para ver se podemos usar interrupções, vamos fazer um cliente simples e um servidor usando a linha de comando Python. Farei isso nas seguintes etapas:

  1. Inicie um programa que envia um texto via Tcp em um loop através de uma porta cortina
  2. Inicie outro programa (em paralelo) que leia todo o texto em um loop e o imprima na tela.

Apenas segmentos do programa serão mostrados. Todos os programas rodam com Python 3. Todos esses programas fazem é enviar o comando serial do teclado do usuário do PC para o Arduino através do Pi.

  • SBcontrolPC.py - Para ser executado no PC. Inicia uma conexão TCP no endereço local e na porta especificada (eu uso a porta 12298, veja a etapa anterior porque)
  • SBcontrolPi.py - Para ser executado no Pi. Lê seu buffer a cada meio segundo (0,5 segundos). Inicia um script de shell que gerencia coisas como streaming de vídeo, etc.

Recomendado: