Outils pour utilisateurs

Outils du site

No renderer 'odt' found for mode 'odt'

projets:esgourde

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

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

Vivement conseiller pour l'installation :

  • un adaptateur USB / Série a connecter sur les pin Rx/Tx/Gnd
  • un programme genre gtkterm

Les piles:

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

  1. Régler le son avec alsamixer , penser a fermer l'entree et bien ouvrir MIC1 en capture 'N' ',' 'M'
  2. routine de prise de son avec détection de niveau ,filtre
  3. …/… c'est en cours

Pistes ecasound

Pistes plutot python:

Pistes plutot puredata

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 <<EOF > /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 :

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

projets/esgourde.txt · Dernière modification : 2024/02/09 16:56 de 127.0.0.1