Sensoren allgemein:

Ein Sensor wandelt ein physikalisches oder chemisches Signal in ein elektrisches Signal um. Im Gegensatz zu Indikatoren registrieren Sensoren auch das Ausmaß der zu messenden Größe. Das physikalische Signal kann abhängig von Temperatur, Feuchtigkeit, Licht, Druck, Masse, Bewegung, Beschleunigung, … sein. Ein Sensor ist gekennzeichnet von

  • der Relation zwischen Ein- und Ausgangssignal,
  • der Messgenauigkeit,
  • dem Messbereich,
  • der Messempfindlichkeit

So ist je nach Anwendungsgebiet, ob ein genauer Wert (z.B. Konzentration in ppm) oder eine ungefähre qualitative Bewertung (z.B. heiß oder kalt) notwendig ist, die Wahl des Sensors entscheidend. Insbesondere ist es im Schulbetrieb nicht ganz so wichtig, exakte Messungen vorzunehmen, da es hier um das Verständnis der eingesetzten Sensoren geht. Außerdem werden vor allem im Schulalltag preisgünstige Sensoren ausgesucht, die dabei noch zusätzlich durch den Einsatz in Schülerexperimenten zusätzliche Beanspruchungen ausgesetzt werden.

Unterschiede in der Kommunikation zwischen Mikrocontroller und Sensor

Der Sensor kann die zu messende Größe in eine physikalische Größe umwandeln, diese muss nun dem Mikrocontroller übermittelt werden. Hierzu müssen geeignete Schnittstellen zur Verfügung stehen.

  1. Analoger Eingang: Der einfachste Fall ist, dass der Sensor aus einem Halbleiterelement besteht. Durch eine Spannungsteiler-Schaltung am Arduino kann der Widerstand des Halbleiterelements bestimmt werden. Das analoge Signal wird mit Hilfe des Analog-Digital-Wandlers des Mikrocontroller in ein digitales Format umgewandelt und steht zur weiteren Verarbeitung bzw. Auswertung zur Verfügung. Mit Hilfe des Datenblattes oder einer vorab durchgeführten Kalibrierung kann daraus die zu messende Größe bestimmt werden.
  2. Digitaler Eingang: Enthält der Sensor schon selbst einen Mikrocontroller, so kann dieser das Signal selbst digitalisieren, kalibrieren, codieren und übermitteln. An einem digitalen Pin kann entweder ein HIGH oder ein LOW Signal liegen, außerdem kann der Mikrocontroller mit Hilfe des PulseIn - Befehles die Länge der HIGH oder LOW-Signale messen.
    Die Kommunikation funktioniert mit nur einer Datenleitung.
    Eine andere Möglichkeit ist, dass die Daten als PWM - Signal übertragen werden, was bei einigen Pins möglich ist. Beim CO2 - Sensor MH-Z14 dauert ein PWM - Signal 1004 Microsekunden, aufgeteilt in ein HIGH und in ein LOW-Signal. Abhängig von der CO2 - Konzentration ist das HIGH - Signal länger als das LOW-Signal. (https://wolles-elektronikkiste.de/mh-z14-und-mh-z19-co2-sensoren)
  3. I2C -Schnittstelle: Hier kann der Mikrocontroller über ein genau definiertes Protokoll gleich mit mehreren Geräten kommunizieren. Der Sensor hat eine fest vorgegebene Adresse (7 Bit), die man entweder dem Datenblatt entnimmt oder mit Hilfe eines Programmes (I2C-Scanner) ermittelt, welches bei der Standardinstallation der Arduino -IDE automatisch mitgeliefert wird. Bei manchen Geräten braucht man diese auch nicht zu kennen, da diese schon in der Bibliothek integriert ist.

Beim I2C -Protokoll kann ein Master mit bis zu 127 Slavegeräten kommunizieren.

Die Datenkommunikation verläuft über zwei Leitungen. Findet keine Kommunikation statt, so sind beide Leitungen auf HIGH. Im Normalfall darf auf der Datenleitung der Pegel nur geändert, wenn die auf dem Clockleitung der Pegel auf LOW ist. Die Ausnahmen sind das Start- und das Stopsignal.

Ablauf

  • Start
    Der Master sendet ein Startsignal.
  • Adresse
    der Master sendet die 7 Bit Adresse des Slaves
  • Write / Read
    Nach der Adresse kommt noch ein bit (write 0 / read 1), z.B: Temperatursensor sendet Daten an den Master, oder der Master sendet Steuersignale an ein Display.
  • Bestätigungsbit
    Der Slave sendet ein Bestätigungsbit an den Master
  • Datenpaket
    Die Daten bestehen aus jeweils 1 Byte (8Bit)und einem anschließenden Bestätigungs-Bit Es können beliebig viele Datenpakete geschickt werden.
  • Stop
    Durch das Stop-Signal geht die Datenleitung auf High während wie Clockleitung auch auf High ist.

  1. Beispiele:
    1. OLED-Display mit Treiberchip SSD1306: 0x3C oder 0x3D
    2. BMP180 (Luftdruck- und Temperatursensor): 0x77
      Das I2C- Prokoll funktioniert über zwei Leitungen:
    3. SCL (serial clock (Takt - Leitung))
    4. SDA (serial data (Daten - Leitung))
      Je nach Gerät sind verschiedene Datenübertragungsraten möglich. Beim OLED - Display wird diese mit Wire.setClock(400000L) auf 400 kBit/s (=400 kHz) eingestellt.
      Die Programmierung ist denkbar einfach. Man muss nur die jeweilige Bibliothek installieren und zu Beginn des Programms über den include - Befehl einbinden. Ebenso sollt man noch die Wire - Bibliothek, die für die I2C- Kommunikation notwendig ist, einbinden.
  2. UART: steht für Universal Asynchronous Receiver-Transmitter. Es braucht 2 Pins für die Kommunikation Die 2 Verbindungen sind.
    1. TX (Übertragung)
    2. RX (Empfang)
      Die Verbindungen werden über kreuz verbunden. TX des Sensors mit RX des Mikrocontrollers und umgekehrt. Bei UART werden die zu übertragenden Bytes mit einem Startbit und einem Paritäts- und Stoppbit versehen und seriell übertragen.

Im Vergleich zu I2C kann beim UART - Kommunikationsprotokoll nur eine Kommunikation zwischen zwei Geräten hergestellt werden.

Verwendete Sensoren

  • arduino/sensoren.txt
  • Zuletzt geändert: 2022/06/21 11:15
  • von khirling