Skip to content

Technik Blog

Programmieren | Arduino | ESP32 | MicroPython | Python | Raspberry Pi | Raspberry Pi Pico

Menu
  • Smarthome
  • Arduino
  • ESP32 & Co.
  • Raspberry Pi & Pico
  • Solo Mining
  • Über mich
  • Deutsch
  • English
Menu

Projekt: Ardudoro

Posted on 20. September 201522. Mai 2023 by Stefan Draeger

Als mein erstes Arduino Projekt möchte ich „Ardudoro“ vorstellen.
Der Name „Ardudoro“ setzt sich aus Arduino und Pomodoro zusammen.
Was Pomodoro ist, wird in diesem Wikipediaartikel sehr gut beschrieben.

Inhaltsverzeichnis

  • Der Grund für Ardudoro
  • Die Komponenten
  • Der Experimentelle Aufbau
  • Die Arduino Anwendung
    • Der Quellcode für den Nano
  • Die Java Anwendung LEDFrame
  • Absenden eines Strings aus der Anwendung
  • UML Diagramm
  • Das Video
  • Das fertige Programm zum Download inkl. Sourcen

Der Grund für Ardudoro

Wie jedes Projekt hat dieses auch einen Grund, auf Arbeit setzen wir Pomodoro häufig ein und es wird von jedem Entwickler angenommen und auch ausgerichtet, jedoch ist der Zustand nicht immer für jeden ersichtlich so kommt es des Öfteren vor das der Projektleiter oder andere Kollegen oder Fremdmitarbeiter diese Pomodorosession stört.

Durch dieses einfache Gerät wird es nun möglich sein deutlich kenntlich zu machen, wenn eine Pomodorosession läuft.

Die Komponenten

Es wurden folgende Komponenten verwendet:

  • Sodial Nano (nachbau des Arduino Nano) – 4,85€
  • Sodial 3 Farb RGB – 2,25€
  • Lochrasterplatine – 2,50€
  • Lötzinn, Lötkolben (15Watt)
  • Schrauben (M3), ein Sperrholzbrett (4mm stark)
  • eine Dose

Der Experimentelle Aufbau

Da das Hauptaugenmerk auf die Entwicklung einer Java Anwendung bestand ist der Aufbau so simple gehalten wie möglich.

Die Arduino Anwendung

Auch wenn das Gerät kein Original Arduino ist lässt sich mit der Arduino IDE für dieses Gerät entwickeln, man muss nur unter Tools->Board->Arduino Nano w/ ATmega328 einstellen und das Gerät über einen freien USB-Anschluss mit dem PC verbinden.
(Nicht über einen USB Hub.)

Der Quellcode für den Nano

Wenn man das Programm auf den Nano hochlädt und in der Arduino IDE den seriellen Monitor öffnet, wird eine kurze Hilfe angezeigt was für ein String erwartet wird.

Dieser String setzt sich aus folgenden Werten zusammen:

  • s – signalisiert den Start
  • r – der Wert für die Farbe Rot als dreistellige ganzzahl (zbsp. 000 oder 154)
  • g – der Wert für die Farbe Grün als dreistellige ganzzahl (zbsp. 000 oder 154)
  • b – der Wert für die Farbe Balu als dreistellige ganzzahl (zbsp. 000 oder 154)
  • t – die Zeit wie lange die LED aufleuchten soll, in Millisekunden
  • e- signalisiert das Ende
/*
* Dateiname: Projekt_Ardudoro.ino
* Thema: Pomodoro mit Unterstuetzung von Arduino (NANO)
*/

#define BLUE_LED 6  /* PIN fuer die blaue LED */
#define RED_LED 2   /* PIN fuer die rote LED */
#define GREEN_LED 4 /* PIN fuer die gruene LED */

void setup() {
  Serial.begin(9600);
  
  pinMode(BLUE_LED, OUTPUT);   /* Setzt den PIN fuer die blaue LED als Ausgang. */
  pinMode(RED_LED, OUTPUT);    /* Setzt den PIN fuer die rote LED als Ausgang. */
  pinMode(GREEN_LED, OUTPUT);  /* Setzt den PIN fuer die gruene LED als Ausgang. */
  /* Beschreibung der Funktion */
  Serial.println("Projekt Ardudoro"); 
  Serial.println("----------------"); 
  Serial.println(""); 
  Serial.println("Input:"); 
  Serial.println("      [s] Start of transmission"); 
  Serial.println("      [r] RED Value 0 - 255"); 
  Serial.println("      [g] GREEN Value 0 - 255"); 
  Serial.println("      [b] BLUE Value 0 - 255"); 
  Serial.println("      [t] Time in milliseconds (-1 for no timer)"); 
  Serial.println("      [e] End of transmission"); 
  Serial.println(""); 
  Serial.println("Example:"); 
  Serial.println("sr255g033b150t1000e");   
}  

void loop() { 
  /* prüfen ob es eine Eingabe auf dem Seriellen Port gibt.*/ 
  if (Serial.available() > 0) {
    /* Den Text lesen. */
    String input = Serial.readString();
    /* Leerzeichen entfernen.*/
    input.trim();
    /* Wenn der String nicht leer ist und mit den Zeichen s beginnt und mit dem Zeichen e endet.*/
    if(input.length()>0 && input.startsWith("s")&&input.endsWith("e")){
      analogWrite(RED_LED, input.substring(2,5).toInt());      
      analogWrite(GREEN_LED, input.substring(6,9).toInt());  
      analogWrite(BLUE_LED, input.substring(10,13).toInt());  

      int delayTime = input.substring(14,input.length()-1).toInt();
      if(delayTime){
         delay(delayTime);
         analogWrite(RED_LED, 000);      
         analogWrite(GREEN_LED, 000);  
         analogWrite(BLUE_LED, 000);  
      }
    } else {
        /* Wenn der String nicht mit s beginnt und mit e endet, oder der String leer ist dann gebe die Fehlermeldung aus. */
        Serial.println("SyntaxError ["+input+"]");
    }
  }
}

Wie im Quellcode ersichtlich ist, wird genau ein fest definierter Aufbau eines Strings erwartet.
Folgende Fehler könnten sich bisher einschleichen:

  • es werden die Parameter für die Farben (rot,grün,blau) vertauscht
  • es wird mehr als ein Parameter für eine Farbe eingegeben
  • es wird der Wert für die Farbe nicht 3-stellig eingegeben
  • es werden nicht nur nummerische Zeichen für den Wert der Farbe eingegeben
  • es wird ein Parameter vergessen
  • usw.

Diese Liste lässt sich sicherlich beliebig erweitern, jedoch ist dieser Aufbau für ein kleines Tutorial völlig ausreichend.

Die Java Anwendung LEDFrame

Java Anwendung LEDFrame

Absenden eines Strings aus der Anwendung

Die Anwendung stellt mit der Oberfläche die Einstellungen für den Aufbau der Verbindung sowie die Wahl der Farbe und die Leuchtdauer bereit.

Nachdem der Benutzer alle Daten gewählt hat, wird über den Button folgende Aktion ausgeführt:

SerialCommunication serialCommunication = new SerialCommunication.SerialCommunicationBuilder(model.getPortname()).setSerialPortParameter(model.getBaudrate(), model.getDatabits(), model.getStopbits(), model.getParity()).setSleepForClosePortEvent(model.getSleep()).build();
Map<String, Integer> colorMap = model.getColorMap();
int redValue = colorMap.get(RED);
int greenValue = colorMap.get(GREEN);
int blueValue = colorMap.get(BLUE);

DecimalFormat decimalFormat = new DecimalFormat("000");
String value = String.format("sr%sg%sb%st%se", decimalFormat.format(redValue), decimalFormat.format(greenValue), decimalFormat.format(blueValue), model.getSleep());
serialCommunication.openPort();
serialCommunication.writeString(value);
serialCommunication.closePort();

Wie hier zusehen ist, wird der erwartete String über die Methode String.format (Zeile 8) in das im Arduino Programm definierte Format gebracht wird, somit ist sichergestellt, das hier wenig schiefgehen kann.

Es wird nun der Port geöffnet, der String wird geschrieben und danach wird der Port wieder geschlossen.

Da die Klasse SerialCommunication die Klasse jssc.SerialPort „nur“ Wrappt sind die dahinterliegenden Methoden nicht sichtbar dies ist von mir so gewollt da das konstukt in jssc simple jedoch etwas fehleranfällig ist. Fraglich ist, warum ich ein SerialPortEvent auslösen muss damit ich etwas auf den Seriellen Port schreiben kann. Dies bedeutet ich blähe meinen Code unnütz auf, dieses habe ich gelöst, indem die Klasse SerialCommunication dieses für mich erledigt und ich mich mit weniger Methoden und Klassen beschäftigen muss.

Die gesamte Java Klasse.

SerialCommunication

Was an der Klasse SerialCommunication fehlt, ist die Möglichkeit zu lesen. Diese Funktionalität wird mit dem nächsten Projekt implementiert.

UML Diagramm

Zur Verdeutlichung wie das Programm LEDFrame aufgebaut ist soll folgendes UML Klassendiagramm dienen.

UML Diagramm der Anwendung LEDFrame

Die Kommunikation zwischen der Anwendung LEDFrame und dem Arduino erfolgt über die Klasse SerialCommunication diese leitet sich aus der Klasse jssc.SerialPort ab.
Das Package JSSC kann über Maven oder als externe JAR Datei >>hier<< bezogen werden.

UML Diagramm der Klasse SerialCommunication

Das Video

Java Projekt "Ardudoro"
Dieses Video auf YouTube ansehen.

Das fertige Programm zum Download inkl. Sourcen

Ardudoro – Anwendung LEDFrameHerunterladen
Ardudoro – QuellcodeHerunterladen
Ardudoro – JavaDocHerunterladen

Schreibe einen Kommentar Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Fragen oder Feedback?

Du hast eine Idee, brauchst Hilfe oder möchtest Feedback loswerden?
Support-Ticket erstellen

Newsletter abonnieren

Bleib auf dem Laufenden: Erhalte regelmäßig Updates zu neuen Projekten, Tutorials und Tipps rund um Arduino, ESP32 und mehr – direkt in dein Postfach.

Jetzt Newsletter abonnieren

Unterstütze meinen Blog

Wenn dir meine Inhalte gefallen, freue ich mich über deine Unterstützung auf Tipeee.
So hilfst du mit, den Blog am Leben zu halten und neue Beiträge zu ermöglichen.

draeger-it.blog auf Tipeee unterstützen

Vielen Dank für deinen Support!
– Stefan Draeger

Kategorien

Tools

  • Unix-Zeitstempel-Rechner
  • ASCII Tabelle
  • Spannung, Strom, Widerstand und Leistung berechnen
  • Widerstandsrechner
  • 8×8 LED Matrix Tool
  • 8×16 LED Matrix Modul von Keyestudio
  • 16×16 LED Matrix – Generator

Links

Blogverzeichnis Bloggerei.de TopBlogs.de das Original - Blogverzeichnis | Blog Top Liste Blogverzeichnis trusted-blogs.com

Stefan Draeger
Königsberger Str. 13
38364 Schöningen

Tel.: 01778501273
E-Mail: info@draeger-it.blog

Folge mir auf

  • Impressum
  • Datenschutzerklärung
  • Disclaimer
  • Cookie-Richtlinie (EU)
©2025 Technik Blog | Built using WordPress and Responsive Blogily theme by Superb
Cookie-Zustimmung verwalten
Wir verwenden Technologien wie Cookies, um Geräteinformationen zu speichern und/oder darauf zuzugreifen. Wir tun dies, um das Surferlebnis zu verbessern und um personalisierte Werbung anzuzeigen. Wenn Sie diesen Technologien zustimmen, können wir Daten wie das Surfverhalten oder eindeutige IDs auf dieser Website verarbeiten. Wenn Sie Ihre Zustimmung nicht erteilen oder zurückziehen, können bestimmte Funktionen beeinträchtigt werden.
Funktional Immer aktiv
Die technische Speicherung oder der Zugang ist unbedingt erforderlich für den rechtmäßigen Zweck, die Nutzung eines bestimmten Dienstes zu ermöglichen, der vom Teilnehmer oder Nutzer ausdrücklich gewünscht wird, oder für den alleinigen Zweck, die Übertragung einer Nachricht über ein elektronisches Kommunikationsnetz durchzuführen.
Vorlieben
Die technische Speicherung oder der Zugriff ist für den rechtmäßigen Zweck der Speicherung von Präferenzen erforderlich, die nicht vom Abonnenten oder Benutzer angefordert wurden.
Statistiken
Die technische Speicherung oder der Zugriff, der ausschließlich zu statistischen Zwecken erfolgt. Die technische Speicherung oder der Zugriff, der ausschließlich zu anonymen statistischen Zwecken verwendet wird. Ohne eine Vorladung, die freiwillige Zustimmung deines Internetdienstanbieters oder zusätzliche Aufzeichnungen von Dritten können die zu diesem Zweck gespeicherten oder abgerufenen Informationen allein in der Regel nicht dazu verwendet werden, dich zu identifizieren.
Marketing
Die technische Speicherung oder der Zugriff ist erforderlich, um Nutzerprofile zu erstellen, um Werbung zu versenden oder um den Nutzer auf einer Website oder über mehrere Websites hinweg zu ähnlichen Marketingzwecken zu verfolgen.
Optionen verwalten Dienste verwalten Verwalten von {vendor_count}-Lieferanten Lese mehr über diese Zwecke
Einstellungen anzeigen
{title} {title} {title}