Neigungssensor: Unterschied zwischen den Versionen

Aus Archewiki
Zur Navigation springen Zur Suche springen
 
(102 dazwischenliegende Versionen von 4 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
 
[[Kategorie:Lego]]
 
[[Kategorie:Lego]]
 +
[[Kategorie:Robocup]]
  
 
== Allgemeines ==
 
== Allgemeines ==
  
*Sesortypen / Techniken
+
*Sensortypen / Techniken
 
*Vergleich Einsatzzweck / Aufwand
 
*Vergleich Einsatzzweck / Aufwand
  
 +
'''Links:'''
  
 +
#http://www.esensors.net/
 +
#http://de.wikipedia.org/wiki/Neigungssensor
  
http://www.esensors.net/
+
== Einfacher mechanischer Neigungssensor auf Basis von Reedkontakten und Magnetpendel ==
http://de.wikipedia.org/wiki/Neigungssensor
 
  
== Einfacher mechanischer Neigungssensor auf Basis von Neigungswinkelschaltern ==
+
'''Funktionsbeschreibung'''
  
* Schaltung
+
Reedkontakte haben die Eigenschaft in der Nähe eines Magnetfeldes (vorzugsweise Dauermagnet) zu schalten.
* Ansteuerung
+
Der Neigungssensor, wie der Name es schon sagt, soll in der Bewegung feststellen ob es nach oben oder nach
* Verbindung mit dem NXT
+
unten geht. Hier geht es nicht darum zu ermitteln, wie groß die Neigung (Anstieg oder Gefälle) ist, und das
* Einbindung in NXC (Funktionen)
+
in Grad anzugeben, sondern lediglich um die Erkennung.
 +
Dennoch ist der Meßbereich (Maximalwert / Minimalwert) für die Erkennung festzulegen.
 +
Dieser Meßbereich ergibt sich aus dem maximalen Anstieg der Rampe von ca. 21°.
 +
Da der Roboter die Rampe für die Auffahrt und für die Abfahrt erkennen muss, ist der Meßbereich von 40° Grad
 +
gegeben.
 +
 
 +
Beim frühen Befahren der Rampe (hinterer Teil ist noch auf gerader Fläche) ist eine Auffahrt bzw. Abfahrt noch nicht mit dem max.
 +
Wert erkennbar (also < 20°).
 +
 
 +
''Hier der Verlauf zu den Werten:''
 +
 
 +
[[Datei:Schematische_zeichnung_pendelsensor.jpg|rahmenlos|links|Pendelbewegung]]
 +
 
 +
 
 +
* gerade = 0°
 +
* Beginn Anstieg o. Gefälle = 10°
 +
* max. Anstieg o. Gefälle = 20°
 +
 
 +
 
 +
 
 +
 
 +
Natürlich würden auch 2 Meßpunkte ausreichen (Min/Max) um den Anstieg bzw. das Gefälle zu erkennen, aber
 +
um schneller auf die Veränderungen hin zur Ebene bzw. weg von der Ebene zu reagieren, macht es Sinn mit
 +
Zwischenwerten zu arbeiten. Vier Schalter auf 10° und 20° verteilt sollten reichen. Die "Nullstellung" in der Ebene
 +
mit einem Schalter zu versehen, ist nicht unbedingt notwendig.
 +
 
 +
'''Fotos zum funktionsfähigem Testaufbau der mechanischen Funktion'''
 +
 
 +
Hier haben wir die Anschlüsse der Reedkontakte mit einer einfachen Beschaltung (Leuchtdiode (LED) + Vorwiderstand an ca. 4V) versehen.
 +
Mit diesem Testaufbau kann nachgewiesen werden, wie sich die Pendelwirkung bei Neigungen und dem Dauermagneten am Pendel
 +
auf die Reed-Kontakte auswirkt. Es hat einige Zeit gedauert die Mechanik einstellbar zu gestalten.
 +
Bei den Tests sind folgende Problem aufgetreten:
 +
 
 +
* das Pendel war zu leicht
 +
* der Magnet war zu weit von den Kontakten entfernt
 +
* die Kontakte schalteten unterschiedlich, es kam zum "Prellen"
 +
* die Empfindlichkeit beim Erkennen der Bewegung reichte nicht aus
 +
 
 +
Jetzt funktioniert die Anordnung wie gewünscht, wie ihr den Bildern entnehmen könnt.
 +
 
 +
[[Datei:Neigung_ansicht_testaufbau.jpg|Neigunssensor Testaufbau]]
 +
 
 +
[[Datei:Neigung_links_20.jpg|Neigung links 20°]]
 +
[[Datei:Neigung_links_10.jpg|Neigung links 10°]]
 +
[[Datei:Neigung_null.jpg|Neigung 0°, gerade]]
 +
[[Datei:Neigung_rechts_10.jpg|Neigung rechts 10°]]
 +
[[Datei:Neigung_rechts_20.jpg|Neigung rechts 20°]]
 +
 
 +
 
 +
'''Was sagt mir das blaue Leuchten der Dioden über die Neigung?'''
 +
 
 +
* leuchtet keine Diode, ist der Sensor in Null-Position, keine Neigung (Dual: 0000 Dezimal: 0)
 +
* leuchtet jeweils nur die linke oder rechte LED, ist die max. Neigung erkannt (Dual: 1000, 0001 Dezimal: 8, 1)
 +
* leuchten jeweils beide LED's rechts oder links, ist die Neigung >10° aber kleiner als 20° (Dual: 1100, 0011 Dezimal:12, 3)
 +
* leuchtet nur jeweils die vorletzte LED rechts oder links, ist die Neigung ca. 10° (Dual: 0100, 0010 Dezimal: 4, 2)
 +
 
 +
'''Wie kommen die Signale zum NXT?'''
 +
 
 +
Um den Status dieser 4 Bits am NXT zur Auswertung zu bringen, nutzen wir einen integrierten Schaltkreis (Integrated Circuit = IC) von Philips, den [http://wiki.archenhold.de/images/6/6b/PCF8574.pdf PCF8574]. Dieser macht es möglich 8 Bit (ein Datenwort = 1Byte) zu lesen oder zu schreiben. Der Schaltkreis (Chip) wird über den s.g. I2C-Bus (2Wire) des NXT gesteuert. Wir benötigen nur 4 Bit zum Anschluss unseres Neigungssensors. Die anderen 4 Bit (2^4 bis 2^7) könnten wir für andere Zwecke, wie einfache Druckschalter-Sensoren verwenden.
 +
 
 +
== Die Schaltung ==
 +
[[Datei: Neigungssensor_schaltplan.jpg|200px|Schaltplan Neigungssensor]]
 +
 
 +
== Der Programmcode zum Testaufbau ==
 +
 
 +
* Erforderlich ist die Library (Programmbibliothek) zum PCF8574
 +
** [http://www.mindsensors.com/index.php?module=documents&JAS_DocumentManager_op=viewDocument&JAS_Document_id=133 pcf8574llb.nxc]
 +
** Adresse de PCF8574 = 0x40 (hexadezimal) 64 (dezimal)
 +
** Port am NXT = 1
 +
 +
'''i2c_test_pcf8574_neigungssensor.nxc'''
 +
 
 +
{{Quelltext|<source lang="c">
 +
#include "pcf8574llb.nxc"
 +
task main()
 +
{
 +
SetSensorLowspeed(S1); // an Sensor-Port 1
 +
 
 +
ClearScreen(); // Anzeige löschen
 +
WritePorts(0xFF); // alle Bits auf H-Pegel setzen
 +
until(false) // Abfrageschleife Beginn
 +
{
 +
  /*
 +
    Ports 1-4 (Bits 0-3) der möglichen 8Bit werden gelesen und
 +
    zusammengesetzt, als Bit-Folge angezeigt (1111)
 +
  */
 +
 
 +
  TextOut(0, LCD_LINE1, StrCat("Bit: ",
 +
                        NumToStr(ReadPort(4)),
 +
                        NumToStr(ReadPort(3)),
 +
                        NumToStr(ReadPort(2)),
 +
                        NumToStr(ReadPort(1))));
 +
 
 +
  /*
 +
    Zeile2 wird definiert gelöscht bzw. Anzeigereste
 +
    d. Überträge (1-3 stellige Zahl)entfernt
 +
  */
 +
 
 +
  TextOut(0, LCD_LINE2, "Dec:    ");
 +
 
 +
  /*
 +
    das gsamte Byte (8bit) wird gelesen, und relativ
 +
    gezielt in die richtige Dezimalzahlumgewandelt
 +
  */
 +
 
 +
  TextOut(0, LCD_LINE2, StrCat("Dec: ", NumToStr((ReadPorts()-255)*(-1))));
 +
  Wait(100); // das Ganze alle 100ms wiederholen
 +
} // Abfrageschleife Ende
 +
}
 +
</source>}}
 +
 
 +
== Bilder zum gesamten Testaufbau mit Anschluss am NXT==
 +
 
 +
[[Datei:Neigung_an_nxt_bit0.jpg|200px]][[Datei:Neigung_an_nxt_bit3.jpg|240px]][[Datei:Neigung_an_nxt_steckbrett.jpg|470px]]
 +
 
 +
'''Verwunderung obgleich der eigenartigen Werte???'''
 +
 
 +
Beim I2C Bus-Expander handelt es sich um s.g. Open-Collector-Anschlüsse. Um einen definierten
 +
Ruhepegel zu erhalten, setzt man diese mit einem PullUp-Widersrand an die Betriebsspannung.
 +
daher ergibt sich die umgekehrte Darstellung der Bit-Folge. Wenn ein Reed-Kontakt geschlossen
 +
wird, leuchtet die Entsprechende LED und "reißt" den Pin am Bus gegen Masse (Ground),
 +
Bit wird auf "0" gesetzt.
 +
 
 +
Beispiel:
 +
* Ausgangs-Lage: 11111111
 +
* Neigung erkannt: 11111100 = 252
 +
* Durch Berechnung vor Anzeige: (252 - 255)*(-1) = 3
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
 
 +
----
  
Links:
+
== Komplexer: Integrierte Beschleunigungsensoren ==
http://www.conrad.de/ce/de/product/185258/NEIGUNGSWINKELSCHALTER-GER-24-VDC/?ref=detview
 
  
== Komplexer: Beschleunigungsensor ADXL330 ==
+
=== ADXL330 ===
  
 
* Schaltung
 
* Schaltung
Zeile 28: Zeile 172:
 
* Code
 
* Code
  
Links:
+
'''Links:'''
http://www.segor.de/L1Bausaetze/ctarduino.shtml
+
#http://www.segor.de/L1Bausaetze/ctarduino.shtml
 +
 
 +
=== SMB380 ===
 +
 
 +
Für den Sensor auf Basis des SMB380 gibt es eine eigene [[Beschleunigungssensor_SMB380 | Seite]].
  
 
== Serielle Kommunikation ==
 
== Serielle Kommunikation ==

Aktuelle Version vom 25. Mai 2012, 18:07 Uhr


Allgemeines

  • Sensortypen / Techniken
  • Vergleich Einsatzzweck / Aufwand

Links:

  1. http://www.esensors.net/
  2. http://de.wikipedia.org/wiki/Neigungssensor

Einfacher mechanischer Neigungssensor auf Basis von Reedkontakten und Magnetpendel

Funktionsbeschreibung

Reedkontakte haben die Eigenschaft in der Nähe eines Magnetfeldes (vorzugsweise Dauermagnet) zu schalten. Der Neigungssensor, wie der Name es schon sagt, soll in der Bewegung feststellen ob es nach oben oder nach unten geht. Hier geht es nicht darum zu ermitteln, wie groß die Neigung (Anstieg oder Gefälle) ist, und das in Grad anzugeben, sondern lediglich um die Erkennung. Dennoch ist der Meßbereich (Maximalwert / Minimalwert) für die Erkennung festzulegen. Dieser Meßbereich ergibt sich aus dem maximalen Anstieg der Rampe von ca. 21°. Da der Roboter die Rampe für die Auffahrt und für die Abfahrt erkennen muss, ist der Meßbereich von 40° Grad gegeben.

Beim frühen Befahren der Rampe (hinterer Teil ist noch auf gerader Fläche) ist eine Auffahrt bzw. Abfahrt noch nicht mit dem max. Wert erkennbar (also < 20°).

Hier der Verlauf zu den Werten:

Pendelbewegung


  • gerade = 0°
  • Beginn Anstieg o. Gefälle = 10°
  • max. Anstieg o. Gefälle = 20°



Natürlich würden auch 2 Meßpunkte ausreichen (Min/Max) um den Anstieg bzw. das Gefälle zu erkennen, aber um schneller auf die Veränderungen hin zur Ebene bzw. weg von der Ebene zu reagieren, macht es Sinn mit Zwischenwerten zu arbeiten. Vier Schalter auf 10° und 20° verteilt sollten reichen. Die "Nullstellung" in der Ebene mit einem Schalter zu versehen, ist nicht unbedingt notwendig.

Fotos zum funktionsfähigem Testaufbau der mechanischen Funktion

Hier haben wir die Anschlüsse der Reedkontakte mit einer einfachen Beschaltung (Leuchtdiode (LED) + Vorwiderstand an ca. 4V) versehen. Mit diesem Testaufbau kann nachgewiesen werden, wie sich die Pendelwirkung bei Neigungen und dem Dauermagneten am Pendel auf die Reed-Kontakte auswirkt. Es hat einige Zeit gedauert die Mechanik einstellbar zu gestalten. Bei den Tests sind folgende Problem aufgetreten:

  • das Pendel war zu leicht
  • der Magnet war zu weit von den Kontakten entfernt
  • die Kontakte schalteten unterschiedlich, es kam zum "Prellen"
  • die Empfindlichkeit beim Erkennen der Bewegung reichte nicht aus

Jetzt funktioniert die Anordnung wie gewünscht, wie ihr den Bildern entnehmen könnt.

Neigunssensor Testaufbau

Neigung links 20° Neigung links 10° Neigung 0°, gerade Neigung rechts 10° Neigung rechts 20°


Was sagt mir das blaue Leuchten der Dioden über die Neigung?

  • leuchtet keine Diode, ist der Sensor in Null-Position, keine Neigung (Dual: 0000 Dezimal: 0)
  • leuchtet jeweils nur die linke oder rechte LED, ist die max. Neigung erkannt (Dual: 1000, 0001 Dezimal: 8, 1)
  • leuchten jeweils beide LED's rechts oder links, ist die Neigung >10° aber kleiner als 20° (Dual: 1100, 0011 Dezimal:12, 3)
  • leuchtet nur jeweils die vorletzte LED rechts oder links, ist die Neigung ca. 10° (Dual: 0100, 0010 Dezimal: 4, 2)

Wie kommen die Signale zum NXT?

Um den Status dieser 4 Bits am NXT zur Auswertung zu bringen, nutzen wir einen integrierten Schaltkreis (Integrated Circuit = IC) von Philips, den PCF8574. Dieser macht es möglich 8 Bit (ein Datenwort = 1Byte) zu lesen oder zu schreiben. Der Schaltkreis (Chip) wird über den s.g. I2C-Bus (2Wire) des NXT gesteuert. Wir benötigen nur 4 Bit zum Anschluss unseres Neigungssensors. Die anderen 4 Bit (2^4 bis 2^7) könnten wir für andere Zwecke, wie einfache Druckschalter-Sensoren verwenden.

Die Schaltung

Schaltplan Neigungssensor

Der Programmcode zum Testaufbau

  • Erforderlich ist die Library (Programmbibliothek) zum PCF8574
    • pcf8574llb.nxc
    • Adresse de PCF8574 = 0x40 (hexadezimal) 64 (dezimal)
    • Port am NXT = 1

i2c_test_pcf8574_neigungssensor.nxc

Vorlage:Quelltext

Bilder zum gesamten Testaufbau mit Anschluss am NXT

Neigung an nxt bit0.jpgNeigung an nxt bit3.jpgNeigung an nxt steckbrett.jpg

Verwunderung obgleich der eigenartigen Werte???

Beim I2C Bus-Expander handelt es sich um s.g. Open-Collector-Anschlüsse. Um einen definierten Ruhepegel zu erhalten, setzt man diese mit einem PullUp-Widersrand an die Betriebsspannung. daher ergibt sich die umgekehrte Darstellung der Bit-Folge. Wenn ein Reed-Kontakt geschlossen wird, leuchtet die Entsprechende LED und "reißt" den Pin am Bus gegen Masse (Ground), Bit wird auf "0" gesetzt.

Beispiel:

  • Ausgangs-Lage: 11111111
  • Neigung erkannt: 11111100 = 252
  • Durch Berechnung vor Anzeige: (252 - 255)*(-1) = 3









Komplexer: Integrierte Beschleunigungsensoren

ADXL330

  • Schaltung
  • Anbindung an Arduino
  • Anbindung an NXT
  • Code

Links:

  1. http://www.segor.de/L1Bausaetze/ctarduino.shtml

SMB380

Für den Sensor auf Basis des SMB380 gibt es eine eigene Seite.

Serielle Kommunikation

  • I2C / 2Wire Datenaustausch
  • Bus-Treiber
  • an NXT
  • an Arduino

Arduino und NXT verheiraten