Stap 3: Het python programma werkend krijgen
Het python programma moet een paar standaard bibliotheken importeren. De meeste zijn al geïnstalleerd in Jessie, behalve pyaudio. Installeren met
python -u rain.py
Download het python programma (rain.py) en uit de dezelfde directory Voer het met
........ We will open device 1 ave: 254 [ 0 703 479 266 222 185 195 161 177 150] wind level: 0ave: 274 [ 0 927 489 285 201 172 187 158 161 157] wind level: 0
De -u zorgt ervoor dat de output van het programma onmiddellijk in het terminalvenster verschijnt. Zonder dat de uitvoer in een buffer is opgeslagen en kan even duren om te verschijnen.
Als uw webcam correct wordt erkend, moet het programma openen de microfoon en afdrukken van een lading van spullen en dan zoiets als dit, met een nieuwe lijn van cijfers over elke 6 seconden
No sound input device found. Try again with device_debug = 1 to see what devices PyAudio can find. Bye
Aan de andere kant als je dit
device_debug = 1
je hebt wat werk te doen om pyaudio te erkennen de microfoon. Bij rond lijn 29 van rain.py, Controleer of
python -u rain.py
en voer het opnieuw met
{'defaultSampleRate': 16000.0, 'defaultLowOutputLatency': -1.0, 'defaultLowInputLatency': 0.0239375, 'maxInputChannels': 1L, 'structVersion': 2L, 'hostApi': 0L, 'index': 2, 'defaultHighOutputLatency': -1.0, 'maxOutputChannels': 0L, 'name': u'USB Device 0x46d:0x0059: Audio (hw:1,0)', 'defaultHighInputLatency': 0.096}
Tegen het einde van de lading van spullen moet u een paar regels op zoek iets als
'maxInputChannels': 1L
Men moet overeenkomen met uw webcam. Zoeken
if dev['maxInputChannels'] == 1 and dev['defaultSampleRate'] == 16000.0 :
Dit zegt dat het een input d.w.z. een microfoon. U zal moeten aanpassen de praktijktesten over lijn 41 van rain.py ertoe brengen om te verbinden met de jouwe. Dit werkte voor een enkele USB-microfoon die vergelijkbaar met de mijne:
device_debug = 0
Succes!
Ervan uitgaande dat u slaagt, kunt u rond lijn 29
ave: 269 [ 0 873 411 304 224 185 195 161 180 158] wind level: 0ave: 280 [ 0 937 475 281 209 185 195 174 176 167] wind level: 0 ave: 284 [ 0 791 649 296 228 171 188 173 182 164] wind level: 0
Nu voert u het opnieuw en kijk naar de cijfers - moet een nieuwe regel komen elke 6 seconden
ave: 307 [ 0 739 584 400 317 229 231 210 189 173] wind level: 54ave: 14138 [ 0 13832 21242 10181 14903 24935 13589 30922 7767 4013] wind level: 2155 ave: 10666 [ 0 14417 18740 16290 8441 9277 9960 17068 7375 5098] wind level: 6093
Iedere regel geeft het resultaat van de analyse een brok van het geluidssignaal uit de microfoon. De bovenstaande 3 lijnen zijn kenmerkend voor mijn microfoon wanneer er niet veel is geluid.
Het eerste deel is het gemiddeld vermogen - ongeveer 280. De eenheden zijn willekeurige - dus we hebben zullen te kalibreren, hoeft in de volgende stap.
Het tweede deel - tussen de vierkante haken zijn de machtsniveaus in 10 frequentiebanden. De laagste een gedwongen is nul te zijn.
Het derde deel is een schatting van de hoeveelheid wind. Dit wordt gebruikt voor het verminderen van de kans op windlawaai wordt geregistreerd als regen.
Nu wat lawaai maken. Praten, op muziek gezet, tik op de webcam of wachten op wat luidruchtig regen (als de webcam al in uw serre is). U ziet iets als
21/10/2015 17:05:02,0,3171,1787,1636,959,362,244,424,256,204,204,0.0,1228
Zodat we zien kunnen dat luider geluiden maken hogere getallen overeenkomen met hogere machtsniveaus. Als jou niet verandert, ga terug en controleer dat uw microfoon echt werkt.
Laat draaien voor ten minste 5 minuten, dan u zien kunt dat het de resultaten worden toegevoegd aan het bestand /run/shm/rain1.csv in een vergelijkbare indeling
ave: 269 [ 0 873 411 304 224 185 195 161 180 158] wind level: 0ave: 280 [ 0 937 475 281 209 185 195 174 176 167] wind level: 0 ave: 284 [ 0 791 649 296 228 171 188 173 182 164] wind level: 0
Dit is een csv (door lijstscheidingstekens gescheiden waarden) klaar om te worden gelezen door uw favoriete spreadsheet of web scripting taal.
De eerste waarde is de datum en tijd.
De volgende 10 zijn de machtsniveaus in de 10 frequentiebanden, gemiddeld over de 5 minuten.
Het volgende is de geschatte regenval tot nu toe die dag.
De laatste is het niveau van de gemiddelde wind over de laatste 5 minuten.
Ik vond dat de gemiddelde waarde van de hoogste frequentieband de beste correlatie met neerslag. De 4e waarde was vergelijkbaar met de hoogste voor regen, maar was zeer gevoelig voor wind, dus wordt gebruikt om te voorkomen dat de wind uit het tellen als regen.
Elke 24 uur om middernacht, het slaat op de dag van de regenval in /home/pi/rain_daily.csv en stelt de regenval opgeslagen in /run/shm/rain1.csv
Als u wilt, kunt u kijken naar de opmerkingen in rain.py om te zien hoe het werkt. Waarschijnlijk zul je om dit te doen als u wilt iets veranderen of het kalibreren van de microfoon.