Índice:
2025 Autor: John Day | [email protected]. Última modificação: 2025-01-13 06:58
Introdução
Neste projeto, você aprenderá a construir uma câmera de detecção de movimento que poderá usar como armadilha fotográfica, monitor de bebê / animal de estimação, câmera de segurança e muito mais.
Este projeto está organizado em várias etapas:
- Introdução
- Configurando seu Pi
- SSHing em seu Pi
- Enviando seu endereço IP por e-mail na inicialização
- Instalando e configurando o Motion
- Envio de vídeos por e-mail com detecção de movimento
- Solução de problemas e fontes
O que você precisará:
- Um modelo Raspberry Pi 3 b ~~ $ 35
- Cartão Micro SD de 8GB ~ ~ $ 10
- Webcam USB ~ ~ $ 20 (este projeto usou uma Logitech HD Webcam c270)
- cabo micro usb ~~ $ 5
- qualquer:
- bateria recarregável de 5 volts (bateria reserva do telefone), isso torna seu projeto sem fio ~~ $ 20
- ou
- adaptador de parede USB ~ ~ $ 5
- Uma conexão WiFi
O que você precisa acessar para configurar:
- Um monitor
- Um mouse e teclado
- Um computador com um slot para cartão SD
- Um conversor de cartão Micro SD para SD (deve vir com seu cartão micro SD)
Etapa 1: Configurando seu Pi
Agora vamos configurar o seu Pi
Para começar, certifique-se de ter todos os itens necessários da última etapa. Em seguida, siga as etapas no site do Raspberry Pi sobre como instalar o Raspbian Jessie em seu cartão Microsd, encontrado aqui.
Depois de instalar o Raspbian em seu Pi, é hora de configurar alguns recursos básicos.
Wi-fi
O primeiro passo para obter o máximo do seu Pi é conectá-lo à Internet. Você pode já ter concluído esta etapa localizando o símbolo WiFi no canto superior direito da tela principal do seu Pi e se registrando lá, ou fazendo a mesma coisa antes de instalar o Raspbian na última etapa. Se você não conseguir entrar na sua rede WiFi a partir da interface da área de trabalho do seu Pi, você pode seguir as instruções aqui para configurar o WiFi por meio da linha de comando.
SSH
Uma ferramenta muito útil disponível para você ao usar seu Pi é a opção de emitir comandos para seu Pi no que é conhecido como configuração sem cabeça. Usando um Secure SHell, ou SSH, você pode controlar seu Pi remotamente de um computador. Com este método, tudo que você precisa para editar seu Pi é uma fonte de energia para mantê-lo ligado, chega de monitor e teclado!
Etapa 2: SSHing em seu PI
Fazer SSH em seu Raspberry Pi é fácil e muito útil, pois o processo permite que você emita comandos para seu Pi a partir de qualquer computador com nada mais do que uma conexão wi-fi.
Para fazer SSH em seu Pi, você precisa seguir estas 3 etapas simples.
Primeiro, você precisa habilitar o SSH em seu Pi. Para fazer isso, abra uma janela de comando em seu Pi e digite:
sudo raspi-config
Este comando permite que você entre em um menu de configuração. a partir daí, você vai querer usar as teclas de seta, tab e enter para ir primeiro para as opções de interface, então para habilitar SSH, assim como a câmera, então saia e reinicie o pi.
Em seguida, você precisará encontrar o endereço IP do seu Pi. Em um terminal de comando, digite:
sudo ifconfig
E seu endereço IP deve estar na seção wlan0 que aparece, logo abaixo de Link encap: ethernet. Na imagem de demonstração acima, o endereço IP é 192.168.1.10.
Por último, você precisará abrir o aplicativo de terminal integrado em um mac ou encontrar e seguir as instruções de um aplicativo ssh de terceiros para Windows. No aplicativo Terminal, digite:
ssh pi @ SEU ENDEREÇO IP
Se você não alterou a senha enquanto estava no Raspi-config, sua senha a ser inserida quando solicitada será a senha padrão: raspberry.
A partir daí, você deve estar pronto para ir!
Etapa 3: envie seu endereço IP por e-mail na inicialização
Nesta etapa, vamos nos concentrar em como acessar seu Raspberry Pi, independentemente da rede em que você está. Dependendo da rede, o endereço IP do Pi muda. E se você não tiver um monitor configurado, precisará entrar no Pi para acionar o protocolo de detecção de movimento, alterar as preferências de movimento ou acessar qualquer outra coisa no dispositivo. Para resolver esse problema, escreveremos um script python que nos enviará um e-mail com o endereço IP atual do Pi na inicialização. O script python é o seguinte e foi armazenado em um diretório marcado como "plano de fundo".
# iniciar no diretório inicial
cd ~
#create pasta de fundo
fundo mkdir
#create script python
sudo nano emailip.py
#write in emailip.py
soquete de importação
s = socket.socket (socket. AF_INET, socket. SOCK_DGRAM)
s.connect (("8.8.8.8", 80))
print (s.getsockname () [0]) x = s.getsockname () [0] s.close ()
importar smtplib
from email. MIMEMultipart import MIMEMultipart
from email. MIMEText import MIMEText
fromaddr = "SEU ENDEREÇO"
toaddr = "A RECEBER ENDEREÇO"
msg = MIMEMultipart ()
msg ['De'] = fromaddr
msg ['To'] = toaddr
msg ['Assunto'] = "Endereço IP"
body = xmsg.attach (MIMEText (body, 'plain'))
server = smtplib. SMTP ('smtp.gmail.com', 587)
server.starttls ()
server.login (fromaddr, "SUA SENHA")
text = msg.as_string ()
server.sendmail (fromaddr, toaddr, texto)
server.quit ()
# então isso acontece na reinicialização
sudo nano /etc/rc.local
#enter em /etc/rc.local
enquanto ! / sbin / ifconfig wlan0 | grep -q 'inet addr: [0-9]';
durma 3
feito
_IP = $ (hostname -I) || verdade
if ["$ _IP"]; então
printf "Meu endereço IP é% s / n" "$ _IP"
python /home/pi/Background/emailip.py &
fi
saída 0
#e pronto
Etapa 4: instalando e configurando o Motion
#update pi
sudo apt-get update
sudo apt-get upgrade
#download
sudo apt-get install motion
# agora edite este arquivo com as seguintes alterações
sudo nano /etc/motion/motion.conf
#para definir um padrão para este tutorial, mude
#################
daemon em
stream_localhost desligado
webcontrol_localhost off
ffmpeg_output_movies on
target_dir / var / lib / motion
##################
#local web browser streaming options
##################
stream_maxrate 100 # Isso permitirá streaming em tempo real, mas requer mais largura de banda e recursos
taxa de quadros 60 # Isso permitirá que 60 quadros sejam capturados por segundo # quanto maior for, mais lento será o processamento do vídeo
largura 640 # Isso muda a largura da imagem exibida
altura 480 # Isso muda a altura da imagem exibida
##################
#emailing video settings in… / motion.conf
##################
#exclua o ";" na frente da linha, o ponto-e-vírgula comenta a linha
on_event_start python /home/pi/background/motionalert.py% f
on_movie_end python /home/pi/background/motionvid.py% f
##################
#astectics
##################
#choices descritas no arquivo
output_pictures locate_motion_style
##################
#então mudar
sudo nano / etc / default / motion
#dizer
start_motion_daemon = yes
# por último, inicie o B **** up
sudo service motion start
# você pode alterar o comando para "parar" ou "reiniciar"
Etapa 5: Envio de vídeos por e-mail a partir do movimento na detecção
Email quando o movimento é detectado:
# começar em casa
dircd ~
#create motion alert python script
sudo nano /home/pi/background/motionalert.py
#escrever
importar smtplib
de datetime import datetime
from email. MIMEMultipart import MIMEMultipart
from email. MIMEText import MIMEText
fromaddr = "SEU ENDEREÇO"
toaddr = "RECIEVINGADDRESS"
msg = MIMEMultipart ()
msg ['De'] = fromaddr
msg ['To'] = toaddr
msg ['Assunto'] = "Movimento detectado"
body = 'Um movimento foi detectado. / nHora:% s'% str (datetime.now ())
msg.attach (MIMEText (body, 'plain'))
server = smtplib. SMTP ('smtp.gmail.com', 587)
server.starttls ()
server.login (fromaddr, "SUA SENHA")
text = msg.as_string ()
server.sendmail (fromaddr, toaddr, texto)
server.quit ()
Vídeo de movimento por e-mail quando o vídeo for salvo:
#start at homedircd ~
#create motion video python scriptsudo nano /home/pi/background/motionvid.py
importar smtplib
from email. MIMEMultipart import MIMEMultipart
from email. MIMEText import MIMEText
from email. MIMEBase import MIMEBase
de codificadores de importação de e-mail
fromaddr = "SEU E-MAIL"
toaddr = "ENDEREÇO DE E-MAIL QUE VOCÊ ENVIE PARA"
msg = MIMEMultipart ()
msg ['De'] = fromaddr
msg ['To'] = toaddr
msg ['Assunto'] = "Câmera de movimento ativada"
body = "Vídeo de movimento detectado"
msg.attach (MIMEText (body, 'plain'))
importar os
rootpath = '/ var / lib / motion'
filelist = [os.path.join (rootpath, f) para f em os.listdir (rootpath)]
filelist = [f para f em filelist if os.path.isfile (f)]
newest = max (filelist, key = lambda x: os.stat (x).st_mtime)
filename = newest
importar os
rootpath = '/ var / lib / motion'
filelist = [os.path.join (rootpath, f) para f em os.listdir (rootpath)]
filelist = [f para f em filelist if os.path.isfile (f)]
newest = max (filelist, key = lambda x: os.stat (x).st_mtime)
anexo = aberto (mais recente, "rb")
part = MIMEBase ('aplicativo', 'fluxo de octeto')
part.set_payload ((anexo).read ())
encoders.encode_base64 (parte)
part.add_header ('Content-Disposition', "attach; filename =% s"% filename)
msg.attach (parte)
server = smtplib. SMTP ('smtp.gmail.com', 587)
server.starttls ()
server.login (fromaddr, "SUA SENHA")
text = msg.as_string ()
server.sendmail (fromaddr, toaddr, texto)
server.quit ()
Etapa 6: solução de problemas e fontes
Solução de problemas:
Como este projeto tem vários estágios, há vários pontos em que as coisas podem dar errado. Abaixo estão alguns dos possíveis erros que podem ocorrer e como corrigi-los.
- Ao configurar seu pi para enviar a você por e-mail seu endereço IP atual, é crucial editar o arquivo rc.local conforme mostrado anteriormente porque isso permite um pequeno atraso antes que o programa seja ativado após a reinicialização. Caso contrário, o pi ainda não estará conectado ao wi-fi e o e-mail não será enviado.
- Ao editar o arquivo motion.conf, certifique-se de excluir os pontos-e-vírgulas na frente de certos parâmetros. O ponto-e-vírgula suprime uma determinada ação, caso contrário, a alteração não terá efeito.
- O arquivo motion.conf é muito bem organizado e detalhado. Sinta-se à vontade para alterar as configurações a seu gosto, mas entenda que elas podem afetar o sucesso do sistema de captura de movimento.
- Depois de configurar as opções de alerta por e-mail e vídeo por e-mail, é importante observar que o e-mail do vídeo de detecção de movimento demorará um pouco mais para ser enviado do que o e-mail de alerta inicial. Isso ocorre porque o vídeo termina alguns segundos depois que o movimento não é mais detectado e porque o anexo de e-mail pode ser grande o suficiente para exigir alguns minutos para ser recebido. Em alguns casos, se o movimento for sustentado por um período muito longo de tempo, ele pode ser muito grande para ser enviado. Por isso, é sempre uma boa ideia verificar a transmissão ao vivo depois de receber o e-mail de alerta inicial.
Por que movimento ?:
Ao embarcar neste projeto pela primeira vez, consideramos vários recursos diferentes. Primeiro consideramos o uso da PiCam, que é uma unidade de câmera construída especificamente para o pi raspberry. O PiCam é certamente um dispositivo capaz e tem muitos aplicativos, mas é limitado ao uso de programas especificamente projetados para ele e é relativamente caro em comparação com as webcams multiuso baratas. Portanto, para tornar este projeto acessível a um público maior, decidimos usar uma webcam USB comum. A próxima questão era qual software incorporar. Inicialmente, consideramos o OpenCV, que é um software livre que permite muitos tipos diferentes de projetos de imagem e visão computacional. Um dos problemas aqui é que o OpenCV é um arquivo enorme que ocupa muita memória e muito tempo configurado. A configuração também possui vários estágios, deixando ainda mais espaço para erros. Descobrimos que, para nosso projeto específico, o Motion era mais simples de configurar e fazer funcionar, mas muito mais robusto em sua execução.
Fontes
Fontes de código:
www.techradar.com/how-to/computing/how-to-b…
pimylifeup.com/raspberry-pi-webcam-server/
www.pyimagesearch.com/2015/06/01/home-surve…
naelshiab.com/tutorial-send-email-python/
www.raspberrypi.org/documentation/linux/us…
learn.adafruit.com/adafruits-raspberry-pi-…
learn.adafruit.com/adafruits-raspberry-pi-…
pinout.xyz/pinout/i2c
Créditos fotográficos:
SSH Snail:
Logotipo do Mail:
Webcam da Logitech:
Janela SSH: