Robô seguidor de linha usando Raspberry Pi
Robo-seguidor-de-linha-usando-Raspberry-Piblog_image_banner

Nesta sessão DIY, estamos construindo um carro robótico de vigilância controlado pela web usando raspberry pi e uma webcam. Esta pode ser uma ferramenta de segurança e espionagem útil e barata, que possui muitas opções configuráveis e pode ser construída em poucas horas.

Neste projeto IoT, estamos usando principalmente Raspberry Pi, câmera web USB e dois motores DC com chassi de robô para construir este carro robótico.

Ele tem uma câmera web montada sobre ele, através da qual obteremos um feed de vídeo ao vivo e a parte interessante aqui é que podemos controlar e mover esse robô de um navegador da web pela internet.

Como pode ser controlado usando a página da web, significa que também pode ser controlado usando a página da web no celular. Construímos uma página web em HTML que tem links Esquerda, Direita, Avançar, Retroceder, clicando nos quais podemos mover o robô em qualquer direção.

Aqui usamos “Motion” para obter o feed de vídeo ao vivo da câmera USB e usamos “Flask” para enviar comandos da página da Web para o Raspberry Pi usando python para mover o robô, que são explicados em detalhes na parte subsequente deste tutorial. Temos o Raspbian Jessie OS instalado em nossa placa Raspberry Pi.

Instalando e configurando o 'Motion' para obter o feed de vídeo:

Motion (Surveillance Software) é um software de CCTV de detector de movimento de código aberto gratuito, desenvolvido para Linux. Ele detecta o movimento e começa a gravar o vídeo dele.

Com o 'Motion' instalado no seu Raspberry Pi, você pode transformar magicamente seu Raspberry Pi em uma câmera de segurança. Ele é usado para obter feed de vídeo ao vivo, fazer vídeos em timelapse e tirar fotos em intervalos regulares.

Grava e salva o Vídeo sempre que detecta Movimento ou qualquer perturbação na área de visualização. O feed de vídeo ao vivo pode ser assistido no navegador da Web digitando o endereço IP do Pi junto com a porta.

Criamos um tutorial detalhado sobre como usar o movimento com o Raspberry Pi e a câmera USB, aqui estamos explicando brevemente sua instalação no Raspberry pi para que nosso robô envie streaming de vídeo ao vivo para a página da web.

Aqui você precisa executar apenas alguns comandos para começar a obter seu primeiro feed de vídeo pela rede. Antes disso, verifique corretamente se o seu Raspberry Pi está conectado à internet, seja usando LAN ou Wi-Fi e siga os passos abaixo:

Passo 1: primeiro execute o comando abaixo para atualizar o sistema operacional Raspbian no Raspberry Pi:

sudo apt-get update

Passo 2: Em seguida, instale a Biblioteca 'Motion' usando o comando abaixo:

sudo apt-get install motion

Passo 3: Agora defina o Motion daemon para yes editando o arquivo: /etc/default/motion para que ele esteja sempre em execução. Edite este arquivo usando o editor 'nano' com 'sudo' como mostrado abaixo:

sudo nano /etc/default/motion

Em seguida, salve o arquivo pressionando 'CTRL+X', depois 'Y' e Enter.

Passo 4: Agora precisamos definir a permissão para o Diretório de destino (/var/lib/motion/), no qual o Motion salva todas as gravações de vídeo e arquivos de imagem. Precisamos definir 'Motion' como proprietário deste diretório emitindo o comando abaixo:

sudo chown motion:motion /var/lib/motion/

Essa permissão é necessária, caso contrário, você receberá um erro ao verificar o Status do serviço de movimento.

Você pode verificar o status do serviço usando este comando: sudo service motion status

Passo 5: Agora estamos quase terminando, só precisamos alterar uma opção de configuração no arquivo de configuração do Motion (/etc/motion/motion.conf) que é stream_localhost off. Temos que desativar esse streaming de host local, caso contrário, não poderemos acessar o feed de vídeo em nossa rede e ele será acessível apenas a partir do próprio Raspberry Pi. Para isso, edite o arquivo Motion Configuration com o editor ‘nano’ e desative-o, conforme mostrado abaixo:

sudo nano /etc/motion/motion.conf

Agora estamos prontos e prontos para obter nosso feed ao vivo da câmera web USB conectada ao Pi. Basta iniciar (ou reiniciar) o serviço Motion usando o comando abaixo e abrir o IP do seu Raspberry Pi, com a porta 8081, no seu navegador (como 192.168.43.199:8081). Neste projeto nós incorporamos este IP em nosso código HTML na tag img src.

sudo /etc/init.d/motion restart

E você verá o feed ao vivo da sua câmera web. Aqui usamos uma câmera web USB de baixo custo que funcionou sem problemas com o nosso Raspberry Pi, mas você ainda pode usar uma câmera de boa qualidade para uma melhor resolução.

Como será mostrado no navegador, você pode usar qualquer dispositivo para assistir ao feed, que suporta navegador da web como celular, tablet etc.

Tente reiniciar o Raspberry Pi como uma etapa de solução de problemas quando necessário:

sudo reboot

Nota: Se o seu modelo de Raspberry Pi for inferior à versão 3, pode ser necessário um dongle Wi-Fi para conectar sem fio o Raspberry Pi ao roteador.

Configuração do Flask no Raspberry Pi para controlar o robô por meio da página da Web:

Aqui, criamos um servidor da Web usando o Flask, que fornece uma maneira de enviar os comandos da página da Web para o Raspberry Pi para controlar o robô pela rede.

O Flask nos permite executar nossos scripts python por meio de uma página da Web e podemos enviar e receber dados do Raspberry Pi para o navegador da Web e vice-versa. Flask é um microframework para Python.

Esta ferramenta é baseada em Unicode com servidor de desenvolvimento e depurador integrados, suporte a testes de unidade integrados, suporte para cookies seguros e é fácil de usar, essas coisas a tornam útil para os amadores.

Instale um pacote de suporte de frasco no Raspberry Pi usando o comando fornecido:

$ pip install Flask

Então podemos usar o Flask apenas importando-o em nosso programa, como importamos os seguintes pacotes de frasco para este projeto:

from flask import Flask

from flask import Flask, render_template, request

Código HTML para página da web:

Criamos uma página da Web usando a linguagem HTML para exibir links de controle (Esquerda, Direita, Avançar, retroceder) para mover o Robô do navegador da Web. Usamos o script jQuery para chamar as funções em nosso programa Python.

Existem cinco funções no código Python para mover o robô para a esquerda, direita, para frente, para trás e pará-lo.

O código Python completo foi fornecido no final. Essas funções serão executadas clicando nos Links de Controle na página da web e os motores se moverão dependendo do link que estiver sendo clicado.

Aqui escrevemos o código de tal forma que o Robot se moverá em determinada direção enquanto clica e segura o link, e assim que soltarmos o botão do mouse, o Robot irá parar. Abaixo está o código HTML para a página da web incluindo o jQuery:

<html>

<head>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>

</head>

<body>

<img src="http://192.168.43.199:8081" /> <!--Enter the IP Address of your Raspberry Pi-->

<div style="float:right">

</div>

<div style=" height:400px; width:300px; float:right;">

<center>

<h1><span style="color:#5C5C5C;">Circuit</span><span style="color:#139442"> Digest</span></h1>

<h2>Surveillance Robot</h2><br><br>

<a href="#" id="up" style="font-size:30px;text-decoration:none;">  &#x1F881;&#x1F881;<br>Forward</a><br><br></center>

<a href="#" id="left" style="font-size:30px;text-decoration:none;"> &#x1F880;&#x1F880;Left</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

<a href="#" id="right" style="font-size:30px; text-decoration:none;"> Right &#x1F882;&#x1F882;</a><br><br>

<center><a href="#" id="down" style="font-size:30px;text-decoration:none;"> Backward<br> &#x1F883;&#x1F883;</a></center>

</div>

<script>

$( document ).ready(function(){

    $("#down").on("mousedown", function() {

     $.get('/down_side');

     }).on('mouseup', function() {

     $.get('/stop');

    });

    $("#up").on("mousedown", function() {

     $.get('/up_side');

     }).on('mouseup', function() {

     $.get('/stop');

    });

    $("#left").on("mousedown", function() {

     $.get('/left_side');

     }).on('mouseup', function() {

     $.get('/stop');

    });

    $("#right").on("mousedown", function() {

     $.get('/right_side');

     }).on('mouseup', function() {

     $.get('/stop');

    });

});

</script>

</body>

</html>

Aqui você pode ver que incorporamos o endereço IP, no qual o vídeo está sendo transmitido, na página da Web usando a tag img src. Altere o endereço IP de acordo com o seu Raspberry Pi, mas mantenha a porta igual.

<img src="http://192.168.43.199:8081" /> <!--Enter the IP Address of your Raspberry Pi-->

O usuário precisa copiar e colar o código HTML fornecido acima em algum editor de texto (bloco de notas) e salvar o arquivo com extensão .HTML (robot.html).

Em seguida, coloque este arquivo HTML na pasta /templates em relação ao local do seu script python. Significa que você precisa criar uma pasta chamada templates, onde você colocou seu arquivo de código Python para este Raspberry Surveillance Robot e, em seguida, coloque o arquivo robot.html nesta pasta de templates.

Esta etapa é importante, caso contrário nosso projeto não funcionará. Você pode abrir diretamente o arquivo robot.html clicando duas vezes nele para ver como seus links de controle ficarão.

Confira ainda todo o processo no Vídeo de Demonstração ao final. Depois de terminarmos a programação e tudo mais, podemos apenas executar o código Python no Raspberry Pi e abrir o IP_address_of_your_Pi:5010 no navegador da web (como http://192.168.43.199:5010)

Você pode verificar o endereço IP do seu Raspberry Pi usando o comando ifconfig:

ifconfig

Diagrama de circuito e configuração:

Depois de testar o feed de vídeo ao vivo e o código HTML, precisamos construir um robô usando chassis, rodas e parafusos de porca feitos à mão ou prontos.

Em seguida, coloque o banco de energia sobre ele para alimentar o Raspberry pi e, em seguida, coloque o Raspberry Pi e a câmera da web sobre o banco de energia e corrija a configuração usando fita adesiva ou tiras de borracha, conecte a câmera USB ao Raspberry Pi.

Neste projeto de IoT, não precisamos fazer muitas conexões, precisamos apenas conectar alguns fios para Motor Driver IC L293D e DC Motors.

As conexões são mostradas no diagrama de circuito abaixo. Aqui usamos um PCB de uso geral para montar o IC L293D para reduzir o espaço, mas você também pode usar uma placa de ensaio pequena para conectar motores CC com L293D.

Como operar:

Operação e trabalho deste robô de vigilância é muito fácil. Crie um arquivo python (extensão .py) e copie o código abaixo para ele e salve-o em seu Raspberry Pi. Em seguida, coloque o arquivo HTML na pasta de modelos conforme explicado acima. Não se esqueça de alterar o endereço IP no arquivo HTML.

Em seguida, execute o código Python digitando o comando abaixo:

python name_of_file.py

Em seguida, abra seu endereço IP do Raspberry Pi com a porta 5010 como http://192.168.43.199:5010 (novamente substitua o endereço IP pelo seu endereço). Agora você verá a página da web com quatro links de controle de robô e vídeo ao vivo.

O usuário pode controlar o robô clicando e segurando os links. Se o usuário clicar e segurar os links, o robô se moverá de acordo com o link clicado e quando o usuário liberar o link, o robô parará automaticamente.

O código Python completo é fornecido abaixo, onde escrevemos várias funções para controlar o Robô ao clicar nos links na página da web

from flask import Flask

from flask import render_template, request

import RPi.GPIO as GPIO

import time

app = Flask(__name__)

m11=18

m12=23

m21=24

m22=25

GPIO.setwarnings(False)

GPIO.setmode(GPIO.BCM)

GPIO.setup(m11, GPIO.OUT)

GPIO.setup(m12, GPIO.OUT)

GPIO.setup(m21, GPIO.OUT)

GPIO.setup(m22, GPIO.OUT)

GPIO.output(m11 , 0)

GPIO.output(m12 , 0)

GPIO.output(m21, 0)

GPIO.output(m22, 0)

print "DOne"

a=1

@app.route("/")

def index():

    return render_template('robot.html')

@app.route('/left_side')

def left_side():

    data1="LEFT"

    GPIO.output(m11 , 0)

    GPIO.output(m12 , 0)

    GPIO.output(m21 , 1)

    GPIO.output(m22 , 0)

    return 'true'

@app.route('/right_side')

def right_side():

   data1="RIGHT"

   GPIO.output(m11 , 1)

   GPIO.output(m12 , 0)

   GPIO.output(m21 , 0)

   GPIO.output(m22 , 0)

   return 'true'

@app.route('/up_side')

def up_side():

   data1="FORWARD"

   GPIO.output(m11 , 1)

   GPIO.output(m12 , 0)

   GPIO.output(m21 , 1)

   GPIO.output(m22 , 0)

   return 'true'

@app.route('/down_side')

def down_side():

   data1="BACK"

   GPIO.output(m11 , 0)

   GPIO.output(m12 , 1)

   GPIO.output(m21 , 0)

   GPIO.output(m22 , 1)

   return 'true'

@app.route('/stop')

def stop():

   data1="STOP"

   GPIO.output(m11 , 0)

   GPIO.output(m12 , 0)

   GPIO.output(m21 , 0)

   GPIO.output(m22 , 0)

   return  'true'

if __name__ == "__main__":

 print "Start"

 app.run(host='0.0.0.0',port=5010)


ENTRE EM CONTATO COM A LOJAMUNDI.

Assine nossa Newsletter! É gratuito!

Cadastre seu nome e email para receber novidades e materiais gratuitos da Lojamundi.