Go Down

Topic: Auswertung Impulse Volkswindmesser (Read 9959 times) previous topic - next topic

jurs


momentan verwende ich folgenden Sketch:

unsigned long i = 0;

void Interrupt()
{
  noInterrupts(); 
  i = micros();
  interrupts();
}


Also erstmal zum Sketch: Der weist einige extrem merkwürdige Fehler auf.
Das ständige attachInterrupt in der loop hat rudirabbit bereits angesprochen.

Weiterhin können Interrupts gar nicht von anderen Interrupts unterprochen werden, daher ist das Sperren und Freigeben von Interrupts in der Interrupt-Behandlungsroutine völlig überflüssig. Es reicht daher vollkommen:
void Interrupt()
{
  i = micros();
}

ABER: Variablen, auf die sowohl von normalem Code aus als auch von Interrupt-Code aus zugegriffen wird, müssen zwingend mit dem Attribut "volatile" deklariert werden, also:

volatile unsigned long i = 0;

Ich schau mir das nochmal näher an, was der Code machen soll und poste ggf. mal Alternativ-Code.


Ich habe, auch wenn das Windrad stand, beim Gewitter, aber auch wenn ich ein Netzteil an den Arduino angeschlossen habe, sehr große Werte bekommen. Ich tippe da dann doch eher auf die Störsignal-Variante.


Ja, die Beschreibung klingt schwer nach Störungen.
Der PullDown-Widerstand ist wirklich korrekt angeschlossen?
Das Netzteil ist wohl ein sogenanntes "Schaltnetzteil"?
Hat das irgendwelche Prüfzeichen drauf, TÜV, GS, VDE, oder ist das Chinaware ohne alles?


Werd das ganze mal mit nem kleineren Widerstand ausprobieren :).


Genau, erstmal den kräftigeren PullDown-Widerstand mit dem kleineren Ohm-Wert testen, 1K statt 12K an der langen Reed-Sensorzuleitung.


Ich würde auch gern zur festen Installation des Windmessers ein Koaxialkabel verwenden, welches ja abgeschirmt sein müsste, oder?


Koaxkabel haben heute oft sogar eine zweifache Abschirmung und kosten ganz gut Geld.
Aber selbst einfaches Telefon-Verlegekabel ist mit so einer Art hauchfeiner Alufolie abgeschirmt. Kann man aber nicht Löten, die Folien-Abschirmung muss wohl per Schraubanschluss angeschlossen werden.


Mir stellt sich da nun jedoch die Frage, wie ich es an den Arduino anschließen kann. Der Innenleiter ist ja easy, aber wie mach ich es mit dem Außenleiter? Ich Stück vom Kabel zurückschneiden und den Außenleiter verdrillen zum anschließen?


Die Abschirmung müßte irgendwo an eine Erdung angeschlossen werden, mindestens an einem Ende.
Normalerweise würde der Windmesser wohl auf einem geerdeten oder mit Blitzableiter geschützten Mast montiert werden. Dann würde die Abschirmung auf der Sensorseite an die Erdung des Mastes angeschlossen werden. Und auf der Arduino-Seite an den Schutzleiter des Stromnetzes. Oder ein Wasser- oder Heizungsrohr (falls die Heizungsanlage Metallrohre hat) im Haus.

BigBangTheory

Quote
Also erstmal zum Sketch: Der weist einige extrem merkwürdige Fehler auf.
Das ständige attachInterrupt in der loop hat rudirabbit bereits angesprochen.


Das "attachInterrupt(0,Interrupt,RISING);" habe ich im loop, weil ich ein Stück davor im loop ein "detachInterrupt(0);" eingebaut habe, damit meine Ausgabe, welche jede Sekunde einmal statt findet, nicht von einem Interrupt zerschossen wird.

Die Interrupt-Routine und die Variablenbezeichnung "volatile unsigned long i = 0;" habe ich abgeändert :).

Quote
Ja, die Beschreibung klingt schwer nach Störungen.
Der PullDown-Widerstand ist wirklich korrekt angeschlossen?
Das Netzteil ist wohl ein sogenanntes "Schaltnetzteil"?
Hat das irgendwelche Prüfzeichen drauf, TÜV, GS, VDE, oder ist das Chinaware ohne alles?


Das Netzteil das ich verwende ist ein Festspannungs-Schaltnetzteil von Conrad Elektronik. Hier der Link dazu:

http://www.conrad.de/ce/de/product/514209/VOLTCRAFT-FPPS-9-6W-Steckernetzteil-Steckernetzgeraet-Festspannungs-Schaltnetzteil-9V-660mA-6-Watt

Quote
Koaxkabel haben heute oft sogar eine zweifache Abschirmung und kosten ganz gut Geld.
Aber selbst einfaches Telefon-Verlegekabel ist mit so einer Art hauchfeiner Alufolie abgeschirmt. Kann man aber nicht Löten, die Folien-Abschirmung muss wohl per Schraubanschluss angeschlossen werden.


Mal ne doofe Frage, aber...ich will Kabelkanäle verwenden, durch die ich mein Y-Kabel ziehe. Was ist, wenn ich um das Y-Kabel Alufolie Wickel (1-2 Lagen, Klebestreifen dran und fertig. Das wär doch dann auch ne Abschirmung und vor allem günstiger als nen Koax-Kabel, oder?

Das mit dem Widerstand wird morgen ausprobiert :).

Gruß

Serenifly

F-Stecker <-> BNC/F Adapter <-> BNC Buchse wäre ne Möglichkeit für Koaxkabel. Letztere gibt es zum Löten und mit Klemmen

BigBangTheory

Das hört sich gut an. Also könnte ich dafür bspw. folgendes Koaxialkabel verwenden?

http://www.conrad.de/ce/de/product/285137/Twin-SAT-Koaxialkabel-75-dB-Weiss


Gruß :)

Serenifly

Ja, und ich habe gerade gesehen, dass es auch F-Buchsen zum Löten gibt:
http://www.conrad.de/ce/de/product/290024/F-Stecker-Einbaubuchse-Einbau-Tiefe-bis-12-mm
http://www.conrad.de/ce/de/product/739774/F-Einlochbuchse-Loeten-75-

Also kannst du dir den Ausflug über BNC sparen.

jurs


Das hört sich gut an. Also könnte ich dafür bspw. folgendes Koaxialkabel verwenden?


Möchtest Du wirklich zwei Koax-Kabel zum Sensor hinlegen?
Oder warum Koax?

Koax hat nur einen einpoligen Draht und eine Abschirmung.

Du benötigst aber:
- eine Ader hin zum Sensor
- eine Ader zurück vom Sensor
- Abschirmung

Das macht man normalerweise immer mit einem mehrpoligen Kabel mit Abschirmung, und nicht mit zwei nebeneinander verlegten einpoligen Kabeln.




BigBangTheory

Super :).

Dann steht einem abgeschirmten Signal ja nichts mehr im Weg :)

BigBangTheory

Das Twin Sat Kabel beinhaltet ja quasi 2 abgeschirmte Koax-Kabel, oder lieg ich da gerade falsch?

Also sollten es ja 2 Adern sein, oder?

jurs

#68
Jun 26, 2013, 12:57 pm Last Edit: Jun 26, 2013, 12:59 pm by jurs Reason: 1

Das Twin Sat Kabel beinhaltet ja quasi 2 abgeschirmte Koax-Kabel, oder lieg ich da gerade falsch?

Also sollten es ja 2 Adern sein, oder?


Stimmt, Du hast Recht. Ich habe nur das Bild gesehen und zwei nebeneinander liegende Leiter gesehen.
Tatsächlich ist das ein Doppelleiter, also zwei Koaxkabel nebeneinander.

rudirabbit

Mir fällt da ein Ethernet Kabel ein, ist geschirmt hat genug Adern und teuer ist es auch nicht.
Arduino UNO,MEGA  Fremdgänger mit dem  Nucleo L152RE   
Dunkel die andere Seite ist. - Klappe, Yoda, und iss deinen Toast :-)

BigBangTheory

Hi Leute,

seitdem mein Windmesser nun seit Mitte Juli seine Dienste verrichtet und fleißig Daten sammelt ist mir bei einer ersten Auswertung (an einem Windstillen Tag) aufgefallen, dass auch wenn kein Wind weht, hin und wieder ein extrem hoher Wert angezeigt wird (bspw...über Sekunden 0 m/s und dann auf einmal 34,..m/s), was rein logisch nicht sein kann.

Kann dieses Phänomen daran liegen, dass die Entfernung zwischen Arduino und Windmesser relativ lang ist? Zur Info, zwischen Arduino und Windmesser sind 60m Kabel...d.h. 60m hin und 60m zurück, also 120m.

Wenn dies so ist, würde ich gern im nächsten Jahr den Windmesser an einem anderen Ort aufstellen (mit womöglich auch besseren Windbedingungen) und wollte gern wissen, wie viele 9V-Blockbatterien müsste ich in Reihe schalten, um den Arduino mit seiner Windmess-und Speichertätigkeit 1 Jahr lang zu betreiben?

Vielen Dank schonmal für Eure Antworten!!!

Gruß

Serenifly

Arduino an Batterie kannst du vergessen.  Alleine die Zusatzbeschaltung (Spannungsregler, LEDs und USB-Konverter) braucht ca. 35mA. Da ist die Batterie gleich leer.

Für sowas muss man einen nackten Atmega nehmen. Den kann man dann schlafen legen und ab und zu mal aufwecken um zu messen.

willie1968

Der Arduino braucht je nach Beschaltung zwischen 20 und 50mA. Ein 9V Block hat ca. 500mA -> 10Stunden.
1 Jahr sind 8760 Stunden, also brauchst du ca. 876 9V Blocks.   :~  8)
und Tschoe
Willie
http://www.rcarduino.tk

guntherb

... dass auch wenn kein Wind weht, hin und wieder ein extrem hoher Wert angezeigt wird ...

Du wirst, auch mit bester Schirmung, nicht verhindern können, dass hin und wieder Störer durchkommen.
Da hilft nur "Entprellen" über Software: Wenn plötzlich eine stark abweichende Drehzahl erkannt wird, erst prüfen, ob nach einer gewissen Zeit (1sek?) die immer noch anliegt, dann erst auf "gültig" schalten.

Apropos geschirmtes Kabel: Wenn ich mich richtig erinnere, hat das Ding einen Reed-kontakt.
Hast du ein Kabel auf GND und ein Kabel auf einen Pin mit Pullup? Dann reicht dir ein normales einadrig geschirmtes Kabel.
Schirm = GND, Innendraht = Signal.
Grüße
Gunther

jurs


Kann dieses Phänomen daran liegen, dass die Entfernung zwischen Arduino und Windmesser relativ lang ist? Zur Info, zwischen Arduino und Windmesser sind 60m Kabel...d.h. 60m hin und 60m zurück, also 120m.


Ja, natürlich kann das daran liegen. Wenn ich das richtig beurteile, hast Du die Übertragung über die lange Leitung ja überhaupt nur dadurch halbwegs störungsfrei hinbekommen, dass Du meinem Ratschlag gefolgt bist und einen stärkeren Pull-Widerstand mit kleinerem Ohm-Wert eingebaut hast.

Die störungsfreie Signalübertragung ist von der Länge abhängig, und zwar ist die maximale Länge hauptsächlich durch die Geschwindigkeit der Signale begrenzt. D.h. wenn Du das Limit überschreitest, dann werden zuerst schnelle Signale falsch übertragen. Also bei einem Windmesser Impulse, die in extrem schneller Folge auftreten, bei Starkwind also. Und das äußert sich in erster Linie dadurch, dass Impulse verlorengehen, d.h. Du mißt bei Starkwind weniger Wind als eigentlich da ist.

Dieser Fall ist bei Deiner Kabellänge der wahrscheinlichste, aber den Fall beschreibst Du ja nicht (er ist auch als Fehler schwer zu entdecken).

Der andere Fall, dass durch bestimmte Effekte Impulse gemessen werden, wo gar keine da sind, kann auch auftreten. Aber wenn dieser Effekt auftritt und wenn das schaltungsbedingt von der Hardware verursacht wird, dann tritt er nicht nur bei Nullwind auf, sondern er tritt allgemein auf, also bei allen Windgeschwindigkeiten.

In dem Fall solltest Du also nicht nur bei Nullwind Ausreißer auf über 34 m/s dabei haben, sondern bei allen Windgeschwindigkeiten sollten Ausreißer in derselben Form auftreten.

Wenn die Ausreißer ausschließlich bei Nullwind auftreten, würde ich eher einen Softwarefehler vermuten. Z.B. einen Überlauf des micros() Timers. Der micros() Timer läuft alle ca. 70 Minuten über und Du verwendest ihn, um das Timing über einen Interrupt zu machen. Je nach Programmierung kann also nach 35 oder spätestens 70 Minuten Windstille ein Problem auftreten: Wenn nämlich bei Windstille 70 Minuten lang kein einziger Windimpuls auftritt, ist das Timing danach falsch. Und je nachdem wie die Softwarelogik ist, kann das die unterschiedlichsten Auswirkungen haben. Prüfe Deine Software mal darauf, ob das ein Problem bei Dir sein kann!

Um 60 Meter Entfernung zuverlässig auch bei hoher Datenrate (Starkwind!) zu überbrücken, mußt Du wahrscheinlich zwei Arduinos einsetzen und auf RS232-Pegel umsteigen und die Datenrate bei der Übertragung recht niedrig halten. Dazu benötigst Du zwei Arduinos und zwei Serial-TTL-RS232 Adapter.

Windmesser => wenige Meter Kabel zum ersten Arduino
Erster Arduino ==> viele Meter RS232 Kabel ==> zweiter Arduino

Mit 2400 Baud auf RS232-Pegel sollten sich 60 Meter zwischen zwei Arduinos leicht überbrücken lassen.

Wenn Du sowieso ein Kabel liegen hast: Falls das Kabel mindestens dreipolig ist, reicht es aus, den Außen-Arduino mit Strom zu versorgen und gleichzeitig von ihm RS232-Daten zu erhalten.

Und in jedem Fall muß natürlich die verwendete Software fehlerfrei sein, also beispielsweise darf nicht der Fall eintreten, dass micros() Überläufe in bestimmten Konstellationen die Software zum Durchdrehen bringen. Sonst haut es auch bei einer guten Übertragung nicht hin, gute Messwerte zu erhalten.

Go Up