Servomotor mit Zahnrad


Google-Suche auf MEINE-SCHALTUNG.de :





Online Rechner

Chronik

Dauerkalender


Software Schnittstelle

(für Arduino)


Alle Modelle der Arduino Familie verfügen über mindestens eine serielle Schnittstelle. Manche von Ihnen bieten auch mehrere an. Zu den Modellen mit nur einer Schnittstelle gehört unter anderen Arduino Nano. Für die serielle Kommunikation werden bei Arduino Nano die Pins 0 (RX) und 1(TX) verwendet.
Gelegentlich benötigt man weitere Schnittstellen. In diesem Fall ist es nicht zwingend notwendig, gleich das Arduinoboard zu wechseln. Abhilfe hier schafft die Bibliothek SoftwareSerial.h.
In der folgenden Schaltung wird auf dem Arduino Nano via Software eine neue serielle Schnittstelle geschaffen. Über diese Schnittstelle werden aus einem Ultraschall die Entfernungsdaten ausgelesen. Die Hardware Schnittstelle des Arduino Nano (Pins 0 und 1) kommt in diesem Beispiel nicht zum Einsatz. Sie könnte jedoch problemlos für andere Zwecke verwendet werden.

Arduino

Arduino Nano smd

Arduino Nano. In dem Beispiel bekommt Arduino Nano eine neue serielle Schnittstelle. Der Mikrocontroller ist standardgemäß mit nur einer Schnittstelle ausgestattet. Auch andere Arduinoboards könnten in dem Beispiel zum Einsatz kommen.

Arduino Einführung

Display

Display 16x2



Display Modul

Display 16x2. Die Messergebnisse des Ultraschalls werden auf dem Display angezeigt. Das Display hat zwei Zeilen mit je 16 Zeichen und kommuniziert mit Arduino über den I2C-Bus. Für die Kommunikation werden zwei Leitungen benötigt. Der Anschluss erfolgt an den Pins SDA und SCL. Damit das möglich ist, wird an das Display das Kommunikationsmodul FC-113 angeschlossen oder angelötet.

Display

Ultraschall-Sensor

Ultraschall

Ultraschall. Als Kommunikationspartner dient in dem Beispiel ein wasserdichter Ultraschallsensor mit der Auswertungselektronik SR04M-2. Der Ultraschall kann Entfernungen im Bereich 20 bis 200 cm messen (Die Angaben zu der Reichweite weichen voneinander ab). Das Auswertungsmodul stellt drei Kommunikationsmodi zur Verfügung. Wir nutzen in dem Beispiel den Modus, indem das Modul seriell alle 100ms die Entfernungsdaten sendet. Um den Modus zu aktivieren, wird an das Modul ein Widerstand (R27) im Wert von 47kOhm angeschlossen.

Spannungsregler

Spannungsregler

Spannungsregler mit LM317. Als Spannungsregler dient ein selbst gebasteltes Modul mit dem Regler LM317. Die hohe Eingangsspannung von 9V wird mit dem Modul auf 5V runtergeregelt. Die Spannung wird für den Ultraschall und das Display benötigt.

LM317 einstellen

Der Schaltplan

Schaltplan

Schaltplan

Das Programm (Sketch)

// **********************************************************************************************
// Extra (Software) Schnittstelle für Arduino
// Beispiel mit einem Ultraschall
// Arduino Sketch
// Arduino IDE 1.8.19
// **********************************************************************************************

#include <LiquidCrystal_I2C.h>                                // Bibliothek Display I2C-Bus
LiquidCrystal_I2C Display(0x27,16,2);                         // Display definieren
#include <SoftwareSerial.h>                                   // Bibliothek SoftwareSerial
#define RX 9                                                  // RX Pin
#define TX 8                                                  // TX Pin
SoftwareSerial ExtraSerial(RX, TX);                        
byte Start_Byte;                                              // Sende Bytes
int Entfernung;                                               // Gemessene Entfernung
byte Puffer [3];                                              // Puffer Variable
                                                              // 0=H_Byte, 1=L_Byte, 2-Quersumme

void setup() {

    ExtraSerial.begin(9600);                                  // Software Schnittstelle initialisieren
    Display.init();                                           // Display initialisieren 
    Display.backlight();                                      // Hintergrundbeleuchtung ein
}

// **********************************************************************************************

void loop() {                                                 // Hauptprogramm
  
    if(ExtraSerial.available()) {                             // Daten vorhanden?
        Start_Byte = (byte)ExtraSerial.read();                // Char in Byte umwandeln
        if(Start_Byte == 255){
            ExtraSerial.readBytes(Puffer, 3);                 // Daten auslesen 
            Entfernung = (Puffer[0]<<8) + Puffer[1];          // <<8: Bits um 8 Stellen verschieben
            if (((Start_Byte + Puffer[0] + Puffer[1])&0xFF) == Puffer[2]){      // Quersumme OK?
                Display.setCursor(3,0);                       // Inhalte für Display
                Display.print("Entfernung");
                Display.setCursor(6,1);
                Display.print("    ");              
                Display.setCursor(6,1);
                Display.print(Entfernung);
            } 
        } 
    }
} 
// **********************************************************************************************        

Die neue Schnittstelle heißt in dem Sketch ExtraSerial. Die Anschlüsse sind die Pins D8(TX) und D9(RX).
Damit das Vorhaben gelingt, muss zunächst die Bibliothek SoftwareSerial.h mit #include in das Programm eingebunden werden. Die Bibliothek ist unter folgendem Link zu finden:
https://github.com/PaulStoffregen/SoftwareSerial
Damit das Programm funktionieren kann, muss die Bibliothek davor installiert werden.
Des Weiteren muss bekannt sein, welche Daten der Sensor liefert. Das Ultraschall-Modul sendet über serielle Schnittstelle vier Infobytes, die man als eine Messung bezeichnen kann. Das erste Byte soll den Wert 255 aufweisen. Das zweite Byte stellt den H-Anteil, das dritte Byte den L-Anteil der Messung dar. Das vierte Byte liefert die Quersumme, die für Kontrollzwecke benutzt werden kann.
Mit ExtraSerial.begin(9600) wird die Schnittstelle initialisiert.
Das Hauptprogramm beschränkt sich praktisch auf drei if-Abfragen. Zunächst wird mit if (ExtraSerial.available()) geprüft, ob neue Daten zum Lesen vorhanden sind. Wenn dies zutrifft, wird das erste Byte ausgelesen und mit if (Start_Byte == 255) auf den richtigen Wert geprüft.
Beträgt sein Wert 255, werden drei weitere Bytes ausgelesen und in die Variable Puffer geladen.
Mit der Addition des L- und H-Bytes (Bytes 2 und 3), mit gleichzeitiger Bits-Verschiebung, wird die Entfernung berechnet.
Anschließend wird die Quersumme gebildet und mit dem vierten Byte verglichen. Wenn das Ergebnis stimmt, wird die aktuelle Entfernung auf dem Display angezeigt.


Die Testschaltung

Testschaltung

Testschaltung

Kurzvideo

Kurzvideo


Weitere Themen:


Google-Suche auf MEINE-SCHALTUNG.de :


Home Impressum Datenschutz