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.
Instalando e configurando o 'Motion' para obter o feed de vídeo:
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
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:
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:
<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;"> 🢁🢁<br>Forward</a><br><br></center>
<a href="#" id="left" style="font-size:30px;text-decoration:none;"> 🢀🢀Left</a>
<a href="#" id="right" style="font-size:30px; text-decoration:none;"> Right 🢂🢂</a><br><br>
<center><a href="#" id="down" style="font-size:30px;text-decoration:none;"> Backward<br> 🢃🢃</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-->
Você pode verificar o endereço IP do seu Raspberry Pi usando o comando ifconfig:
ifconfig
Diagrama de circuito e configuração:
Como operar:
Em seguida, execute o código Python digitando o comando abaixo:
python name_of_file.py
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)