Índice:

Raspberry PI Camera e Light Control Death Star: 5 etapas (com fotos)
Raspberry PI Camera e Light Control Death Star: 5 etapas (com fotos)

Vídeo: Raspberry PI Camera e Light Control Death Star: 5 etapas (com fotos)

Vídeo: Raspberry PI Camera e Light Control Death Star: 5 etapas (com fotos)
Vídeo: The best way for digitizing your negatives 🎞️ 2024, Novembro
Anonim
Raspberry PI Camera e Light Control Death Star
Raspberry PI Camera e Light Control Death Star
Raspberry PI Camera e Light Control Death Star
Raspberry PI Camera e Light Control Death Star
Raspberry PI Camera e Light Control Death Star
Raspberry PI Camera e Light Control Death Star

Como sempre, procuro construir dispositivos que sejam úteis, trabalhem de forma robusta e, muitas vezes, sejam até melhorias em comparação com as soluções de prateleira atuais.

Aqui está mais um grande projeto, originalmente denominado Shadow 0f Phoenix, um escudo Raspberry PI em conjunto com detecção de movimento e controles de luz baseados no Arduino.

Etapa 1: o estado das câmeras IP comerciais

O estado das câmeras IP comerciais
O estado das câmeras IP comerciais
O estado das câmeras IP comerciais
O estado das câmeras IP comerciais
O estado das câmeras IP comerciais
O estado das câmeras IP comerciais

Além de que construir sua própria câmera / sistema de vigilância é mais legal, vamos ver por que isso é uma melhoria em relação a uma solução disponível no mercado.

Vou compará-la com a série de câmeras IP sem fio NEO COOLCAM Full HD 1080P, pois já tive muitos desses vários modelos de câmeras neo coolcams (ONVIF). Eles vêm em diferentes formas e tamanhos, externos e internos, a maioria deles com suporte wi-fi integrado, mas vamos ver suas advertências:

  • Os fabricantes chineses que vendem essas câmeras quase sempre mentem sobre a resolução do sensor de imagem embutido, quando você compra uma câmera de 5MP / 8MP no Ebay, você pode acabar com uma câmera de 2MP barata com imagem ruim (funciona, mas a qualidade é um lixo). Ao comprar a câmera Raspberry PI v2 de 8 MP do revendedor original, você receberá o valor pelo qual pagou e um sensor de 8 MP com resolução de 3280 × 2464 pixels =>
  • Do ponto de vista da segurança, essas câmeras (mesmo o Dlink mais caro e outros modelos) são terríveis, eles usam senhas padrão, como 123456 ou usuários integrados, como administrador / operador administrador / operador que você pode nem mesmo ser capaz de alterar ou o a mudança desaparece após uma reinicialização. Para completar, muitas dessas câmeras telefonam para casa (conectam-se a seus servidores na China, algumas até reproduzem vídeos / fotos sem pedir, apenas para facilitar, caso você decida instalar seu aplicativo Android / Iphone um dia para verificar seu casa). Mesmo que você coloque esses dispositivos atrás de um roteador, isso simplesmente não é bom o suficiente, o melhor é se você não definir um gateway padrão neles, colocá-los em um firewall ou colocá-los em uma VLAN para impossibilitar a saída deles para a Internet ou melhor ainda: não os use de todo.
  • Eles são mais confiáveis? não, muitos deles, mesmo os DLINKs mais caros, têm a opção de reiniciar a câmera diariamente / semanalmente, etc. Essa opção existe por um motivo, porque depois de X dias eles geralmente perdem a conectividade Wifi ou se comportam mal de outras maneiras. Pense neles como as boas e velhas caixas do Win95 que precisavam ser reiniciadas com mais frequência:) Não digo que o hardware baseado em Raspi seja tão sólido que você pode construí-lo em usinas de energia nuclear de controle, mas com hardware / software adequado configuração, dissipadores de calor, ventiladores de resfriamento automáticos e operação RW minimizada no SDCARD eles podem facilmente atingir aquele tempo de atividade de mais de 100 dias sem problemas. No momento em que escrevo, minha Estrela da Morte funciona há 34 dias, já passou de 100, mas às vezes eu estava hackeando o feed da fonte de alimentação que está alimentando alguns dos meus circuitos, então tive que desligá-lo:(
  • Hardware direcionado: eles são feitos para uma finalidade específica, geralmente vêm com uma pequena área nvram e busybox, mas alguns modelos tornam o acesso a este shell impossível também, então você só pode usá-los para o que eles devem ser usados enquanto você pode use sua câmera baseada em Raspi para quaisquer outras tarefas: servidor de arquivos, servidor tftp / dhcp, servidor web, servidor quake … as opções são ilimitadas.
  • Espaço de armazenamento: eles não têm nenhum ou usam cartões microsd com sistema de arquivos FAT32 VS no raspberry pis você pode até anexar um disco rígido de 2 TB, se quiser.
  • Luzes de controle: algumas têm uma saída de ALARME onde você pode conectar um pequeno relé para acionar as luzes. Como vou mostrar neste tutorial, usar câmeras infravermelhas é uma completa perda de tempo, pois você não conseguirá identificar ninguém nas imagens infravermelhas devido à má qualidade. Se você precisar gravar um vídeo no escuro, a melhor maneira de fazer isso é acender a luz primeiro e depois gravar o vídeo.

Então você pode perguntar se há algum PROs de usar uma câmera pronta para uso? Sim, para empresas onde as horas de trabalho para configurá-lo seriam mais caras do que mexer no Raspberry pis (pelo menos não para mim:)) e sim, existem câmeras top de linha (500 $ + com resolução melhor do que a câmera pi de curso). Como outra vantagem, posso dizer que as câmeras que seguem o padrão ONVIF facilitam o provisionamento centralizado. Isso fornece uma interface padrão que pode ser usada para enviar comandos à câmera para definir seu IP / máscara de rede / gateway e outras coisas. Para isso, você pode baixar o gerenciador de dispositivos Onvif da Sourceforge. Muitos desses dispositivos vêm com interfaces web defeituosas onde, por exemplo, não permitem que você defina o ip ou a máscara de rede corretamente porque o javascript que valida esses campos está funcionando incorretamente e sua única maneira de definir esses parâmetros corretamente é através do ONVIF.

Etapa 2: Planos da Estrela da Morte

Planos da Estrela da Morte
Planos da Estrela da Morte
Planos da Estrela da Morte
Planos da Estrela da Morte
Planos da Estrela da Morte
Planos da Estrela da Morte

Você pode construir este dispositivo com qualquer um dos PIs Raspberry de 1 a 3B +. Mesmo o zero tem portas de câmera, mas como existem tantos raspis de segunda mão no mercado, você deve estar se perguntando qual é a mais ideal para esta construção.

A resposta depende de onde você deseja processar o stream de vídeo.

Existem duas opções:

1, processar os vídeos localmente com movimento e encaminhar um fluxo de vídeo quando houver movimento detectado (nota: o movimento encaminha um fluxo constante lento para o servidor, não importa o quê, isso pode ser dependendo da resolução e taxas de quadros que você usa a partir de alguns cem megabytes a vários gigabytes por dia, apenas um lembrete se você quiser fazer uma configuração em uma conexão medida). Aqui, a CPU é importante e, infelizmente, o movimento (no momento da escrita) não tira proveito de vários núcleos, no entanto, o SO tentará equilibrar ligeiramente a carga. Você sempre terá um dos núcleos em 100% de uso.

2, Processe os vídeos em um servidor central: aqui, basta encaminhar o fluxo de vídeo bruto da câmera para um servidor de streaming externo (como iSpy rodando em um computador x86 ou MotionEyeOS rodando em outro minicomputador dedicado). Como não há processamento localmente, o modelo de PI que você usa não importa, um PI1 enviará o mesmo fluxo que um PI3B +.

Neste tutorial, irei com a primeira escolha.

A regra aqui é que quanto mais rápida a CPU você colocar em movimento, melhores resultados você obterá. Por exemplo, minha câmera baseada em Raspi 2 olhando para um corredor às vezes não captava quando alguém passava rápido e quando estava gravando a gravação era lenta, perdendo muitos quadros em comparação com o modelo 3. O modelo 3 também tem o 802.11 abgn wi-fi que é útil para poder transmitir vídeo de alta qualidade, funciona fora da caixa e é bastante confiável. No momento em que escrevo que o modelo 3B + está lançado, eu apenas recomendaria que você o obtenha com a CPU Quad Core de 1,4 Ghz.

Lista de materiais

  • DeathStar de plástico de 30 cm:)
  • Raspberry Pi 3 B +
  • PiCam v2 (8 MP)
  • Arduino Pro Micro 5.5v
  • 2x SIP-1A05 Reed Switch Relé
  • 1x PCS HC-SR501 IR Piroelétrico infravermelho IR PIR Módulo Detector de Sensor de Movimento
  • 1 resistor de 10kohm para LDR
  • 1x LDR
  • Adaptador 1x12V 4A DC
  • 1xWarm White LED 5050 SMD Luz Flexível Faixa de Lâmpada 12V DC
  • Regulador de tensão 1xBuck

Como você pode ver nos esquemas, este projeto foi originalmente projetado para controlar uma única luz com um relé porque eu não planejei adicionar iluminação interna (o que é muito legal), então eu apenas conectei um segundo relé ao Arduino. A grande vantagem do SIP-1A05 é que ele tem diodo flyback interno e o consumo em mA está muito abaixo da limitação de energia por pino do Arduino.

A razão pela qual o PIR está no escudo nas fotos é que no início o S0P foi planejado para ser colocado em uma caixa de plástico IP simples em vez de uma Estrela da Morte. Como você deve ter adivinhado, a câmera está diretamente na pistola laser, o PIR e o LDR precisavam de outros orifícios perfurados e são injetados com cola, já que não estou planejando removê-los.

Um buraco foi feito na parte inferior do DeathStar, onde colei um parafuso grande com uma cola forte de 2 componentes. Isso pode ser aparafusado no suporte original da Neo Coolcams (era bom para alguma coisa, afinal:)). Como suporte adicional, uso fios de cobre duro para segurar no topo da estrela.

Observação importante sobre a fonte de alimentação: como a mesma fonte alimentará o PI, o Arduino e a faixa de LED, ela deve ser robusta o suficiente para ser capaz de lidar com todos eles, então será baseada na faixa de LED que você escolher para o projeto. Uma faixa comercial de LED 5050 12v 3 metros drena cerca de 2A, isso é muito. Para o PI e Arduino, você deve calcular em + 2A (embora seja um tamanho exagerado, não fará mal). Usar fita de LED sobre lâmpadas halógenas padrão, néon ou outra iluminação de alta potência é que você pode colocar todo o circuito em uma bateria de chumbo-ácido de 12V @ 10Ah como backup para que funcione até mesmo em caso de queda de energia.

O dólar diminuirá a tensão de 12-> 5 V para alimentar o Arduino e o PI enquanto a alimentação direta de 12 V é conectada ao relé para ligar a faixa de LED.

Etapa 3: Software Arduino

Software Arduino
Software Arduino

Você pode encontrar o código-fonte completo abaixo, que é bem comentado, mas aqui está uma breve explicação de como funciona: No início de cada loop, a função xcomm () usual é chamada para ver se há um comando vindo do PI Raspberry que pode ser LIGHT_ON / OFF para LIGAR as luzes do corredor ou DS_ON / OFF para LIGAR / DESLIGAR a luz de fundo do DeathStar, implementei isso apenas por uma questão de perfeição, pois se alguém passar pelo PIR deve pegá-lo e ligá-lo as luzes, mas talvez você queira olhar para o lugar por algum motivo, mesmo quando não há ninguém lá.

Depois disso, o valor da fotocélula é lido e o pino de movimento é verificado quanto ao movimento. Se houver movimento, o código verifica se está escuro o suficiente e, em seguida, verifica se não estamos em espera. Se tudo isso passar, ele simplesmente acende a luz do corredor e envia de volta PHOENIX_MOTION_DETECTED para o Raspberry PI; se não estiver escuro o suficiente, ele ainda sinaliza de volta para o computador, mas não acende a luz. Assim que um movimento é detectado, um temporizador de espera de 5 minutos é iniciado.

Logo em seguida, a próxima seção de código verificará se estamos em espera (o que deveria ser o caso se houvesse apenas um evento de movimento, então vamos supor que se passaram 5 minutos para que esta verificação possa confirmar). O código verifica se há movimento novamente; caso contrário, apague as luzes. Como você pode ver, se não houver movimento, esta função se repetirá continuamente e tente desligar as luzes para que não haja feedback para o PC.

Temos outro temporizador para a iluminação interna da Estrela da Morte que depende puramente da fotocélulaLeitura <limite_escuro.

Embora as 2 rotinas não se conheçam, elas funcionarão perfeitamente juntas, já que quando a luz do corredor se acende, ela fornece tanta luz que o LDR vai pensar que é dia novamente e desliga a iluminação interna. No entanto, houve algumas ressalvas sobre este processo que é explicado no código se você estiver interessado, se não, pegue a resposta da Nvidia de que "simplesmente funciona!".

Etapa 4: Software Raspberry PI

Software Raspberry PI
Software Raspberry PI
Software Raspberry PI
Software Raspberry PI
Software Raspberry PI
Software Raspberry PI

O Raspbian mais recente funciona para mim:

Raspbian GNU / Linux 9.4 (extensão)

Linux Phoenix 4.9.35-v7 + # 1014 SMP Sex. 30 de junho 14:47:43 BST 2017 armv7l GNU / Linux ii motion 4.0-1 programa de captura armhf V4L com suporte para detecção de movimento

Embora você possa usar outras distros, se tiver problemas com a câmera, você só terá suporte da equipe se estiver usando o sistema operacional oficial deles. Remover bloatware indesejável, como o systemd, também é altamente recomendado.

O movimento também pode ser criado a partir da fonte facilmente:

apt-get -y install autoconf automake pkgconf libtool libjpeg8-dev build-essencial libzip-dev apt-get install libavformat-dev libavcodec-dev libavutil-dev libswscale-dev libavdevice-dev

apt-get -y instalar libavformat-dev libavcodec-dev libavutil-dev libswscale-dev libavdevice-dev apt-get -y instalar git git clone https://github.com/Motion-Project/motion cd motion / autoreconf -fiv. / configure --prefix = / usr / motion make && make install / usr / motion / bin / motion -v

Eu recomendo o iSpy como gravador de vídeo / servidor coletor. Infelizmente, no momento em que este livro foi escrito, não havia boas alternativas para o Linux. A câmera pode ser adicionada com um url MJPEG https:// CAMERA_IP: 8081 a porta padrão.

O processamento de movimento pode ser útil, por exemplo, você não precisa ficar olhando para o servidor iSpy o dia todo, você pode receber um e-mail em caso de movimento. Embora o iSpy tenha essa funcionalidade para alertar por e-mail em caso de movimento, ele ativa a gravação de vez em quando para eventos diversos, como alguma luz é refletida na área. Com a detecção de movimento PIR, nunca tive um único alarme falso. Os alertas podem ser processados localmente:

Evento de movimento Pir detectado no sensor> Alerta do Arduino> Raspberry pi recebe no console> Programa de processamento C> Aplicativo de e-mail externo

No entanto, prefiro processar os logs e vídeos remotamente, então, neste caso, adicionei uma seção ao programa de controle C para, enquanto ele registra os logs localmente em um arquivo de texto simples, também os registra no syslog e que é encaminhado para um SIEM para processamento adicional.

void logger (char * text) {

ARQUIVO * f = fopen ("phoenix.log", "a"); if (f == NULL) {printf ("Erro ao abrir arquivo de log! / n"); Retorna; } fprintf (f, "% s =>% s / n", cur_time (0), texto); fclose (f); #ifdef SYSLOG char loggy [500]; sprintf (loggy, "% s =>% s / n", cur_time (0), texto); setlogmask (LOG_UPTO (LOG_NOTICE)); openlog ("DeathStar", LOG_CONS | LOG_PID | LOG_NDELAY, LOG_USER); // syslog (LOG_NOTICE, "Programa iniciado pelo usuário% d", getuid ()); syslog (LOG_NOTICE, loggy); closelog (); #endif return; }

Na extremidade receptora, o syslog-ng pode demuxar esses eventos do fluxo de registro principal:

filter f_phx {

combinar ("Estrela da Morte"); }; destino d_phx {arquivo ("/ var / log / phoenix / deathstar.log"); }; log {fonte (s_net); filtro (f_phx); destino (d_phx); };

e pode ser passado para outra ferramenta (motion.php ver anexo) para análise e alerta.

Neste script, você pode simplesmente definir o horário normal durante a semana quando você não está em casa:

$ opt ['alert_after'] = '09:00:00'; // Manhãs $ opt ['alert_before'] = '17:00:00'; // Noites

O programa php utiliza o excelente utilitário logtail para analisar os logs.

$ cmd = "logtail -o". $ offsetfile. ' '. $ logfile.'> '. $ logfile2;

O Logtail rastreia a posição em um arquivo de deslocamento para que o programa principal não precise saber a partir de onde começar a olhar os logs, ele receberá os dados não processados mais recentes.

Motion.php pode ser executado a partir do crontab com um pequeno truque para os fins de semana, quando irá percorrer os logs, mas não fará nenhum processamento adicional.

* / 5 * * * 1-5 / usr / local / bin / php ~ / motion.php &> / dev / null * / 5 * * * 6-7 / usr / local / bin / php ~ / motion.php fim de semana &> / dev / null

Etapa 5: Problemas e lista de tarefas

Problemas e lista de tarefas
Problemas e lista de tarefas
Problemas e lista de tarefas
Problemas e lista de tarefas

Se estiver usando o Raspberry pi 3 ou mais recente, você pode pular esta seção, provavelmente não terá mais esses problemas.

Durante os anos, tive alguns problemas com placas baseadas no Raspberry pi 2, que podiam rodar a mesma pilha de software, mas eram compradas em momentos diferentes em lugares diferentes. Após um certo período de tempo que pode ser de 2 dias ou 20 dias quando o SSH está no dispositivo, o SSH apenas travava, então o daemon de movimento e o código C local que conversava com o Arduino foram carregados na memória ram, portanto, o dispositivo estava funcionando mas era impossível fazer qualquer outra coisa com ele neste estado.

Depois de muitas soluções de problemas, descobri uma solução:

homesync.sh

#! / bin / sh -e

### BEGIN INIT INFO # Fornece: homesync # Required-Start: mountkernfs $ local_fs # Required-Stop: camera phoenix # Default-Start: S # Default-Stop: 0 6 # Breve descrição: Sincronizador Home # Descrição: Sincronizador Home por NLD ### END INIT INFO NAME = home DESC = "Ramdisk Home Synchronizer" RAM = "/ home /" DISK = "/ realhome /" set -e case "$ 1" no início | em diante) echo -n "Iniciando $ DESC: "rsync -az --numeric-ids --delete $ DISK $ RAM &> / dev / null echo" $ NAME. ";; stop | back) echo -n "Parando $ DESC:" rsync -az --numeric-ids --delete $ RAM $ DISK &> / dev / null echo "$ NAME.";; *) echo "Uso: $ 0 {start | stop}" exit 1;; saída 0 esac

O script acompanha uma modificação do fstab:

tmpfs / home tmpfs rw, size = 80%, nosuid, nodev 0 0

A partição inicial é montada como um ramdisk que renderia aproximadamente 600 MB de espaço livre no Raspberry pi 2, que é mais do que suficiente para armazenar alguns binários e pequenos arquivos de log:

tmpfs 690M 8.6M 682M 2% / home

Descobri que o travamento do PI foi atribuído às operações de gravação no SDcard, embora eu tenha tentado cartões diferentes (Samsung EVO, Sandisk) que foram verificados em busca de erros várias vezes antes e depois e não tiveram problemas em outros laptops, isso foi apenas Chegando. Eu não tive o mesmo problema (ainda) com Raspberry PI 3s e hardware superior, então é também por isso que os recomendo neste tutorial.

Embora o movimento atual em um Raspberry PI 3 seja bom o suficiente para mim, aqui estão algumas idéias que valem a pena explorar:

  1. Não use movimento, mas use um fluxo rasgado pela rede e deixe um servidor poderoso fazer a detecção de movimento e codificação de vídeo (por exemplo, iSpy). -> Problema: consumo constante de largura de banda da rede.
  2. Use o movimento e deixe o ffmpeg fazer a codificação do vídeo. -> Problema: a CPU não consegue lidar com resoluções mais altas
  3. Use o movimento, grave vídeo bruto e deixe um servidor poderoso fazer a codificação. -> O uso da CPU no RPi é baixo e a largura de banda da rede é limitada quando há movimento real. Para este cenário, poderíamos gravar em um cartão SD / ramdisk para rendimento máximo e, em seguida, criar uma cópia do vídeo para outro servidor.

Eu também observaria que construir este projeto é possível construir sem um Arduino. Todos os componentes (relés, LDR, PIR) podem ser conectados ao raspberry pi de alguma forma, mas eu prefiro microcontroladores em tempo real para interagir com sensores e dispositivos de saída. Nos casos em que meu pi de framboesa estava travado, por exemplo, ou travou, o controle de luz executado pelo Arduino funcionou perfeitamente.

Se você gostou deste instrutível, fique atento, pois continuarei a série com minha câmera 360º outdoor raspberry pi zero dome no ano que vem.

Recomendado: