Raspberrypi.solar: Unterschied zwischen den Versionen

Aus OrgaMon Wiki
Zur Navigation springen Zur Suche springen
Zeile 116: Zeile 116:
== Drehzahl der Pumpe ==
== Drehzahl der Pumpe ==


arecord -f dat -r 48 -D plughw:1,0 -c 1 -d 120 test-3.csv
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, 11: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