Índice:

Detector / tirador de fotos de beija-flor: 12 etapas (com fotos)
Detector / tirador de fotos de beija-flor: 12 etapas (com fotos)

Vídeo: Detector / tirador de fotos de beija-flor: 12 etapas (com fotos)

Vídeo: Detector / tirador de fotos de beija-flor: 12 etapas (com fotos)
Vídeo: Expectativa x realidade. E você lindona, Opção 1 ou 2? 2024, Julho
Anonim
Detector de beija-flor / tirador de fotos
Detector de beija-flor / tirador de fotos

Temos um alimentador de beija-flores em nosso deque traseiro e, nos últimos dois anos, tenho tirado fotos deles. Os beija-flores são criaturinhas incríveis, muito territoriais e suas lutas podem ser hilárias e incríveis. Mas eu estava ficando cansado de ficar parado como uma estátua nos fundos da minha casa para tirar fotos deles. Eu precisava de uma maneira de tirar fotos sem ter que ficar atrás da casa por longos períodos de tempo esperando. Sei que poderia ter usado um obturador com controle remoto, mas queria que as fotos fossem tiradas automaticamente, sem que eu estivesse lá. Resolvi então fazer um aparelho para detectar os beija-flores e tirar uma foto automaticamente.

Sempre tive a intenção de usar um microcontrolador para fazer isso. O microcontrolador seria capaz de acionar o obturador da câmera sob o controle do software. Mas o sensor para detectar um pequeno colibri era outra coisa. Eu poderia ter usado um sensor de movimento, mas queria tentar algo único. Decidi usar o som como gatilho.

Etapa 1: Escolha de um microcontrolador

Escolhendo um Microcontrolador
Escolhendo um Microcontrolador

O microcontrolador que escolhi foi um PJRC Teensy. O Teensy usa um microcontrolador ARM, especificamente, um ARM Cortex M4. O Cortex M4 contém o hardware para realizar uma FFT (Fast Fourier Transform) que faria a detecção. O PJRC também vende uma placa de áudio que permite que você use o Teensy para tocar música e também gravar áudio com uma entrada externa ou um pequeno microfone que você pode adicionar à placa. Meu plano era fazer com que o Teensy executasse um FFT no áudio do microfone.

Etapa 2: FFT?

FFT?
FFT?

Um FFT é uma fórmula / algoritmo matemático que transforma um sinal do domínio do tempo para o domínio da frequência. O que isso significa é que ele pega o áudio amostrado no tempo do microfone e o transforma em magnitudes das frequências que estão presentes na onda original. Você vê, qualquer onda contínua arbitrária pode ser construída a partir de uma série de ondas seno ou cosseno que são múltiplos inteiros de alguma frequência base. Um FFT faz o oposto: ele pega uma onda arbitrária e a transforma nas magnitudes das ondas que, se somadas, criariam a onda arbitrária original. Uma maneira ainda mais simples de dizer isso é, planejei usar o software e o hardware FFT no Teensy para determinar se ele 'ouve' o bater das asas de um colibri na frequência em que ocorre o bater das asas. Se ele 'ouvir' um beija-flor, enviarei um comando para uma câmera tirar uma foto.

Funcionou! Então, como eu fiz isso, como você poderia fazer isso e como você poderia torná-lo ainda melhor?

Etapa 3: Como é o som de um colibri flutuante?

Como é o som de um colibri pairando?
Como é o som de um colibri pairando?

Primeiramente, eu precisava descobrir com que frequência eu ouviria as batidas das asas do colibri. Para determinar isso, usei meu iPhone. Eu conectei o iPhone a um tripé e fiz com que ele gravasse um vídeo em câmera lenta diretamente na frente do alimentador do colibri em nosso deck. Depois de algum tempo, retirei a câmera e baixei o vídeo. Então assisti ao vídeo procurando um beija-flor na frente do alimentador. Quando encontrei uma boa sequência, contei o número de quadros individuais necessários para o colibri bater suas asas de uma posição e voltar para a mesma posição. A câmera lenta no iPhone tem cerca de 240 quadros por segundo. Eu observei um colibri pairando na frente do alimentador e contei 5 frames para ele mover suas asas da posição para a frente para a posição de volta e então retornar para a posição para frente. Isso é 5 quadros de 240. Lembre-se, nós ouvimos um som em cada batida das asas do colibri (uma na batida para frente e outra para trás). Para 5 quadros por um ciclo ou período, podemos calcular a frequência dividida pelo período, ou seja, 1 / (5/240) ou 48 Hz. Isso significa que, quando o beija-flor está pairando, o som que ouvimos deve ser o dobro ou cerca de 96 Hz. A frequência é provavelmente mais alta quando eles estão voando e não pairando. Também pode ser afetado por sua massa, mas acho que podemos assumir que a maioria das aves da mesma espécie tem aproximadamente a mesma massa.

Etapa 4: Série de Fourier e o Teensy

Fourier Series e Teensy
Fourier Series e Teensy

O Teensy (usei um Teensy 3.2) é feito pelo PJRC (www.pjrc.com). O FFT será calculado em uma amostra de som. Para adquirir o som, a PJRC vende uma placa adaptadora de áudio para o Teensy (TEENSY3_AUDIO - $ 14,25). Eles também vendem um pequeno microfone que pode ser soldado à placa adaptadora de áudio (MICROFONE - $ 1,25). A placa adaptadora de áudio usa um chip (SGTL5000) com o qual o Teensy pode se comunicar através de um barramento serial (I2S). O Teensy usa o SGTL5000 para amostrar o áudio do microfone e digitalizá-lo, ou seja, criar um conjunto de números que representam o som que o microfone está ouvindo.

Uma FFT é apenas uma versão rápida do que é chamado de Transformada Discreta de Fourier (DFT). Um DFT pode ser executado em um número arbitrário de amostras, no entanto, um FFT precisa ter as amostras armazenadas em conjuntos que são múltiplos binários. O hardware Teensy pode realizar uma FFT em um conjunto de 1024 amostras (1024 = 2 ^ 10), então é isso que usaremos.

Um FFT geralmente produz, como sua saída, as magnitudes E as relações de fase entre as várias ondas representadas. Para esta aplicação, não estamos preocupados com as relações de fase, mas sim com as magnitudes e sua frequência.

A placa de áudio Teensy faz a amostragem de áudio em uma frequência de 44, 100 Hz. Portanto, 1024 amostras nesta frequência representam um intervalo de tempo de 1024/44100 ou cerca de 23,2 milissegundos. Neste caso, o FFT irá produzir como saída, magnitudes que são múltiplos inteiros do período de amostra de 43 Hz (novamente, 1 / 0,0232 é igual a cerca de 43 Hz). Gostaríamos de procurar magnitudes com cerca de duas vezes esta frequência: 86 Hz. Não é exatamente a frequência de nossas batidas de asas calculadas do colibri, mas é perto o suficiente, como veremos.

Etapa 5: usando dados de Fourier

Usando dados de Fourier
Usando dados de Fourier

As bibliotecas que o PJRC fornece para o Teensy processarão as amostras e retornarão uma matriz de valores de magnitude. Iremos nos referir a cada magnitude no array retornado como um bin. O primeiro bin (no deslocamento zero no array de dados que obtemos) é o deslocamento DC da onda. Podemos ignorar esse valor com segurança. O segundo bin (no deslocamento 1) representará a magnitude do componente de 43 Hz. Este é o nosso período base. O próximo bin (no deslocamento 2) representará a magnitude do componente de 86 Hz e assim por diante. Cada bin subsequente é um múltiplo inteiro do período base (43 Hz).

Agora é aqui que fica um pouco estranho. Se usássemos um FFT para analisar um som perfeito de 43 Hz, o FFT retornaria o primeiro compartimento em alguma grande magnitude e todos os demais compartimentos seriam iguais a zero (novamente, em um mundo perfeito). Se o som que capturamos e analisamos foi de 86 Hz, então o bin no deslocamento um seria zero e o bin no deslocamento 2 (o segundo harmônico) seria de grande magnitude e o resto dos bins seria zero, e assim por diante. Mas se capturássemos o som de um colibri e fosse 96 Hz (como eu medi em meu único pássaro), o deslocamento 2 bin @ 86 Hz teria uma magnitude de um valor ligeiramente inferior (do que a onda perfeita de 86 Hz teria) e as caixas ao redor dela (uma abaixo e algumas acima) teriam, cada uma, um valor diferente de zero decrescente.

Se o tamanho da amostra para nosso FFT fosse maior do que 1024 ou se nossa frequência de amostragem de áudio fosse menor, poderíamos tornar a resolução de nossos bins melhor (ou seja, menor). Mas mesmo se mudássemos essas coisas para tornar nossos compartimentos FFT em múltiplos de 1 Hz do período de base, ainda teríamos que lidar com esse 'derramamento' de compartimento. Isso ocorre porque nunca obteríamos uma frequência de asa que pousasse, sempre e exatamente, em um único compartimento. Isso significa que não podemos simplesmente basear nossa detecção de um colibri no valor do bin offset 2 e ignorar o resto. Precisamos de uma maneira de analisar os dados em algumas caixas para tentar entendê-los. Mais sobre isso mais tarde.

Etapa 6: comece a construção

Começar a construção
Começar a construção
Começar a construção
Começar a construção

Para o meu detector de beija-flor protótipo, usei pinos macho-macho extra longos soldados aos pinos do Teensy. Fiz isso para conectar o Teensy a uma pequena placa de ensaio sem solda. Fiz isso porque presumi que faria muitas mudanças no protótipo e, com a placa de ensaio, poderia mudar isso e conectar os fios sempre que precisasse. Soldei tiras femininas na parte inferior da placa de áudio, o que permite que ela seja conectada na parte superior do Teensy. O microfone é soldado na parte superior da placa de áudio (veja as fotos). Mais detalhes sobre a montagem podem ser encontrados no site do PJRC:

(https://www.pjrc.com/store/teensy3_audio.html).

Etapa 7: Hardware para tirar uma foto

Hardware para tirar uma foto
Hardware para tirar uma foto
Hardware para tirar uma foto
Hardware para tirar uma foto

Eu tenho (bem, minha esposa tem) uma câmera digital Canon Rebel. Há uma tomada na câmera que permite conectar um controle remoto manual do obturador. Eu comprei um controle remoto manual da B&H Photo. O cabo tem o conector correto para caber na câmera em uma extremidade e tem cerca de 6 pés de comprimento. Cortei o cabo na extremidade perto da caixa de controle do botão, retirei os fios e os soldei em três pinos de conexão que eu poderia conectar na placa de ensaio. Existe um fio desencapado que é aterrado e dois outros sinais: a ponta é o gatilho (rosa) e o anel (branco) é o foco (veja as fotos). Encurtar a ponta e / ou anel no solo opera o obturador e o foco na câmera.

Usando um fio de jumper, passei um aterramento comum do Teensy para uma área onde eu poderia usá-lo na placa de ensaio. Também conectei o ânodo de um LED ao pino 2 do Teensy e o cátodo do LED a um resistor (100-220 ohms) para aterrar. Eu também conectei o pino 2 do Teensy a um resistor de 10K e o outro lado do resistor eu conectei à base de um transistor NPN (um 2N3904 encontrado em todos os lugares). Liguei o emissor do transistor ao terra e o coletor aos fios branco e rosa do cabo que vai para a câmera. O fio desencapado, novamente, foi conectado ao aterramento. Sempre que o LED é ligado pelo Teensy, o transistor NPN também liga e aciona a câmera (e o foco). Veja o esquema.

Etapa 8: Projeto do Sistema

Projeto de sistema
Projeto de sistema

Como as frequências de batimento das asas do Beija-flor provavelmente não vão além de algumas centenas de Hz, não precisamos realmente registrar as frequências de som acima, digamos, de algumas centenas de Hz. O que precisamos é uma maneira de filtrar apenas as frequências que queremos. Um filtro passa-banda ou mesmo passa-baixo seria ótimo. Tradicionalmente, implementamos um filtro no hardware usando OpAmps ou filtros de capacitor chaveado. Mas, graças ao processamento de sinal digital e às bibliotecas de software da Teensy, podemos usar um filtro digital (sem necessidade de solda … apenas software).

O PJRC tem uma ótima interface gráfica disponível que permite arrastar e soltar seu sistema de áudio para o Teensy e a placa de áudio. Você pode encontrá-lo aqui:

www.pjrc.com/teensy/gui/

Decidi usar um dos filtros em cascata biquadráticos fornecidos pelo PJRC para restringir as frequências de som do microfone (filtro). Eu conectei três desses filtros em cascata e os configurei para operação de passagem de banda em 100 Hz. Este filtro permitirá entrar no sistema as frequências um pouco acima e um pouco abaixo da frequência que nos interessa.

No diagrama de blocos (veja a imagem) i2s1 é a entrada de áudio para a placa de áudio. Eu conectei os dois canais de áudio a um mixer e depois aos filtros (o microfone é apenas um canal, mas eu mixei os dois para não ter que descobrir qual canal era … me chame de preguiçoso). Corro a saída do filtro para a saída de áudio (para poder ouvir o áudio, se quiser). Eu também conectei o áudio dos filtros ao bloco FFT. No diagrama de blocos, o bloco rotulado como sgtl5000_1 é o chip controlador de áudio. Não precisa de nenhuma conexão no diagrama.

Depois de fazer toda essa construção de bloco, você clica em Exportar. Isso abre uma caixa de diálogo onde você pode copiar o código que foi gerado a partir do diagrama de blocos e colá-lo em seu aplicativo Teensy. Se você olhar para o código, verá que é uma instanciação de cada controle junto com as 'conexões' entre os componentes.

Etapa 9: Código

Código
Código

Levaria muito espaço neste Instructable para revisar o software em detalhes. O que tentarei fazer é destacar alguns dos bits-chave do código. Mas, de qualquer maneira, esse não é um aplicativo muito grande. O PJRC tem um ótimo vídeo tutorial sobre como usar Teensy e as bibliotecas / ferramentas de áudio (https://www.youtube.com/embed/wqt55OAabVs).

Comecei com algum código de exemplo FFT de PJRC. Colei o que obtive da ferramenta de design do sistema de áudio no topo do código. Se você olhar o código depois disso, verá alguma inicialização e o sistema começará a digitalizar o áudio do microfone. O software entra no loop 'para sempre' () e espera que os dados FFT estejam disponíveis usando uma chamada para a função fft1024_1.available (). Quando os dados FFT estão disponíveis, eu pego uma cópia dos dados e os processo. Observe que, eu só pego os dados se a maior magnitude do bin estiver acima de um valor definido. Este valor é como eu defino a sensibilidade do sistema. Se os bins ESTÃO acima do valor definido, normalizo a onda e a transfero para um array temporário para processamento; caso contrário, eu o ignoro e continuo esperando por outro FFT. Devo mencionar que também uso a função de controle de ganho do microfone para ajustar a sensibilidade do circuito (sgtl5000_1.micGain (50)).

Normalizar a onda significa apenas que eu ajusto todas as caixas para que a caixa com o maior valor seja definida como um. Todas as outras caixas são dimensionadas na mesma proporção. Isso torna os dados mais fáceis de analisar.

Usei vários algoritmos para analisar os dados, mas resolvi usar apenas dois. Um algoritmo calcula a área sob a curva formada pelas caixas. Este é um cálculo simples que apenas adiciona os valores dos bins na região de interesse. Eu comparo esta área para determinar se ela está acima de um limite.

O outro algoritmo usa uma matriz constante de valores que representam um FFT normalizado. Esses dados são os resultados de uma assinatura real (ótima) do beija-flor. Eu chamo isso de cerca viva. Eu comparo os dados de hedge com os dados FFT normalizados para ver se os bins correspondentes estão dentro de 20% um do outro. Escolhi 20%, mas esse valor pode ser ajustado facilmente.

Também conto quantas vezes os algoritmos individuais acham que têm uma correspondência, ou seja, acham que ouvem um beija-flor. Eu uso essa contagem como parte da determinação do beija-flor porque pode ocorrer um falso disparo. Por exemplo, quando qualquer som é alto ou contém a frequência das asas dos pássaros, como palmas, você pode obter um gatilho. Mas se a contagem estiver acima de um certo número (um número que eu escolho) digo que é um beija-flor. Quando isso acontece, ligo o LED para indicar que temos um acerto e esse mesmo circuito aciona a câmera através do transistor NPN. No software eu defino o tempo de disparo da câmera para 2 segundos (o tempo em que o LED e o transistor estão ligados).

Etapa 10: Montagem

Montagem
Montagem

Você pode ver na foto como eu (sem cerimônia) montei a parte eletrônica. Eu tinha o Teensy conectado a uma placa de ensaio que estava presa a uma placa de transporte junto com outro (não utilizado) compatível com o Arduino (um Arduino Zero, eu acho). Amarrei tudo com fio a um poste de metal do toldo no meu deck (também adicionei alívio de tensão ao cabo que vai para a câmera). O mastro estava bem próximo ao alimentador do colibri. Eu liguei a eletrônica com um pequeno bloco de energia LiPo que você pode usar para recarregar um telefone celular morto. A fonte de alimentação tinha um conector USB que usei para passar a energia para o Teensy. Passei o cabo do gatilho remoto até a câmera e o conectei. Eu estava pronto para alguma ação de pássaro!

Etapa 11: Resultados

Resultados
Resultados

Eu montei a câmera em um tripé perto do alimentador. Eu coloquei a câmera focada na extremidade frontal do alimentador e a configurei para o modo Esporte, que tira várias fotos rápidas quando o obturador é pressionado. Com o tempo de desligamento de 2 segundos, capturei cerca de 5 fotos por evento de gatilho.

Passei algumas horas mexendo no software na primeira vez que tentei. Tive de ajustar a sensibilidade e a contagem de acertos do algoritmo sucessivo. Eu finalmente consegui ajustar e estava pronto.

A primeira foto que tirou foi de um pássaro que voou para dentro do quadro como se estivesse fazendo uma curva em alta velocidade como um caça a jato (veja acima). Eu não posso te dizer o quão animado eu estava. Sentei-me em silêncio do outro lado do convés por um tempo e deixei o sistema funcionar. Consegui gravar muitas fotos, mas joguei fora algumas. Acontece que às vezes você só tem uma cabeça ou cauda de pássaro. Além disso, recebi gatilhos falsos, que podem ocorrer. No total, acho que guardei 39 fotos. Os pássaros demoraram algumas viagens até o alimentador para se acostumar com o som do obturador da câmera, mas eventualmente pareciam ignorá-lo.

Etapa 12: Considerações Finais

Pensamentos finais
Pensamentos finais

Este foi um projeto divertido e funciona. Mas, como a maioria das coisas, há muito espaço para melhorias. O filtro certamente pode ser diferente (como um filtro passa-baixo ou mudanças no arranjo e / ou parâmetros) e talvez isso possa fazer com que funcione melhor. Também estou certo de que existem algoritmos melhores para experimentar. Vou tentar um pouco disso no verão.

Disseram-me que existe um código de aprendizado de máquina de código aberto … talvez o sistema pudesse ser 'treinado' para identificar beija-flores! Não tenho certeza se vou tentar fazer isso, mas, talvez.

Que outras coisas podem ser adicionadas a este projeto? Se a câmera tivesse um carimbo de data / hora, você poderia adicionar essa informação às fotos. Outra coisa que você pode fazer é gravar o áudio e salvá-lo em um cartão uSD (a placa de áudio PJRC tem um slot para um). O áudio salvo pode ser usado para treinar um algoritmo de aprendizagem.

Talvez em algum lugar uma escola de ornitologia pudesse usar um dispositivo como este? Eles podem ser capazes de coletar informações como horários de alimentação, frequência de alimentação e, com as imagens, você pode ser capaz de identificar pássaros específicos que voltam para se alimentar.

Minha esperança é que outra pessoa estenda este projeto e compartilhe o que faz com os outros. Algumas pessoas me disseram que esse trabalho que fiz deveria ser transformado em um produto. Não tenho tanta certeza, mas prefiro vê-lo usado como uma plataforma de aprendizagem e para a ciência.

Obrigado por ler!

Para usar o código que postei, você precisará do Arduino IDE (https://www.arduino.cc/en/Main/Software). Você também precisará do código Teensyduino do PJRC (https://www.pjrc.com/teensy/td_download.html).

Recomendado: