======Les esgourdes ====== C'est un petit système autonome qui enregistre les sons ambiants pendant plusieurs semaines sur sa mémoire. * il est autonome , fonctionne sur une grosse pile car il consomme moins de 200mA (voir 150mA) sous 5V * pile existante de 9V/130Ah => 5V et 200mA => rapport de 9/5/0.2 = x9 * si l'horloge/relai sont programmés pour 4h/jour cela fait 292jours * de 9V a 5V rapport de 1.8 et 5 pour de 1 à 200mA d'ou un rapport de x9 au Ah de la pile ? * on récolte ses sons en s'approchant et se connectant sur son réseau WiFi ESGOURDE car c'est aussi un point d'accès WiFi * les sons sont datés car la machine embarque une horloge * les sons sont compressés en FLAC * une version futur les transmettra par radio * cette version sélectionnera par comparaison d'empreintes sonores certain son plutot que d'autres * on pourrait aussi étudier une alimentation hybride super-capacité plus panneaux solaire pour quelques prise de sons sur des horaires réduit * https://www.zonetronik.com/des-supercondensateurs-remplacent-les-batteries-des-alimentations-de-secours/ Et donc à quoi ça sert? * prendre des plage sonores dans des espaces précis dans les alpes pour comptabiliser certaines espèces d'oiseaux * comptabiliser des champs d'oiseaux ou de chauve-souris ===== Matériel ===== * Nanopi DUO * test aussi avec Raspberry pi zero w, LinkIt smart 7688, Orange Pi zero * MEM microphone analogique * http://www.analog.com/media/en/technical-documentation/obsolete-data-sheets/ADMP401.pdf * Grosse pile Saline genre pile de cloture * régulateurs * step-down 9V vers 5v 2A max mais à faible bruit (>150kHz voir 300) * 3,3v http://pdf1.alldatasheet.com/datasheet-pdf/view/22618/STMICROELECTRONICS/L78L33AB.html * horloge RTC sur base Dallas DS1302 DS1307 ou DS3231 * esp8266 ou arduino mini pro en 3V! * relai bistable , https://www.gotronic.fr/art-relais-bistable-g6bk-5v-4016.htm * microSD 16Go , bon compromis taille * Plaque veroboard epoxy à bandes cuivrees au pas de 2.54mm Vivement conseiller pour l'installation : * un adaptateur USB / Série a connecter sur les pin Rx/Tx/Gnd * un programme genre gtkterm Les piles: * https://www.cloture.pro/materiel-clotures-animaux/materiels-pour-electrificateur/piles-et-batteries-pour-electrificateur/ * https://www.agrizone.net/elevage/cloture/piles-batterie-de-cloture/ ===== Connexions ===== ==== mini arduino pro ==== * rx/tx sur les tx / rx de la duo uart1 * i2c A4=SDA A5=SCL * GND et 3V+ ==== relai ==== G6BK-1114P-US: 1-pole Double-winding Latching Model 1 2 3 4 S:Set coil + + + + R Reset coil S R --/___ + + 6 5(+) http://omronfs.omron.com/en_US/ecb/products/pdf/en-g6b.pdf ===== Logiciels ===== Installation d'une debian à partir d'armbian * linux en mainstream (4.14 pour moi) * low-latensy Desktop à choisir dans les parametre Kernel/ Après etre rentré sur la machine , pass 1234 de base sur l'armbian, faire un utilisateur pi * armbian-config * freez linux kernel , pour ne pas perdre nos parametres * ouvrir les modules : analog-codec i2c0 * fermer les usb ==== Partie horloge ==== elle est connectée sur le bus i2c-0 cat <> /etc/rc.local # mise en route de l'horloge su root -c "echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-0/new_device" sleep 3 #ecriture de l'heure #hwclock -w -f /dev/rtc1 # mise a l heure du systeme su root -c "hwclock -s -f /dev/rtc1" #lecture de l'heure su root -c "hwclock -r -f /dev/rtc1 >> /var/log/mise_en_route.log" EOF === Paramétrages système === * apt install dnsmasq # sur le debian il faut le faire avant , mais pas sur ubuntu) * armbian-config * installation hostapd ( peut importe les parametres ici) ou apt install hostapd en dehors.... * modification hostname, timezone , esgourde-1 ... * === Mise à l'heure: === * hostapd n'étant pas encore déclaré, choisir un réseau WiFi / Internet pour s'y connecter, ou connecter un cable sur l'eth0 , le cliet ntp met la machine a l'heure * ou faire date xxx genre pour mettre la date et l’heure au 11 Janvier 2012 – 13h00 : //date 0111130012// * hwclock -w -f /dev/rtc1 # met l'horloge a jour * hwclock -r -f /dev/rtc1 # vérifier si c'est ok * reboot pour re verifier que l'heure est bien la meme sans une connexion réseau! ==== Partie dnsmasq.conf ==== hostapd étant déjà installé , on passe dnsmasq en version portail captif cat < /etc/dnsmasq.conf interface=wlan0 # Use interface wlan0 listen-address=192.168.4.51 # Explicitly specify the address to listen on address=/#/192.168.4.51 # portail captif except-interface=eth0 # ne rien faire sur eth0 server=192.168.4.51 # Forward DNS requests local resolv-file=/etc/resolv.conf.portail dhcp-range=192.168.4.100,192.168.4.150,12h # Assign IP addresses with 12 hour lease time EOF ==== Partie serveur de fichier ==== On utilise nginx comme petit serveur d'une page qui listera les fichiers son présents. il suffit d'une modif fichier /etc/nginx/sites-enabled/default , on ajoute "autoindex on;" apt install nginx sed -i -e "s/404\;/404\;\n\t\tautoindex on\;/" /etc/nginx/sites-enabled/default ==== Partie programmation de l'alimentation ==== une ESP8266 commande un relai bistable, l'ESP est commandée par l'entrée serie 9600bauds: * envoie du nombre de minutes de sommeil DUO => ESP * réponse du nombre minutes luent ESP => DUO * si les nombres sont identique DUO envoie "OK" DUO => ESP * si l'ESP reçoit "OK" elle fait basculer le relai en éteint et passe en attente du nombre de minutes * si le nombre de minute est passé , l'ESP fait basculer le relai en allumé * on pourra prévoir que l'ESP est en mode AP (manip) et donne accès à la commande du relai code: ... ==== Partie enregistrement audio ==== - Régler le son avec alsamixer , penser a fermer l'entree et bien ouvrir MIC1 en capture 'N' ',' 'M' - routine de prise de son avec détection de niveau ,filtre - .../... c'est en cours Pistes ecasound * http://www.eca.cx/ecasound/Documentation/ecasound_manpage.html Pistes plutot python: * https://stackoverflow.com/questions/892199/detect-record-audio-in-python/6743593#6743593 * https://github.com/tyiannak/pyAudioAnalysis * https://wiki.musicbrainz.org/Fingerprinting * https://www.vamp-plugins.org/ * https://github.com/tracek/Ornithokrites * http://essentia.upf.edu/documentation/documentation.html Pistes plutot puredata * https://github.com/GiantSteps/MC-Sonaar Ce sont des super pistes mais nous nous contenterons de faire des enregistrements de tout ce qui fait suffisamment de bruit, le filtrage se faisant après à l'oreille. === Test RaspberyPi Zero + AudioInjector Zero === conso 8mA sans Wifi 17mA avec , +2mA en phase d'enregistrement /boot/config.txt : hdmi_force_hotplug=1 systemctl disable triggerhappy.service systemctl disable dbus.service systemctl disable systemd-udevd-control.socket systemctl disable systemd-udevd-kernel.socket dphys-swapfile uninstall systemctl disable dphys-swapfile.service systemctl disable dhcpcd.service => necessitera dhcpcd -g pour retrouver la carte wifi si presente faire coller dans le rc.local , une fois que la carte son est opérationnelle systemctl stop udev.service info par la https://cdn-learn.adafruit.com/downloads/pdf/usb-audio-cards-with-a-raspberry-pi.pdf echo " /usr/bin/tvservice -o #su root -c alsactl -f alsactl_conf.ok restore # faire store avant su pi -c /usr/local/bin/boucle_enregistre 2>&1 > /tmp/boucle.log & ">>/etc/rc.local fichier : /usr/local/bin/boucle_enregistre #!/bin/bash mkdir -p /home/pi/enregistrements cd /home/pi/enregistrements while true do #arecord -d 5 -fcd esgourde_`date "+%F_%T"`.wav # ecasound -t:duree en secondes # ecsound -f bit,channel,rate # -efh et -efl filtre passe haut et passe bas, fonction du micro # -t duree d'un fichier NOMFIC='/home/pi/enregistrements/'`date "+%Y%m%d_%H%M%S"`'.wav' export PS1='${debian_chroot:+($debian_chroot)}\u@record:\w\$' if [ -f $NOMFIC ] ; then NOMFIC=${NOMFIC%.*}X.wav fi ecasound -t:3600 -f:16,1,44100 -efh:100 -efl:15000 -i alsahw,0,0 -o $NOMFIC sleep 10 done chmod 755 /usr/local/bin/boucle_enregistre /etc/fstab ajout : /dev/mmcblk0p3 /home/pi/enregistrements vfat defaults,noatime,user,umask=0000 0 1 none /dev/shm tmpfs defaults 0 0 mkdir -p /home/pi/enregistrements chmod 777 /home/pi/enregistrements une liaison usb plutot que wifi/réseau ...: https://learn.adafruit.com/turning-your-raspberry-pi-zero-into-a-usb-gadget/ethernet-gadget Blinder le système: https://hallard.me/raspberry-pi-read-only/ genre dphys-swapfile uninstall dphys-swapfile swapoff apt remove --purge logrotate dphys-swapfile anacron wolfram-engine triggerhappy echo " fastboot noswap ro">>/boot/cmdline.txt apt-get install busybox-syslogd; dpkg --purge rsyslog rm -rf /var/lib/dhcp/ /var/lib/dhcpcd5 /var/run /var/spool /var/lock /etc/resolv.conf ln -s /tmp /var/lib/dhcp ln -s /tmp /var/lib/dhcpcd5 ln -s /tmp /var/run ln -s /tmp /var/spool ln -s /tmp /var/lock touch /tmp/dhcpcd.resolv.conf; ln -s /tmp/dhcpcd.resolv.conf /etc/resolv.conf sed -i /etc/systemd/system/dhcpcd5 -e "s/PIDFile=/run/dhcpcd.pid/PIDFile=/var/run/dhcpcd.pid" rm /var/lib/systemd/random-seed ln -s /tmp/random-seed /var/lib/systemd/random-seed sed -i /lib/systemd/system/systemd-random-seed.service -e "21iExecStartPre=\/bin\/echo \"\" \>\/tmp\/random-seed\n" sed -i /etc/cron.hourly/fake-hwclock -e "7i mount -o remount,rw \/" -e "8i mount -o remount,ro \/" ==== retour et fin ==== * armbian-config * fermer tous les services, fake-hwclockt,udev,dbus,rsync,rsyslog,unattended-upgrades,ntp * passer le systeme en read only #/var et /etc seront en read only (cela ne marche pas sur debian seul mais ubuntu) Comme il y a pour moi plusieurs esgourdes , leur ip seront 192.168.4.51 192.168.4.52 etc... echo "esgourde-1">/etc/hostname && hostname esgourde-1 echo " 127.0.0.1 localhost www.esgourde-1.local esgourde-1.local esgourde-1 192.168.4.51 www.esgourde-1.local esgourde-1.local esgourde-1 " > /etc/hosts echo "nameserver 192.168.4.51 nameserver 127.0.0.1" > /etc/resolv.conf.portail cat < /etc/network/interfaces source /etc/network/interfaces.d/* allow-hotplug eth0 iface eth0 inet dhcp auto lo iface lo inet loopback allow-hotplug wlan0 iface wlan0 inet static address 192.168.4.51 netmask 255.255.255.0 network 192.168.4.0 broadcast 192.168.4.255 EOF systemctl stop network-manager systemctl disable network-manager ==== Autre approche ==== Dans ce cas on considère la carte ARM comme juste un enregistreur 'passif' qu'on pilote par l'ESP/Arduino par un fichier de commandes de type shell. C'est l'ESP/Arduino qui allume et éteind l'ARM et lui envoit des commandes genre 'date -s ...;' , 'cd /home/pi/entregistrement;' , 'ecasound ....;' Cela permettrait aussi de piloter par shell a travers l'ESP/WiFi une carte ARM ou autre dépourvu d'horloge ou de certain capteur mais sachant interpréterdu bash ou du shell. pistes : * https://github.com/todbot/arduino-serial/ * http://todbot.com/blog/2013/04/29/arduino-serial-updated/ ==== Et après ==== Peut etre quand utilisant un logiciel de reconnaissance de mot tres vague, avec une base de cris d'oiseaux on pourrait avoir une forme de déclencheur qui filtrerait un peu ce qu'on enregistre * http://docs.kitt.ai/snowboy/