Índice:
2025 Autor: John Day | [email protected]. Última modificação: 2025-01-13 06:58
Problema - Gatos usando seu jardim como banheiro
Solução - Gaste muito tempo projetando um aspersor para gatos com o recurso de upload automático do YouTube
Este não é um passo a passo, mas uma visão geral da construção e alguns códigos
#BeforeYouCallPETA - Os gatos estão bem, é um aspersor de baixa pressão como a chuva, que eles podem correr antes mesmo de girar em torno deles. O projeto não é ensopar um gato, mas afastá-lo antes que sujem meu jardim com a versão para gatos do Barkers Eggs.
Etapa 1: itens principais necessários
Raspberry Pi zero e cartão SD
Câmera Raspberry Pi
Retransmissão
555 temporizador…. (ou um arduino e outro relé se seus 555 timers não chegarem)
Solenóide
Sprinkler
Algum tipo de caixa para os eletrônicos
A vontade de acertar um prego metafórico com uma marreta de 6 toneladas
Uma câmera com tão pouca resolução que você mal consegue ver a água, mas ainda consegue ver os gatos correndo para se proteger
Etapa 2: O Sistema
1, a câmera Pi detecta um objeto do tamanho de um gato se movendo por alguns quadros da câmera (mostrado na próxima etapa)
2, Pi dispara sprinkler
3, Cat corre para se proteger
4, vídeo carregado automaticamente para o youtube para o prazer de visualização
Etapa 3: tempo de codificação
Usando openCV usando subtração de quadro, você pode encontrar áreas do quadro que mudam com o tempo, usando algumas funções interessantes, você pode descobrir o quão grandes são essas mudanças e se persistem com o tempo, e o mais importante, descobrir se elas são do tamanho de um gato.
Existem alguns tutoriais sobre subtração de quadros que entram em grandes detalhes se você fizer uma pesquisa rápida no Google.
Visão geral de como o código funciona
1, a câmera continua tirando fotos e comparando-as com as últimas
2, se uma forma do tamanho de um gato for detectada, será notado
3, se a mudança no tamanho do gato persistir por cerca de 4 quadros, o pi usa seu GPIO para ligar o relé para iniciar o Arduino
4, o arduino envia um sinal para alimentar o segundo relé por 5 segundos, que ativa o solenóide
5, O solenóide quando alimentado permite água para o sprinkler
6, enquanto o aspersor está ativo, a câmera para de detectar e grava o vídeo
7, o vídeo é enviado ao Youtube
8, Imagens instantâneas enviadas para a caixa de depósito para o sistema de ajuste fino
Nota - Por que acabei usando 2 relés e um arduino para ligar um solenóide por 5 segundos …
1, O pi não pode iniciar e parar o solenóide durante a gravação do vídeo, pois os scripts python pausam até que o vídeo seja concluído, daí a necessidade do arduino (ou temporizador 555) para permitir que o solenóide abra e feche independentemente do script enquanto o o vídeo ainda está sendo gravado.
2, O primeiro relé e o arduino podem ser substituídos por um temporizador 555, mas isso não veio no correio a tempo para este projeto, o 555 economizaria muito tempo, dinheiro e etapas.
3, O pi não pode acionar o solenóide diretamente porque o Pi GPIO funciona em 3,3 V e 51 mA máx., E o solenóide quer 5 V e muito mais do que 51 mA para acionar.
4, cada quadro pode ser cortado para remover a detecção de movimento em áreas indesejadas, como um jardim de vizinhos. Deixar de fazer isso fará com que o referido vizinho olhe confusamente para o seu jardim porque o irrigador dispara toda vez que ele quer entrar em seu galpão.
5, provavelmente perdi algo óbvio e perdi meu tempo configurando-o assim.
Código abaixo
import cv2import numpy as np import argparse #cat import time import RPi. GPIO as GPIO import os import dropbox from picamera.array import PiRGBArray from picamera import PiCamera # ------------------ ------------------------------ Carregar para o youtube ----------------- ---------------------- def HDtoYoutube (): ctime = time.strftime ("_% H-% M-% S") cdate = time.strftime ("_% d-% m-% Y") vidname = ctime + cdate #Trigger relay GPIO.output (11, True) time.sleep (.5) GPIO.output (11, False) print ("Taking Video") tente: #Take Video os.system ('raspivid -w 1640 -h 922 -o vid {0}.h264 -t 15000'.format (vidname)) #Upload to youtube print ("Uploading to YouTube") os. system ('sudo youtube-upload --title = "Gato molhou {0}" --client-secrets = client_secret.json vid {0}.h264'.format (vidname)) #Remove arquivo de vídeo quando terminar os.remove ('vid {0}.h264'.format (vidname)) print ("Vídeo enviado e removido de Pi") exceto: pass # -------------------- ---------------------------- Instantâneos para caixa de depósito ------------------- -------------------- def St illsToDropbox (): print ("Upload Still To Dropbox Function") access_token = 'Ah ah ah, você não disse a palavra mágica … Ah ah ah, você não disse a palavra mágica' ctime = time.strftime (" % H:% M:% S ") cdate = time.strftime ("% d-% m-% Y ") try: filename =" /Motion/{0}/DetectedAt_{1}.jpg".format(cdate, ctime) print (filename) client = dropbox.client. DropboxClient (access_token) image = open ("ToDropbox.jpg", 'rb') client.put_file (filename, image) image.close () os.remove ("ToDropbox-j.webp
#HowToTriggerRealProgrammersWithBadCode
Etapa 4: juntando tudo
Enfie a parte elétrica em uma caixa à prova d'água, aparafuse as coisas nas paredes e use muita fita adesiva e cola quente
Etapa 5: Resultados
Quando funciona, funciona
Etapa 6: falsos positivos
Quando isso não acontece, borrifa sombras de gatos, sua esposa e sua filha.
Dica de profissional - Coloque um interruptor perto da porta que interrompa o programa de detecção de movimento….. depois esqueça de usá-lo e fique encharcado ao colocar as lixeiras para fora.
Espero ter feito qualquer especialista em programação, eletrônica e DIY se encolher com todos os erros que provavelmente cometi, e especialmente espero que você tenha gostado de todos os meus erros de ortografia.