INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Windrichtungsmesser
03.04.2016, 09:33
Beitrag #1
Rainbow Windrichtungsmesser
Hallo liebe Forenmitglieder,
ich habe den mechanischen Aufbau eines Windrichtungsmessers abgeschlossen. Die Richtungen werden durch den Gray-Code mit 5 Bit Breite ausgelesen (2^5 entspricht somit einer Auflösung von 1/32). Nun möchte ich die Windrichtungen in den üblichen Bezeichnungen einer Windrose (N. NNO usw.) auf einem Display lesbar machen.
Wer kann mir weiterhelfen?Huh
Der Schaltplan ist als Attachment beigefügt. Hinweis hierzu: Ich habe fünf Codierscheiben angefertigt, deren Stellung mit Gabellichtschranken abgetastet wird. Bei "geschlossener" Gabellichtschranke steht am Ausgang des 74LS540 "H"-Signale an. Das Foto zeigt den Aufbau.


Angehängte Datei(en) Thumbnail(s)
   

.pdf  Windri. u. -geschw..pdf (Größe: 333,56 KB / Downloads: 39)

"Wenn die anderen glauben, man ist am Ende, so muss man erst richtig anfangen."
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
03.04.2016, 12:27
Beitrag #2
RE: Windrichtungsmesser
Hallo,

dieses Beispiel schreibt den Richtungstext auf den SerialMonitor.
Code:
const int     bit_0 =  3;
const int     bit_1 =  4;
const int     bit_2 =  5;
const int     bit_3 =  6;
const int     bit_4 =  7;
int        richtung = 32;
int letzte_richtung = 32;
char* richtungstext[] = {"  N", "NNO", " NO", /* restliche Richtungstexte */ };


void setup() {
  Serial.begin(9600);
  pinMode (bit_0, INPUT);
  pinMode (bit_1, INPUT);
  pinMode (bit_2, INPUT);
  pinMode (bit_3, INPUT);
  pinMode (bit_4, INPUT);
}

void loop() {
// Richtungsauswertung Gray-Code
  if (!bit_0 && !bit_0 && !bit_0 && !bit_0 && !bit_0) richtung = 0;
  if (!bit_0 &&  bit_0 && !bit_0 && !bit_0 && !bit_0) richtung = 1;
  if ( bit_0 &&  bit_0 && !bit_0 && !bit_0 && !bit_0) richtung = 2;
/*
restliche Bitmuster
.
.
*/


// Ausgabe
  if ( richtung != letzte_richtung)
  {
    letzte_richtung = richtung;
    Serial.println(richtungstext[richtung]);
  }

}
Die Ausgabe auf ein Display musst du selbst anpassen. Es gibt so viele verschiedene Displays.
Die restlichen 29 Richtungstexte und die restlichen 29 if-Bedingungen musst du ergänzen.
Pin 2 habe ich nicht benutzt weil der interruptfähig ist und man diesen Pin deshalb gut für die Auswertung der Windgeschwindigkeit nutzen kann.
Das Beispiel ist jetzt eher die "Holzhammermethode". Die Auswertung des Gray-Codes geht wahrscheinlich auch eleganter.
Der Richtungstext wird nicht ständig ausgegeben sondern nur wenn er sich ändert.

Gruß
Arne

ExclamationMit zunehmender Anzahl qualifizierter Informationen bei einer Problemstellung, erhöht sich zwangsläufig die Gefahr auf eine zielführende Antwort.Exclamation
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
03.04.2016, 18:52
Beitrag #3
RE: Windrichtungsmesser
Hallo!

@ardu_arne die bit_x auszulesen wird nicht helfen, eher digitalRead(bit_x) ;D

ansonsten hätte ich hier ein anderen Code: Die Verkabelung muss aber richtig sein dh Sensor 1 auf Eingang 1 (pin 3 am Board), Sensor 2 auf Eingang 2 (pin 4 am Board) usw. Dann Kann der Grey Code ganz einfach ausgelesen werden (nur für Arduino UNO Board):

Code:
unsigned char richtung, vorigeRichtung;
byte port = 0b11111000;

void setup() {
  // Inputs auf Pins: 3 - 7
  DDRD &= ~port;
  Serial.begin(9600);
}

void loop() {
  // Eingänge auslesen
  richtung = (PIND & port) >> 3;

  // falls sich das Ergebnis ändert
  if (vorigeRichtung != richtung) {
    // Auswärten mit Ausgabe
    if ( (richtung == 31) || (richtung <= 1)
      Serial.println("N");
    else if (richtung == 2)
      Serial.println("NNE");
    else if (2 < richtung < 6)
      Serial.println("NE");
    else if (richtung == 6)
      Serial.println("ENE");
    else if (6 < richtung < 10)
      Serial.println("E");
    else; // und so weiter
    vorigeRichtung = richtung;
  }
}

Falls du die Anzeige z.B. auf ein LCD haben willst machst du ein Setup für LCD und schreibst dann statt "Serial.println(...)" --> "lcd.write(...)".
Für die Auswertung habe ich für die Hauptanzeigen (N, NE, E, SE, S, SW, W, EW) 3 Werte und für die "kleineren" Anzeigen (NNE, ENE, ESE, SSE, SSW, WSW, WNW, NNW) jeweils 1 Wert. --> 8 * 3 + 8 * 1 = 32 Werte

Der Aufbau sieht super aus ! Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
03.04.2016, 20:12
Beitrag #4
RE: Windrichtungsmesser
(03.04.2016 18:52)Scheams schrieb:  Hallo!

@ardu_arne die bit_x auszulesen wird nicht helfen, eher digitalRead(bit_x) ;D

Oh, böse Falle. Angry
Da habe ich doch tatsächlich vergessen die Eingänge einzulesen.
Heute ist wohl nicht mein Tag.

Gruß
Arne

ExclamationMit zunehmender Anzahl qualifizierter Informationen bei einer Problemstellung, erhöht sich zwangsläufig die Gefahr auf eine zielführende Antwort.Exclamation
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
10.04.2016, 18:02
Beitrag #5
RE: Windrichtungsmesser
Hallo reihum,
vielen Dank für Eure Hilfe! Was mir im Augenblick fehlt, ist die Zeit mich hinzusetzen und den Sketch einzutippen. Ich muss die ersten Frühlingstage erst für Arbeiten an Haus und Hof nutzen - sorry! Während meine Anfrage unterwegs war, hat mich die Hardware etwas geärgert: keine Ausgangssignale an zwei Pins des 74LS540. Nach längerer Suche fand ich die Ursache: die zugehörigen OpAmps mochte nicht so recht.

"Wenn die anderen glauben, man ist am Ende, so muss man erst richtig anfangen."
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
10.04.2016, 21:06
Beitrag #6
RE: Windrichtungsmesser
Hallo,
ich hatte mich schon gefragt warum du überhaupt noch OPs für die Signalaufbereitung verbaut hast. Eigentlich sollte doch ein Pullupwiderstand am Eingang des 74LS540 reichen und die Gabellichschranke zieht den Eingang dann auf GND. Oder geht es dir nur darum mit den OPs eine Schalthysterese zu erzeugen? Vermutlich wird das auch ohne OPs kein Problem werden auch wenn der 74LS540 keine Schmitt-Trigger Eingänge hat.
Andererseits ist der 741er schon ein alter Geselle der bei einfacher 5V Versorgung schon nahe an der unteren Grenze betrieben wird und dann kaum noch eine nennenswerte Pegeländerung am Ausgang liefert. Wenn du wirklich noch OPs einsetzen willst, dann bieten sich bei einfacher 5V Versorgung RailToRail Typen an die dann auch einen brauchbaren Spannungshub am Ausgang liefern.

Hast du mal eine Tabelle mit dem 5 Bit Gray-Code oder einen Link dazu?

Gruß
Arne

ExclamationMit zunehmender Anzahl qualifizierter Informationen bei einer Problemstellung, erhöht sich zwangsläufig die Gefahr auf eine zielführende Antwort.Exclamation
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.04.2016, 08:08
Beitrag #7
RE: Windrichtungsmesser
(10.04.2016 21:06)ardu_arne schrieb:  Hallo,
ich hatte mich schon gefragt warum du überhaupt noch OPs für die Signalaufbereitung verbaut hast. Eigentlich sollte doch ein Pullupwiderstand am Eingang des 74LS540 reichen und die Gabellichschranke zieht den Eingang dann auf GND. Oder geht es dir nur darum mit den OPs eine Schalthysterese zu erzeugen? Vermutlich wird das auch ohne OPs kein Problem werden auch wenn der 74LS540 keine Schmitt-Trigger Eingänge hat.
Andererseits ist der 741er schon ein alter Geselle der bei einfacher 5V Versorgung schon nahe an der unteren Grenze betrieben wird und dann kaum noch eine nennenswerte Pegeländerung am Ausgang liefert. Wenn du wirklich noch OPs einsetzen willst, dann bieten sich bei einfacher 5V Versorgung RailToRail Typen an die dann auch einen brauchbaren Spannungshub am Ausgang liefern.

Hast du mal eine Tabelle mit dem 5 Bit Gray-Code oder einen Link dazu?

Gruß
Arne
Hallo Arne,
die Darstellung des Gray-Codes (und die passend gestalteten Codierscheiben) habe ich als PDF angehängt. EXCEL für die Konstruktion zu bemühen war überhaupt kein Problem.
Es hat sich angeboten, Gabellichtschranken mit der einfach gestrickten Schaltung zu versehen. Damit habe ich die noch zahlreich bei mir vorhandenen 741er verbaut. Tatsächlich ist die ganze Angelegenheit noch etwas umfangreicher. Dem 74LS540 ist ein ULN2803 nachgeschaltet, an dem wiederum Reedrelais hängen - nur so kann ich die Problematik längerer Leitungen zum Arduino in den Griff bekommen. Zwischen dem 74LS540 und dem ULN2803 habe ich noch Low-Current-LEDs mit 1,5 kOhm-Widerständen nach Masse eingebaut. Grund: der Windmesser ist in sechs bis sieben Meter Höhe an einem freistehenden Mast angebracht, die Elektronik unten in Augenhöhe - auch zur Funktionskontrolle. Denn: die Scheiben richtig zu platzieren war schon ein rechtes Gefrickel. Damit sie sich nicht nachträglich verdrehen, habe ich sie mit Gewindestangen untereinander verbunden.
Das Ganze ist schon recht umfangreich geworden. Ich habe einen gewissen Drang zu einem Perfektionismus...
Viele Grüße,
Norbert


Angehängte Datei(en)
.pdf  Graycode_korr.pdf (Größe: 74,79 KB / Downloads: 31)

"Wenn die anderen glauben, man ist am Ende, so muss man erst richtig anfangen."
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste