======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/