NMEA0183 2-fach Multiplexer zu USB mit dem NMEA shield

Zwei NMEA0183 Dateneingänge sollen an den PC per USB weiter gegeben werden.

Dazu werden die einzelnen Datensätze von Serial2 und Serial3 gelesen. Immer wenn ein Datensatz vollständig ist (CR – neue Zeile) wird das erkannt und der Datensatz wird auf die USB Schnittstelle (Serial) ausgegeben.

Die beiden Eingänge können unterschiedliche Baudraten haben, zum Beispiel 4800 (GPS) und 38400 (AIS). Die Ausgangsbaudrate muß dann allerdings so hoch gewählt werden, daß beide Datensätze ausgegeben werden können. Ansonsten kommt es zu einem Datenüberlauf am Ausgang.

Hier werden beide Eingänge mit 4800 Baud gelesen und die Datensätze werden mit 38400 Baud ausgegeben. Weiterlesen

NMEA0183 zu USB Wandler mit dem NMEA shield

Als Einführung ein kleines Programm, daß nur die NMEA0183 Daten vom NMEA Shield Rx1 an die USB Schnittstelle weiter gibt.

Beide Baudraten wurden zu 4800 gewählt.
Wenn Zeichen an Serial3 (Rx1) vor liegen, werden diese gelesen und direkt an Serial (USB) ausgegeben. Weiterlesen

Das NMEA Shield für den Arduino Mega 2560 ist fertig

Endlich ist es fertig, das NMEA Shield 1.7 für den Arduino Mega 2560 ist da.

Andre und ich haben ein eigenes Arduino Shield entwickelt mit den NMEA Schnittstellen:
2 x NMEA0183 / RS232
1 x N2k (NMEA2000) / CAN Bus
1 x RS485
1 x USB ( durch den Arduino Mega darunter ist natürlich auch ein USB Port vorhanden )

Ein N2k (NMEA2000) Abschlußwiderstand kann mit einem Jumper eingeschaltet werden, wenn das Shield am Ende eines NMEA2000 Backbones betrieben werden soll. Normalerweise ist dieser Jumper aber nicht gesteckt.

Ein Abschlusswiderstand für den RS485 Eingang kann auch per Jumper zugeschaltet werden. Weiterlesen

Kapazitäten messen. Ein Eagle Board von Andre.

Andre hat ein Board in Eagle gezeichnet für die Kapazitäts Messung aus diesem Beitrag.

Das Board ist für einen Arduino Nano geeignet.
Benötigt werden der Arduino Nano, zwei Widerstände mit 220 Ohm / 10 kOhm und 1-3 Steckleisten.

Hier die Schaltung

und das Layout der Platine. Weiterlesen

In Processing den COM Port auswählen und Werte vom Arduino einlesen.

Wenn Werte vom Arduino abgerufen werden sollen muß zuerst der richtige COM Port ausgewählt werden und dann kann sich Processing damit verbinden. Für die Abfrage der Werte wird eine kurze Anfrage gesendet und der Arduino gibt den entsprechenden String zurück. Dieser wird in Processing eingelesen und dargestellt.

Hier werden als Beispiel 3 mögliche Strings ausgegeben:
1. Anfrage: n Antwort: Name des Geräts
2. Anfrage: s Antwort: Software Version
3. Anfrage: v Antwort: USB Spannung

Die USB Spannung wird ermittelt wie hier beschrieben. Dazu ist nur eine Brücke vom 3,3V Pin zum A0 Eingang notwendig.

Hier das Arduino Programm

// Arduino USB-Spannung an Processing ausgeben
//
// Matthias Busse 21.3.2017 Version 1.0
 
char wert; // Daten von der seriellen Schnittstelle
float vcc;
 
void setup() {
  Serial.begin(38400); // Baudrate
}
 
void loop() {
  vcc = 3.30 / analogRead(0) * 1023;
  while (Serial.available()) {       // Wenn serielle Daten kommen, dann lesen
    wert = Serial.read();            // Daten in wert speichern
    if (wert== 'n') {                // n: Name ausgeben
      Serial.println("USB Spannung messen");
    }
    if (wert== 's') {                // s: Software Version ausgeben
      Serial.println("Version 1.0");
    }
    if (wert== 'v') {                // v: Spannung ausgeben
      Serial.print(vcc);
      Serial.println(" V");
    }
  }
}

In Processing wird dann folgendes gemacht
Eine COM Port Auswahl mit einfachen Pfeiltasten. Dann kann man sich mit dem COM Port verbinden, die Verbindung wieder trennen oder die Liste der COM Ports neu einlesen. Der aktuelle Status wird im Feld darunter ausgegeben. Dazu wird eine einfache Button Klasse verwendet. Weiterlesen

Eine LED mit Processing schalten und den Status zurück bekommen vom Arduino

Die LED 13 auf dem Arduino Board soll nun von einem Processing Fenster aus umgeschaltet werden per Maus. Danach gibt der Arduino den Status der LED zurück in das Processing Fenster.

Das Processing Fenster reagiert einmalig auf den Mausklick in das Fenster und sendet dann abwechselnd eine 0 oder 1 an den Arduino. Dieser schaltet die LED um und gibt den LED Status als String zurück. Der String vom Arduino aus println hört mit \n auf. Das wird in Processing auch als Ende des Strings erkannt mit readStringUntil(‚\n‘).

Das Processing Text Ausgabe Feld im Windows Fenster muss erst mit einem leeren Rechteck abgedeckt werden und dann wird neuer Text drüber geschrieben.

Hier das Arduino Programm

// Arduino LED bei Mausklick umschalten
// aus einem Processing 3+ Fenster
// mit Status Rückmeldung vom Arduino
//
// Matthias Busse 19.3.2017 Version 2.0
 
char wert; // Daten von der seriellen Schnittstelle
int led = 13; // Board LED vom Arduino Uno
 
void setup() {
  pinMode(led, OUTPUT); 
  Serial.begin(38400); 
}
 
void loop() {
  while (Serial.available()) {       // Wenn serielle Daten kommen, dann lesen
    wert = Serial.read();            // Daten in wert speichern
    if (wert== '1') {                // 1 heisst einschalten
      digitalWrite(led, HIGH);       // LED einschalten
      Serial.println("LED ist an");  // Rückgabe
    }
    else {
      digitalWrite(led, LOW);        // LED ausschalten
      Serial.println("LED ist aus"); // Rückgabe
    }
  }
}

Das Processing 3.3 Programm Weiterlesen

Arduino LED mit Processing 3 per Mausklick schalten aus Windows

Die freie Processing Software kann Windows Fenster erstellen, Grafiken ausgeben, auf die Maus reagieren und mit der Seriellen Schnittstellen arbeiten.

Hier ein einfaches Beispiel in dem die Arduino LED13 parallel zum Mausklick eingeschaltet wird.

Zuerst wird das Arduino Programm übersetzt und hoch geladen auf den Uno.

// Arduino LED bei Mausklick anschalten
// aus einem Processing 3+ Fenster
//
// Matthias Busse 18.3.2017 Version 1.0
 
 
 char wert; // Daten von der seriellen Schnittstelle
 int led = 13; // Board LED vom Arduino Uno
 
 void setup() {
   pinMode(led, OUTPUT); 
   Serial.begin(38400); 
 }
 
 void loop() {
   while (Serial.available()) { // Wenn serielle Daten kommen, dann lesen
     wert = Serial.read(); // Daten in val speichern
   }
   if (wert == '1') { // bei einer 1
    digitalWrite(led, HIGH); // LED ein
   } 
   else {         // sonst
     digitalWrite(led, LOW); // LED aus
   }
 }

Dann das Processing Programm übersetzt Weiterlesen