Table des matières:

Détecteur de colibris/Picture-Taker : 12 étapes (avec photos)
Détecteur de colibris/Picture-Taker : 12 étapes (avec photos)

Vidéo: Détecteur de colibris/Picture-Taker : 12 étapes (avec photos)

Vidéo: Détecteur de colibris/Picture-Taker : 12 étapes (avec photos)
Vidéo: В центре французской тюрьмы 2024, Juillet
Anonim
Détecteur de colibris/Preneur d'images
Détecteur de colibris/Preneur d'images

Nous avons une mangeoire à colibris sur notre terrasse arrière et depuis quelques années, je les prends en photo. Les colibris sont de petites créatures étonnantes, très territoriales et leurs combats peuvent être à la fois hilarants et étonnants. Mais j'en avais marre de me tenir comme une statue contre l'arrière de ma maison pour les photographier. J'avais besoin d'un moyen de capturer des images sans avoir à rester derrière la maison pendant de longues périodes d'attente. Je sais que j'aurais pu utiliser un obturateur télécommandé mais je voulais que les photos soient prises automatiquement sans que j'aie à être là. J'ai donc décidé de fabriquer un appareil pour détecter les colibris et prendre une photo automatiquement.

J'ai toujours eu l'intention d'utiliser un microcontrôleur pour ce faire. Le microcontrôleur serait capable de piloter l'obturateur de la caméra sous contrôle logiciel. Mais le capteur pour détecter un petit colibri était une autre chose. J'aurais pu utiliser un capteur de mouvement mais je voulais essayer quelque chose d'unique. J'ai décidé d'utiliser le son comme déclencheur.

Étape 1: Choisir un microcontrôleur

Choisir un microcontrôleur
Choisir un microcontrôleur

Le microcontrôleur que j'ai choisi était un PJRC Teensy. Le Teensy utilise un microcontrôleur ARM, en particulier un ARM Cortex M4. Le Cortex M4 contient le matériel pour effectuer une FFT (Fast Fourier Transform) qui ferait la détection. PJRC vend également une carte audio qui vous permet d'utiliser le Teensy pour jouer de la musique ainsi que pour enregistrer de l'audio avec une entrée externe, ou un petit microphone que vous pouvez ajouter à la carte. Mon plan était de demander au Teensy d'effectuer une FFT sur l'audio du microphone.

Étape 2: FFT ?

FFT ?
FFT ?

Une FFT est une formule/un algorithme mathématique qui transforme un signal du domaine temporel au domaine fréquentiel. Cela signifie qu'il prend l'audio échantillonné dans le temps du microphone et le transforme en amplitudes des fréquences présentes dans l'onde d'origine. Vous voyez, toute onde continue arbitraire peut être construite à partir d'une série d'ondes sinusoïdales ou cosinusoïdales qui sont des multiples entiers d'une fréquence de base. Une FFT fait le contraire: elle prend une onde arbitraire et la transforme en amplitudes des ondes qui, si elles sont additionnées, créeraient l'onde arbitraire d'origine. Une façon encore plus simple de dire cela est que j'ai prévu d'utiliser un logiciel et le matériel FFT dans le Teensy pour déterminer s'il «entend» le battement d'aile d'un colibri à la fréquence à laquelle les battements d'aile se produisent. S'il « entend » un colibri, j'enverrai une commande à un appareil photo pour prendre une photo.

Ça a marché! Alors, comment ai-je fait, comment pourriez-vous le faire et comment pourriez-vous l'améliorer encore ?

Étape 3: À quoi ressemble un colibri en vol stationnaire ?

À quoi ressemble un colibri en vol stationnaire ?
À quoi ressemble un colibri en vol stationnaire ?

Tout d'abord, je devais déterminer à quelle fréquence j'entendrais les battements d'ailes du colibri. Pour le déterminer, j'ai utilisé mon iPhone. J'ai attaché l'iPhone à un trépied et lui ai fait enregistrer une vidéo au ralenti directement devant la mangeoire à colibris sur notre terrasse. Après un certain temps, j'ai retiré la caméra et j'ai téléchargé la vidéo. J'ai ensuite regardé la vidéo à la recherche d'un colibri devant la mangeoire. Quand j'ai trouvé une bonne séquence, j'ai compté le nombre d'images individuelles qu'il a fallu au colibri pour battre des ailes d'une position jusqu'à cette même position. Le ralenti sur l'iPhone est d'environ 240 images par seconde. J'ai observé un colibri planant devant la mangeoire et j'ai compté 5 images pour qu'il passe ses ailes de la position avant à la position arrière puis revienne en position avant. C'est 5 images sur 240. Rappelez-vous, nous entendons un son à chaque coup des volets d'aile du colibri (un sur le coup avant et un sur le coup arrière). Pour 5 trames pour un cycle ou une période, nous pouvons calculer la fréquence comme un divisé par la période, c'est-à-dire 1 / (5/240) ou 48 Hz. Cela signifie que lorsque ce colibri est en vol stationnaire, le son que nous entendons doit être le double de celui-ci ou environ 96 Hz. La fréquence est probablement plus élevée lorsqu'ils volent et ne planent pas. Il peut aussi être affecté par leur masse mais je pense que l'on peut supposer que la plupart des oiseaux de la même espèce ont à peu près la même masse.

Étape 4: Série Fourier et le Teensy

Série Fourier et les Teensy
Série Fourier et les Teensy

Le Teensy (j'ai utilisé un Teensy 3.2) est fabriqué par PJRC (www.pjrc.com). La FFT sera calculée sur un échantillon de son. Pour acquérir le son, PJRC vend une carte adaptateur audio pour Teensy (TEENSY3_AUDIO - 14,25 $). Ils vendent également un petit microphone qui peut être soudé à la carte adaptateur audio (MICROPHONE - 1,25 $). La carte adaptateur audio utilise une puce (SGTL5000) avec laquelle le Teensy peut parler via un bus série (I2S). Le Teensy utilise le SGTL5000 pour échantillonner l'audio du microphone et le numériser, c'est-à-dire créer un ensemble de nombres qui représentent le son que le microphone entend.

Une FFT n'est qu'une version rapide de ce qu'on appelle une transformée de Fourier discrète (DFT). Une DFT peut être effectuée sur un nombre arbitraire d'échantillons, cependant, une FFT doit avoir les échantillons stockés dans des ensembles qui sont des multiples binaires. Le matériel Teensy peut effectuer une FFT sur un ensemble de 1024 échantillons (1024=2^10), c'est ce que nous allons utiliser.

Une FFT produit généralement, en sortie, les amplitudes ET les relations de phase entre les différentes ondes représentées. Pour cette application, nous ne nous intéressons pas aux relations de phase, mais nous nous intéressons aux grandeurs et à leur fréquence.

La carte audio Teensy échantillonne l'audio à une fréquence de 44 100 Hz. Ainsi, 1024 échantillons à cette fréquence représentent un intervalle de temps de 1024/44100 ou environ 23,2 millisecondes. Dans ce cas, la FFT produira en sortie des amplitudes qui sont des multiples entiers de la période d'échantillonnage de 43 Hz (là encore, 1/0,0232 équivaut à environ 43 Hz). Nous voudrions rechercher des magnitudes qui sont environ le double de cette fréquence: 86 Hz. Ce n'est pas exactement la fréquence de nos battements d'ailes de colibri calculés mais c'est assez proche comme nous le verrons.

Étape 5: Utilisation des données de Fourier

Utilisation des données de Fourier
Utilisation des données de Fourier

Les bibliothèques fournies par PJRC pour le Teensy traiteront les échantillons et renverront un tableau de valeurs de magnitude. Nous nous référerons à chaque magnitude dans le tableau renvoyé comme à un bac. Le premier bac (au décalage zéro dans le tableau de données que nous récupérons) est le décalage CC de l'onde. Nous pouvons ignorer cette valeur en toute sécurité. Le deuxième bin (au décalage 1) représentera l'amplitude de la composante 43 Hz. C'est notre période de référence. Le bac suivant (au décalage 2) représentera l'amplitude de la composante 86 Hz, et ainsi de suite. Chaque case suivante est un multiple entier de la période de base (43 Hz).

Maintenant, c'est là que ça devient un peu bizarre. Si nous utilisions une FFT pour analyser un son parfait à 43 Hz, la FFT renverrait le premier bac à une grande amplitude et tous les autres bacs seraient égaux à zéro (encore une fois, dans un monde parfait). Si le son que nous avons capturé et analysé était de 86 Hz, alors le bac au décalage un serait zéro et le bac au décalage 2 (la deuxième harmonique) serait d'une grande amplitude et le reste des bacs serait à zéro, et ainsi de suite. Mais si nous capturions le son d'un colibri et qu'il était de 96 Hz (comme je l'ai mesuré sur mon seul oiseau), alors le décalage 2 bin @ 86 Hz aurait une amplitude légèrement inférieure (que l'onde parfaite de 86 Hz) et les bacs qui l'entourent (un plus bas et quelques plus haut) auraient chacun une valeur décroissante non nulle.

Si la taille de l'échantillon pour notre FFT était supérieure à 1024 ou si notre fréquence d'échantillonnage audio était inférieure, nous pourrions améliorer la résolution de nos bacs (c'est-à-dire plus petite). Mais même si nous modifiions ces éléments pour que nos bacs FFT soient des multiples de 1 Hz de la période de base, nous serions toujours confrontés à ce « déversement » de bacs. C'est parce que nous n'aurions jamais une fréquence d'aile qui atterrirait, toujours et exactement, sur un seul bac. Cela signifie que nous ne pouvons pas simplement baser notre détection d'un colibri sur la valeur du bac de décalage 2 et ignorer le reste. Nous avons besoin d'un moyen d'analyser les données dans quelques casiers afin d'essayer de leur donner un sens. Plus à ce sujet plus tard.

Étape 6: Commencer la construction

Commencer la construction
Commencer la construction
Commencer la construction
Commencer la construction

Pour mon prototype de détecteur de colibris, j'ai utilisé des broches mâles-mâles extra longues soudées aux broches du Teensy. Je l'ai fait pour pouvoir brancher le Teensy sur une petite planche à pain sans soudure. Je l'ai fait parce que j'ai supposé que je ferais beaucoup de changements dans le prototype et avec la maquette, je pourrais changer cela et simplement brancher des câbles là où j'en avais besoin. J'ai soudé des bandes femelles sur la face inférieure de la carte audio, ce qui permet de la brancher sur le Teensy. Le microphone est soudé sur le dessus de la carte audio (voir photos). Plus de détails sur l'assemblage peuvent être trouvés sur le site PJRC:

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

Étape 7: Matériel pour prendre une photo

Matériel pour prendre une photo
Matériel pour prendre une photo
Matériel pour prendre une photo
Matériel pour prendre une photo

J'ai (enfin, ma femme a) un appareil photo numérique Canon Rebel. Il y a une prise sur l'appareil photo qui vous permet de connecter une télécommande manuelle d'obturateur. J'ai acheté une télécommande manuelle chez B&H Photo. Le câble a la bonne prise pour s'adapter à la caméra à une extrémité et mesure environ 6 pieds de long. J'ai coupé le câble à l'extrémité près du boîtier de commande des boutons et j'ai dénudé les fils et les ai soudés à trois broches d'en-tête que je pouvais brancher sur la planche à pain. Il y a un fil nu qui est à la masse et deux autres signaux: la pointe est la gâchette (rose) et la bague (blanche) est la mise au point (voir les photos). Court-circuiter la pointe et/ou l'anneau au sol actionne l'obturateur et la mise au point sur l'appareil photo.

À l'aide d'un fil de liaison, j'ai fait passer une masse commune du Teensy à une zone où je pourrais l'utiliser sur la planche à pain. J'ai également connecté l'anode d'une LED à la broche 2 du Teensy et la cathode de la LED à une résistance (100-220 ohms) à la masse. J'ai également connecté la broche 2 du Teensy à une résistance de 10K et l'autre côté de la résistance j'ai connecté à la base d'un transistor NPN (un 2N3904 que l'on trouve partout). J'ai connecté l'émetteur du transistor à la masse et le collecteur que j'ai connecté aux fils blanc et rose du câble qui va à la caméra. Le fil dénudé, encore une fois, était relié à la terre. Chaque fois que la LED est allumée par le Teensy, le transistor NPN s'allumera également et déclenchera la caméra (et la mise au point). Voir le schéma.

Étape 8: Conception du système

Conception du système
Conception du système

Étant donné que les fréquences de battement d'ailes du Colibri ne dépassent probablement pas quelques centaines de Hz, nous n'avons donc pas vraiment besoin d'enregistrer des fréquences sonores supérieures, disons, à quelques centaines de Hz. Ce dont nous avons besoin, c'est d'un moyen de filtrer uniquement les fréquences que nous voulons. Un filtre passe-bande ou même passe-bas serait parfait. Traditionnellement, nous implémentions un filtre dans le matériel à l'aide d'amplificateurs opérationnels ou de filtres à condensateur commuté. Mais grâce au traitement numérique du signal et aux bibliothèques logicielles de Teensy, nous pouvons utiliser un filtre numérique (aucune soudure nécessaire… juste un logiciel).

PJRC dispose d'une excellente interface graphique qui vous permet de faire glisser et de déposer votre système audio pour le Teensy et la carte audio. Vous pouvez le trouver ici:

www.pjrc.com/teensy/gui/

J'ai décidé d'utiliser l'un des filtres en cascade biquadratiques fournis par PJRC pour restreindre les fréquences sonores du microphone (filtre). J'ai mis en cascade trois de ces filtres et les ai réglés pour un fonctionnement passe-bande à 100 Hz. Ce filtre permettra d'entrer dans les fréquences du système un peu au-dessus et un peu en dessous de la fréquence qui nous intéresse.

Dans le schéma fonctionnel (voir image), i2s1 est l'entrée audio de la carte audio. J'ai connecté les deux canaux audio à un mixeur puis aux filtres (le microphone n'est qu'un canal mais j'ai mixé les deux donc je n'ai pas eu à déterminer de quel canal il s'agissait… appelez-moi paresseux). Je lance la sortie du filtre vers la sortie audio (afin que je puisse entendre l'audio si je veux). J'ai également connecté l'audio des filtres au bloc FFT. Dans le schéma fonctionnel, le bloc étiqueté sgtl5000_1 est la puce du contrôleur audio. Il n'a pas besoin de connexions dans le schéma.

Après avoir fait toute cette construction de bloc, vous cliquez sur Exporter. Cela ouvre une boîte de dialogue dans laquelle vous pouvez copier le code généré à partir du diagramme et le coller dans votre application Teensy. Si vous regardez le code, vous pouvez voir qu'il s'agit d'une instanciation de chaque contrôle ainsi que des « connexions » entre les composants.

Étape 9: Coder

Code
Code

Cela prendrait trop de place dans ce Instructable pour passer en revue le logiciel en détail. Ce que je vais essayer de faire, c'est de mettre en évidence certains des éléments clés du code. Mais ce n'est pas une très grande application de toute façon. PJRC propose un excellent didacticiel vidéo sur l'utilisation de Teensy et des bibliothèques/outils audio (https://www.youtube.com/embed/wqt55OAabVs).

J'ai commencé avec un exemple de code FFT de PJRC. J'ai collé ce que j'ai obtenu de l'outil de conception de système audio dans le haut du code. Si vous regardez le code après cela, vous verrez une initialisation, puis le système commence à numériser l'audio du microphone. Le logiciel entre dans la boucle 'forever'() et attend que les données FFT soient disponibles en utilisant un appel à la fonction fft1024_1.available(). Lorsque les données FFT sont disponibles, je récupère une copie des données et la traite. Notez que je ne récupère les données que si la plus grande magnitude de bac est supérieure à une valeur définie. Cette valeur est la façon dont je règle la sensibilité du système. Si les bacs SONT au-dessus de la valeur définie, je normalise l'onde et la transfère dans un tableau temporaire pour traitement, sinon, je l'ignore et continue d'attendre une autre FFT. Je dois mentionner que j'utilise également la fonction de contrôle du gain du microphone pour régler la sensibilité du circuit (sgtl5000_1.micGain(50)).

Normaliser la vague signifie simplement que j'ajuste tous les bacs de sorte que le bac avec la plus grande valeur soit égal à un. Tous les autres bacs sont mis à l'échelle selon la même proportion. Cela rend les données plus faciles à analyser.

J'ai utilisé plusieurs algorithmes pour analyser les données, mais j'ai décidé d'en utiliser seulement deux. Un algorithme calcule l'aire sous la courbe formée par les bacs. Il s'agit d'un calcul simple qui ajoute simplement les valeurs des groupes dans la région d'intérêt. Je compare cette zone pour déterminer si elle est au-dessus d'un seuil.

L'autre algorithme utilise un tableau constant de valeurs qui représentent une FFT normalisée. Ces données sont le résultat d'une signature réelle (optimale) de colibri. J'appelle ça une haie. Je compare les données de couverture aux données FFT normalisées pour voir si les bacs correspondants sont à moins de 20 % les uns des autres. J'ai choisi 20% mais, cette valeur pourrait être ajustée facilement.

Je compte aussi combien de fois les algorithmes individuels pensent qu'ils ont une correspondance, c'est-à-dire pensent qu'ils entendent un colibri. J'utilise ce nombre dans le cadre de la détermination du colibri car un faux déclenchement peut se produire. Par exemple, lorsqu'un son est fort ou contient la fréquence des ailes des oiseaux, comme taper des mains, vous pourriez obtenir un déclencheur. Mais si le nombre est supérieur à un certain nombre (un nombre que je choisis), je dis que c'est un colibri. Lorsque cela se produit, j'allume la LED pour indiquer que nous avons un coup et ce même circuit déclenche la caméra via le transistor NPN. Dans le logiciel, j'ai réglé le temps de déclenchement de la caméra sur 2 secondes (le temps que la LED et le transistor soient allumés).

Étape 10: Montage

Montage
Montage

Vous pouvez voir sur la photo comment j'ai (sans ménagement) monté l'électronique. J'avais le Teensy branché sur une maquette qui était collée à une carte porteuse avec un autre compatible Arduino (inutilisé) (un Arduino Zero je pense). J'ai attaché le tout à un poteau d'auvent en métal sur ma terrasse (j'ai également ajouté un réducteur de tension au câble allant à la caméra). Le poteau était juste à côté de la mangeoire à colibris. J'ai alimenté l'électronique avec une petite brique d'alimentation LiPo que vous pourriez utiliser pour recharger un téléphone portable mort. La brique d'alimentation avait un connecteur USB dessus que j'ai utilisé pour alimenter le Teensy. J'ai passé le câble de déclenchement à distance sur la caméra et je l'ai branché. J'étais prêt pour une action d'oiseau !

Étape 11: Résultats

Résultats
Résultats

J'ai installé la caméra sur un trépied près du chargeur. J'ai mis l'appareil photo sur le bord avant du chargeur et je l'ai mis en mode Sport qui prend plusieurs photos rapides lorsque l'obturateur est enfoncé. Avec le temps d'arrêt de l'obturateur de 2 secondes, j'ai capturé environ 5 photos par événement déclencheur.

J'ai passé quelques heures à bidouiller avec le logiciel la première fois que j'ai essayé cela. J'ai dû ajuster la sensibilité et le nombre de coups successifs de l'algorithme. Je l'ai finalement modifié et j'étais prêt.

La première photo qu'il a prise était celle d'un oiseau qui a volé dans le cadre comme s'il prenait un virage à grande vitesse comme un avion de chasse (voir ci-dessus). Je ne peux pas vous dire à quel point j'étais excité. Je me suis assis tranquillement de l'autre côté du pont pendant un moment et j'ai laissé le système fonctionner. J'ai réussi à enregistrer beaucoup de photos mais j'en ai jeté pas mal. Il s'avère que parfois vous obtenez juste une tête ou une queue d'oiseau. De plus, j'ai de faux déclencheurs, ce qui peut se produire. Au total je pense avoir gardé 39 photos. Il a fallu aux oiseaux quelques voyages jusqu'à la mangeoire pour s'habituer au son de l'obturateur de l'appareil photo, mais ils ont finalement semblé l'ignorer.

Étape 12: Réflexions finales

Dernières pensées
Dernières pensées

C'était un projet amusant et ça marche. Mais, comme la plupart des choses, il y a beaucoup de place pour l'amélioration. Le filtre pourrait certainement être différent (comme un filtre passe-bas ou des modifications de l'arrangement et/ou des paramètres) et peut-être que cela pourrait le faire mieux fonctionner. Je suis également sûr qu'il existe de meilleurs algorithmes à essayer. J'en testerai un peu cet été.

On m'a dit qu'il existe un code d'apprentissage automatique open source… peut-être que le système pourrait être « formé » pour identifier les colibris ! Je ne suis pas sûr d'essayer ça mais peut-être.

Quelles autres choses pourraient être ajoutées à ce projet? Si l'appareil photo avait un horodatage, vous pourriez ajouter cette information aux images. Une autre chose que vous pouvez faire est d'enregistrer l'audio et de le sauvegarder sur une carte uSD (la carte audio PJRC a un emplacement pour une). L'audio enregistré peut être utilisé pour l'apprentissage d'un algorithme d'apprentissage.

Peut-être que quelque part une école d'ornithologie pourrait utiliser un appareil comme celui-ci ? Ils pourront peut-être glaner des informations telles que les heures d'alimentation, la fréquence d'alimentation et, avec les images, vous pourrez peut-être identifier des oiseaux spécifiques qui retournent se nourrir.

Mon espoir est que quelqu'un d'autre prolonge ce projet et partage ce qu'il fait avec les autres. Certaines personnes m'ont dit que ce travail que j'ai fait devrait être transformé en un produit. Je ne suis pas si sûr, mais je préférerais qu'il soit utilisé comme plate-forme d'apprentissage et pour la science.

Merci d'avoir lu!

Pour utiliser le code que j'ai posté, vous aurez besoin de l'IDE Arduino (https://www.arduino.cc/en/Main/Software). Vous aurez également besoin du code Teensyduino de PJRC (https://www.pjrc.com/teensy/td_download.html).

Conseillé: