Mikrofonkabelsystem regnmätaren (3 / 6 steg)
Steg 3: Få python programmet arbetar
Python måste importera några standardbibliotek. De flesta är redan installerade i Jessie, utom pyaudio. Installera det med
sudo lämplig-få installera python-pyaudio
Hämta python-programmet (rain.py) och från samma katalog kör det med
python -u rain.py
-U ser till att produktionen av programmet visas omedelbart på skärmen terminal. Utan att det resultatet är buffrade och kan ta lite tid att visas.
Om din webbkamera är erkänd korrekt, bör programmet öppna mikrofonen och skriva ut en massa saker och sedan något sådant, med en ny linje av siffror som förekommer om var 6 sekunder
........
Vi kommer att öppna enheten 1
Ave: 254 [0 703 479 266 222 185 195 161 177 150] vind nivå: 0
Ave: 274 [0 927 489 285 201 172 187 158 161 157] vind nivå: 0
Å andra sidan om du får detta
Någon ljudindataenhet hittade. Försök igen med device_debug = 1 för att se vilka enheter som PyAudio kan hitta. Hej då
har du några arbetar för att göra för att få pyaudio att erkänna din mikrofon. På runt linje 29 av rain.py, kontrollera att
device_debug = 1
och köra det igen med
python -u rain.py
Mot slutet av belastningen av saker bör du se några rader ser något liknande
{"defaultSampleRate": 16000.0, 'defaultLowOutputLatency':-1.0, 'defaultLowInputLatency': 0.0239375, "maxInputChannels": 1 L, 'structVersion': 2 L, 'hostApi': 0 L, "index": 2, 'defaultHighOutputLatency':-1.0, 'maxOutputChannels': 0 L, 'name': u'USB enhet 0x46d:0x0059: ljud (hw:1, 0) ","defaultHighInputLatency": 0.096}
En bör överensstämma med din webbkamera. Titta efter
'maxInputChannels': 1L
Detta säger är det en ingång dvs en mikrofon. Du kommer att behöva justera tester i om linje 41 för rain.py att få den att ansluta till ditt. För en enda USB-mikrofon som liknar min fungerade detta:
om dev ['maxInputChannels'] == 1 och dev ['defaultSampleRate'] == 16000.0:
Lycka till!
Antar att du lyckas, kan du ändra runt linje 29 till
device_debug = 0
Nu springa den igen och titta på siffrorna - ska en ny rad komma var 6 sekunder
Ave: 269 [0 873 411 304 224 185 195 161 180 158] vind nivå: 0
Ave: 280 [0 937 475 281 209 185 195 174 176 167] vind nivå: 0
Ave: 284 [0 791 649 296 228 171 188 173 182 164] vind nivå: 0
Varje rad visar resultatet av analys en bit av audiosignalen från mikrofonen. Ovanstående 3 rader är typiska för min mikrofon när det inte finns mycket ljud.
Den första delen är den genomsnittliga makten - runt om 280. Enheterna är godtyckliga - så vi kommer att kalibrera den i nästa steg.
Den andra delen - mellan hakparentes är effektnivåer i 10 frekvensband. Den lägsta som tvingas vara noll.
Den tredje delen är en uppskattning av vinden. Detta används för att minska risken för vindbrus registreras som regn.
Nu göra några ljud. Prata, sätta på lite musik, knacka på webbkameran eller vänta lite bullriga regn (om webbkameran är redan i din vinterträdgård). Du borde se något lik
Ave: 307 [0 739 584 400 317 229 231 210 189 173] vind nivå: 54
Ave: 14138 [0 13832 21242 10181 14903 24935 13589 30922 7767 4013] vind nivå: 2155
Ave: 10666 [0 14417 18740 16290 8441 9277 9960 17068 7375 5098] vind nivå: 6093
Så vi kan se att starkare ljud göra högre siffror motsvarar högre energinivå. Om din inte ändras, gå tillbaka och kontrollera att mikrofonen verkligen fungerar.
Lämna den igång i minst 5 minuter så kan du se att lägger den resultaten till filen /run/shm/rain1.csv i ett liknande format
21/10/2015 17:05:02, 0, 3171, 1787, 1636, 959, 362, 244, 424, 256, 204, 204, 0,0, 1228
Detta är en CSV-fil (kommaavgränsade värden) redo att läsas av din favorit kalkylblad eller web skriptspråk.
Det första värdet är datum och tid.
De närmaste 10 är effektnivåer 10 frekvensbanden, medelvärde över de 5 minuterna.
Nästa är den beräknade nederbörden hittills denna dag.
Sist är den medelvind under de sista 5 minuterna.
Jag tyckte att det genomsnittliga värdet av det högsta bandet var den bästa korrelationen till nederbörd. 4. värdet var liknande till den högsta för regn, men var mycket känslig för vind, så används för att undvika vinden från räknar som regn.
Varje dygn, vid midnatt, det sparar dagens regn i /home/pi/rain_daily.csv och återställer den nederbörd som sparats i /run/shm/rain1.csv
Om du vill, kan du titta på kommentarerna i rain.py att se hur det fungerar. Du kommer antagligen behöva göra detta om du behöver ändra något eller kalibrera den för din mikrofon.