Raspberrypi.solar: Unterschied zwischen den Versionen
Root (Diskussion | Beiträge) (→fft) |
Root (Diskussion | Beiträge) |
||
Zeile 116: | Zeile 116: | ||
== Drehzahl der Pumpe == | == Drehzahl der Pumpe == | ||
Damit ich nicht in die Elektronik der Solarstation eingreifen muss (die Pumpe wird per PWM betrieben) kam mir die Idee die Drehzahl der Pumpe über ihr Geräusch zu bestimmen. Eine USB Soundkarte für den Raspi und ein Mikrofon reichen aus. Ich mache eine Tonaufnahme um zu sehen ob das auswertbar ist. Und tatsächlich es lassen sich deutliche "Peeks" erkennen und hoffentlich auswerten. Schlimm ist der "Brumm" der bei 50,100,150,200 Hz usw. alles überlagert. Interessant ist das es mehrere Frequenz-Bereiche gibt die bei Pumpenbetrieb ansprechen, wegen dem Übersprechen der 50 Hz Bereiche muss je nach Drehzahl eine andere Frequenz fokusiert werden. Eine Herausforderung! Die Aufnahme einer "Stille" also Drehzahl 0% sollte immer vom Nutzsignal abgezogen werden, bzw. die Stille sollte als Filter dienen. | |||
=== als cron-Job === | === als cron-Job === | ||
Zeile 124: | Zeile 124: | ||
=== fft === | === fft === | ||
Für die notwendige Fast-Fourier-Transformation brauche ich eine Software (zunächst auf dem PC, später auf dem Rasp!). | |||
https://academo.org/demos/spectrum-analyzer/ | https://academo.org/demos/spectrum-analyzer/ | ||
Zeile 131: | Zeile 133: | ||
[[Datei:Pumpendrehzahl-Raspberry-Pi.png]] | [[Datei:Pumpendrehzahl-Raspberry-Pi.png]] | ||
Für den Raspi stelle ich mir das so vor, dass er das native bestmögliche Sample der Soundkarte direkt in ein C Programm einliesst und eine schöne FFT durchführt. Ein Filter der Stille drauflegt und dann qualitativ beurteilt, ob es 0,15,20,30,40,50,60,70,80,90,100 Prozent sein könnten, dazu liegen Vergleichs-Peeks vor auf die er fokusiert. Eine Herausforderung! | |||
== Counter == | == Counter == |
Version vom 31. März 2017, 10:16 Uhr
Vorlauf/Rücklauf Grafik
rsync -av orgamon-2.dyndns.org::srv/*.txt /root/temp
program t;
{$mode objfpc}
uses
Classes, Sysutils;
const
cTemp_IllegalValue = -1000;
cSensorRoot = '/sys/bus/w1/devices/';
cSensorVal = '/w1_slave';
cSensorCPU = '/sys/class/thermal/thermal_zone0/temp';
cValue_Granularity = 5000;
cValue_MessureTime = 750;
cFormat_Revision = 1; //
function rTemp(SensorID: string) : extended;
var
sl : TStringList;
k : Integer;
value: string;
d: extended;
begin
result := cTemp_IllegalValue;
sl := TStringList.create;
sl.loadFromFile(cSensorRoot+SensorID+cSensorVal);
repeat
if (sl.Count<>2) then
break;
if (pos('YES',sl[0])<28) then
break;
k := pos('t=',sl[1]);
if (k<>28) then
break;
value := copy(sl[1],30,MaxInt);
// writeln ('[',value,']');
d := StrToFloat(value);
result := Round(d / 100.0) / 10.0;
until true;
sl.free;
end;
var
temp_TimeStamp : TDateTime;
temp_Vorlauf,
temp_Ruecklauf : extended;
temp_Diff : extended;
LogFile : TextFile;
begin
while true do
begin
// ATOMIC BEGIN
temp_Vorlauf := rTemp('28-000005602b9d');
temp_Ruecklauf := rTemp('28-000005603987');
temp_TimeStamp := now;
// ATOMIC END
// Plausibilisierung
repeat
if (temp_Vorlauf=cTemp_IllegalValue) then
break;
if (temp_Ruecklauf=cTemp_IllegalValue) then
break;
// Berechnungen
temp_Diff := temp_Ruecklauf - temp_Vorlauf;
// Ausgabe
AssignFile(LogFile,'/srv/smb/temp/temperatur-' + FormatDateTime('YYYYMMDD',temp_TimeStamp) + '.log.txt');
{$i-}
append(LogFile);
{$i+}
if (IOresult<>0) then
begin
rewrite(LogFile);
writeln(LogFile,'FORMAT;MOMENT;VORLAUF;RUECKLAUF;DIFFERENZ');
end;
writeln(LogFile,
{} cFormat_Revision,';',
{} FormatDateTime('YYYYMMDD hh:mm:ss', temp_TimeStamp),';',
{} temp_Vorlauf:0:1,';',
{} temp_Ruecklauf:0:1,';',
{} temp_Diff:0:1 );
CloseFile(LogFile);
until true;
sleep(cValue_Granularity - 2 * cValue_MessureTime);
end;
end.
Vorlauf/Rücklauf messung
Drehzahl der Pumpe
Damit ich nicht in die Elektronik der Solarstation eingreifen muss (die Pumpe wird per PWM betrieben) kam mir die Idee die Drehzahl der Pumpe über ihr Geräusch zu bestimmen. Eine USB Soundkarte für den Raspi und ein Mikrofon reichen aus. Ich mache eine Tonaufnahme um zu sehen ob das auswertbar ist. Und tatsächlich es lassen sich deutliche "Peeks" erkennen und hoffentlich auswerten. Schlimm ist der "Brumm" der bei 50,100,150,200 Hz usw. alles überlagert. Interessant ist das es mehrere Frequenz-Bereiche gibt die bei Pumpenbetrieb ansprechen, wegen dem Übersprechen der 50 Hz Bereiche muss je nach Drehzahl eine andere Frequenz fokusiert werden. Eine Herausforderung! Die Aufnahme einer "Stille" also Drehzahl 0% sollte immer vom Nutzsignal abgezogen werden, bzw. die Stille sollte als Filter dienen.
als cron-Job
# sound-Aufnahme */7 * * * * root arecord --use-strftime -f dat -r 48 -D plughw:1,0 -c 1 -d 120 /srv/smb/temp/drehzahl-\%Y\%m\%d-\%H\%M00-1.wav
fft
Für die notwendige Fast-Fourier-Transformation brauche ich eine Software (zunächst auf dem PC, später auf dem Rasp!).
https://academo.org/demos/spectrum-analyzer/ http://www.qsl.net/dl4yhf/spectra1.html
File -> Audio File & Stream Analysis -> Analyse and Play File (With dsp)
Für den Raspi stelle ich mir das so vor, dass er das native bestmögliche Sample der Soundkarte direkt in ein C Programm einliesst und eine schöne FFT durchführt. Ein Filter der Stille drauflegt und dann qualitativ beurteilt, ob es 0,15,20,30,40,50,60,70,80,90,100 Prozent sein könnten, dazu liegen Vergleichs-Peeks vor auf die er fokusiert. Eine Herausforderung!
Counter
gpio readall
- Einen Counter auf einen GPIO Pin setzen (mit wiringpi) und den Wert jede Sekunde in memchached schreiben
- Andere Module können dann des "Herz" Wert aus dem memchached lesen
LiveGraph
http://stackoverflow.com/questions/17354163/dynamically-update-values-of-a-chartjs-chart