November 2018

digitale Meßschieber mit dem Arduino auslesen

von Franziska Walter

Ich fand die Idee recht toll, wusste auch gar nicht, dass der in meinem Besitz befindliche Meßschieber eine Schnittstelle besitzt.

Als Erstes musste ein passender Stecker her um überhaupt eine Verbindung mit dem Meßschieber herstellen zu können.
Diesen Stecker habe ich als Vorlage genommen und den etwas bearbeitet, die Vorlage war etwas zu groß, ließ sich aber gut an meine Hardware anpassen.

Es gibt noch andere, vermeintlich bessere Stecker, dieser hier ließ sich am Einfachsten zusammen Bauen.

Nach ein paar Recherchen im Netz fand ich einige Sketche, die alle auch irgendwie funktioniert haben, aber keinen, der Richtig funktionierte.
Die Umschaltung der Maßeinheit gab es nirgends in den Sketchen, die ich gefunden habe.

Die Auswertung der gelieferten Daten mit dem Oszi waren doch kenntnisreich.

Die Bilder und das Video zeigen meinen derzeitigen Stand:

  • es kann gleichzeitig die Ausgabe auf seriell, Bluetooth und das Display erfolgen
  • es können bis zu Drei (auch mehr) Meßschieber ausgelesen werden
    in Ermangelung der Hardware kann ich im Moment nur 2 Meßschieber gleichzeitig testen
  • die Synchronisation erfolgt ohne Display Geflacker recht zügig, auch beim Ein/Aus stecken zwischendurch
  • Umschaltung der Maßeinheit mm/inch wird ausgewertet

Das Video soll nur aufzeigen, dass die Anzeige der Werte tatsächlich gleichzeitig bei beiden Meßschiebern funktioniert.

Etwas Merkwürdiges ist mir aufgefallen: Einer der Meßschieber sendet auch nach dem Auschalten weiter Daten. Der Andere sendet keine Daten mehr.

Ich bin mit meinen Tests noch nicht fertig, wenn Alles zu meiner Zufriedenheit läuft, gibt es weitere Infos :)

Arduino IDE - Java verursacht 100% CPU Last

von Franziska Walter

Auf dem Desktop Rechner fiel mir das gar nicht auf, aber auf dem Laptop schon ... nur mal eben einen Sketch neu kompilieren und hochladen ... jo, der Rechner blieb stehen und es tat sich Minutenlang gar nichts.

Die Lösung zeigte sich im Taskmanager: Java verursacht 100% CPU Last und bringt den Lappi zum Stillstand.

Ich machte mich auf die Suche: Siehe da, Andere hatten auch das Problem.
Die Ursache ist die mit der Arduino IDE mitgelieferte Java Installation:

Abhilfe: Die in der Beta Version mitgelieferte Java Version zeigt dieses Verhalten nicht!
Arduino IDE Beta herunterladen: auf der Seite herunterscrollen und den Download für die Beta Version auswählen.

Nach dem Herunterladen das *.zip File entpacken.
Den den originalen Java Ordner (Standard unter: C:\Program Files (x86)\Arduino ) durch den aus dem Download ersetzen.

Bei mir ist dadurch das Problem der CPU Last verschwunden.

128x64 Display für den Arduino

von Franziska Walter

Das Monochrome 0.96" 128x64 OLED graphic display ist eine feine Sache, um schnell und unkompliziert Ausgaben des Arduino darzustellen.

Das Original von Adafruit ist mir dann doch etwas zu teuer und ich habe mich für die Variante aus China entschieden.
Gekauft habe ich das Display in der verlinkten eBay Auktion (ist nicht das absolut Billigste, aber im Allgemeinen ist die Lieferung von diesem Händler recht flott (2 bis 4 Wochen)

Um mit dem Arduino zu kommunizieren, benötigt man eine Bibliothek für die Arduino IDE.
Entschieden habe ich mich für die Library: OLED_I2C

Leider kann man in dieser Bibliothek die benutzte I2C Adresse nicht einstellen.
Ich habe diese Bibliothek etwas an meine Belange angepasst, zB auch die mitgelieferten Zeichensätze MediumNumbers und BigNumbers um ein Leerzeichen ergänzt. Dies benötige ich für die Anzeige des digitalen Meßschiebers (wenn das Projekt funktionsfähig ist, gibt es dazu eine Beschreibung)

 

Display testen

Das erste Versuchsprojekt war eine analoge Uhr, die zwar auch in den Beispielen vorhanden war, aber überhaupt nicht funktionieren wollte.

Zusätzlich benötigt man dazu noch die Library: DS3231, die ich ebenfalls etwas erweitert habe (um deutsche Monatsnamen und Wochentage)

Zur Beschaltung gibt es nicht viel zu sagen: Die beiden Module (Display und Uhr DS3231) werden am Arduino an den I2C Bus angeschlossen.

Am Arduino NANO sind dies die Anschlüsse:

A4 - SDA
A5 - SCL

Um das Beispiel wie auf den Fotos zu probieren, beide Bibliotheken von hier herunterladen und in die Arduino IDE einbinden
Sketch -> Bibliothek einbinden -> .ZIP - Bibliothek hinzufügen -> hier nacheinander die beiden *.zip Files auswählen

Wenn alles geklappt hat, sollten auch die Beispiele vorhanden sein
Datei -> Beispiele -> OLED_I2C_FW -> Arduino ->  (passendes Display auswählen)

Das Beispiel analog Uhr findet sich nur unter 128x64

in den Beispielen muss die passende I2C Adresse ausgewählt werden (0x3C oder 0x3D)

Auf dem Display kann man diese Adresse durch umlöten eines SMD Widerstandes ändern, aufgedruckt sind 0x78 und 0x7A
Es ist tatsächlich richtig! die Unterschiede kann man ergooglen, liegen in einer falschen Interpretation der I2C Adresse, es wird ein Bit falsch ausgewertet.

Um die Adresse, bzw. die Funktion des jeweiligen I2C Moduls zu testen empfiehlt sich ein toller Sketch: i2c_scanner

 

Gehäuse

Das auf den Bildern dargestellte Display Gehäuse ist hier 0.96" 128x64 OLED Snapfit case zu finden

 

Download

Display Bibliothek: OLED_I2C_FW.zip

RTC DS321 Bibliothek: DS3231_FW.zip

 

Totalausfall / Fehlersuche

Die diversen Versuch liefen recht erfolgreich, doch dann die plötzliche Ernüchterung:

Von einem Moment zum Anderen gab eins von zwei Displays keinen Piep mehr von sich.
Die Suche im Netz verlief auch nicht sehr erfolgreich.

Hier die Lösung zu meinem Fehler:
Nachdem ich erst einmal mit dem 2. Display gecheckt habe, dass sonst nichts Anderes defekt ist, die Fehlersuche am Display

Ist eventuell der Spannungsregler (U2) defekt? - Nein, die Messung ergibt, Alles iO

Dann der Check mit dem I2C Scanner: Gerät antwortet nicht ...
Da ich sonst nicht mehr viel tun konnte, habe ich sämtliche Lötstellen auf der Platine nachgelötet.

Siehe da, der nächste I2C Scan war erfolgreich!

Ich vermute, es war eine kalte Lötstelle am Display Kabel, die Lötstellen sahen eher verklebt als verlötet aus.

Dies war bis jetzt der erste "richtige" Ausfall von China Bauteilen, der aber bis jetzt noch beherrschbar blieb.

 

Neuer Sensor BH1750 [Beta]

von Franziska Walter

Beim Umbau des Gehäuses für den Feinstaubsensor habe ich einen Lichtstärkesensor vom Typ BH1750 eingebaut.

Im Projekt des Feinstaubsensor ist dieser Sensor nicht enthalten. Also habe ich den zusätzlich integriert.
Die ersten Daten sind ab sofort zu sehen.

Da der Sensor die Beleuchtungsstärke misst, sind der Einbauort und die Position stark für die ermittelten Messwerte verantwortlich.
Ich habe den Sensor auf der Unterseite eingebaut, so dass nur indirekte Helligkeit gemessen wird.

Ob und wie sich das bewährt wird sich zeigen.

 

Montage des neuen Gehäuses

von Franziska Walter

Wie Versprochen hier noch die Bilder von den Einzelteilen und dem Zusammenbau des neuen Gehäuses.

 

Upgrade für den Feinstaubsensor

von Franziska Walter

Die zuletzt eingebauten Sensoren für Temperatur/Luftdruck/Luftfeuchtigkeit haben leider nicht sehr zuverlässig gearbeitet. Es war an der Zeit diese Sensoren auszutauschen.

Dies habe ich zum Anlass genommen, die frei fliegende Abflußrohr Verpackung gegen ein neues Gehäuse mit ordentlicher Befestigung zu tauschen.

Im ersten Schritt habe ich sämtliche Gehäuseteile gedruckt um zunächst die Elektronik neu zu montieren und zu verdrahten.
Der Aufbau der Elektronik mit den Sensoren auf der Bodenplatte ist auf den Bildern zu sehen.

Das Gehäuse liefere ich nach Fertigstellung nach.

Das Gehäuse ist eine Mischung aus zwei verschiedenen Projekten:
Dust sensor case (@airrohr) und Luftdaten Stevensson screen

Vom Ersten habe ich die Bodenplatte mit Befestigungsrahmen genommen und als Bodenplatte für das 2. Gehäuse angepasst.

Dieser Aufbau ist auf den Bildern zu sehen.

 

Gleichzeitig ist der Sensor BMP180 gegen den Sensor BME280 ersetzt worden. Daher gibt es in den Diagrammen unten etwas Verwirrung.
Dies wird sich in den nächsten Tagen wieder einpendeln, wenn genügend Daten vom neuen Sensor vorhanden sind.