Go Down

Topic: Volt, Ampere, Watt, Temperatur (und evtl. Uhrzeit) auf LCD ausgeben (Read 2777 times) previous topic - next topic

Gelegenheitsbastler

Um mich mit der Materie vertraut zu machen, möchte ich einem Labornetzteil ein 20 x 4 Display spendieren. Darauf sollen Volt, Ampere, Watt, 2 x Temperatur und wenn es trotzdem noch übersichtlich bleibt, auch die Uhrzeit angezeigt werden. Ich möchte ungern das Rad neu erfinden. Daher möchte ich eine bereits funktionierende Lösung kopieren.

Hierzu habe ich mit der großen Suchmaschine nach passenden Seiten gesucht, auf denen sowohl ein Sketch als auch die benutzte Hardware, so wie deren Anschluss an den Arduino gezeigt werden. Leider bin ich nicht fündig geworden. Entweder wurde nur die Software so wie das Ergebnis auf dem Display oder es wurde der Anschluss an den Arduino gezeigt.

Kennt ihr eine Seite (möglichst deutschsprachig), auf der mal beides gezeigt wird? So wie ich das bisher verstanden habe, könnte ich mehrere Sketches miteinander kombinieren, so dass ich mir die Lösungen von verschiedenen Seiten zusammen suchen kann.

Bestellt habe ich mir für das Projekt bisher einen Arduino Uno, ein Display, ein paar DS 18S20 und ein paar LM 35 DZ (weniger als 0 und mehr als 100 Grad werde ich nicht messen müssen). Steckboard, Verkabelung, Widerstände, Spannungsversorgung, Transistoren, etc. sind vorhanden. Multimeter, Oszilloskop, etc. ebenfalls.

An welchen Pins darf ich überhaupt externe Spannungen anlegen (A5 ? ) und wie hoch dürfen die sein??



Anfänger, der sich am Mega versucht. (Wegen Pin-Mangel bin ich vom Uno auf den Mega umgestiegen) Aktuelles Projekt: http://mfc-wittgenstein.

Klaus_ww

Wie immer empfehle ich den Einstieg als Neuling - egal in welchem Forum - mit einem freundlichen "Hallo".
Des weiteren empfehle ich die Beispielsketches aus der IDE, die weisen Dir schon den Weg.
Dazu noch eine Portion Theorie und Du weißt wo es langgeht. Da werden dann auch solche Fragen erschöpfend erläutert "wie messe ich Analogspannungen und wie hoch dürfen die sein".
Der arduino Playground ist eine große Fundgrube für Dich, da muss hier niemand copy/paste machen.

Als Gelegenheitsbastler sollten Dir die Grundlagen eh klar sein, also Vin nicht größer als Vcc ...

Grüße
Klaus

marau

Hallo Gelegenheitsbastler,

bevor Du das ganze angehst, solltes Du Dich mit der Schaltung des zu verwendenden Netzteils befassen!

Es gibt nämlich auch Netzteilschaltungen mit schwebender Masse, die kannst Du dann schon nicht mehr direkt mit dem Arduino verbinden, da benötigst Du dann eine galvanische Trennung, am besten dann über SPI und Induktivkoppler mit externen A/D-Wandlern (z.B. MCP3201 mit Induktivkoppler ADuM1401).

Des weiteren wirst Du das Signal des Fühlerwiderstands für den Strom verstärken müssen, sonst müsstest Du ja bei maximalem Strom einen Spannungsabfall von 5V über dem Fühlerwiderstand haben!

Als Display kannst Du evtl. auch ein grafisches Display mit KS0108-kompatiblem Controller ins Auge fassen, die können bei einer Auflösung von 128x64 Pixel bis zu 8 Zeilen zu 21 Zeichen darstellen, die GLCD-Library findet Du auf der Arduino-Seite.


Gruß

Martin

Gelegenheitsbastler

#3
Jul 01, 2013, 09:02 pm Last Edit: Jul 01, 2013, 09:07 pm by Gelegenheitsbastler Reason: 1
Hallo Klaus,

ja, das Hallo habe ich wohl vergessen, das muss ich zu meiner Schande gestehen. Zur Ehrenrettung sei erklärt, wie es dazu kam. Ich habe meinen ersten Beitrag (mit Hallo) noch viel länger geschrieben. Dann gab es Abendessen. Danach habe ich weiter getippt und gesendet. Ja, hätte ich vorher mal lieber den Text kopiert. Der Timeout sorgte dafür, dass ich alles nochmal tippen musste. Diesmal ist der Beitrag kürzer und ich habe das Hallo vergessen, da ich mich ziemlich geärgert habe. Das dazu.

Den von dir angegebenen arduino Playground habe ich völlig übersehen. Das steht oben links so klein, dass ich es wirklich... Vielen Dank für den Tip! Da stehen ja noch viel genialere Sachen drin als ich mir bisher so ausgedacht habe  XD

Die Beispiele in der IDE habe ich mir angeschaut, aber nicht das Passende gefunden. Daher meine Frage nach einer passenden Seite. Es ist ja nun nicht so, dass ich sage "Ich hätte gerne... ...wer macht das für mich"

Ich werde mich jetzt erstmal ausgiebig im Playground umsehen. Aber da kommen dann sicher noch ganz andere Fragen als bisher ;)

Frank

edit:
@Martin: Die Schaltung ist soweit bekannt. Das geht schon. Aber der Spannungsabfall über dem Shunt ist natürlich westentlich kleiner als 5 Volt, da darüber auch schon mal 50 A laufen. Das habe ich auch schon überlegt, wie ich die Spannung linear exakt anheben kann. Das mit dem Display werde ich mir morgen in Ruhe anschauen. Vielen Dank für die Tips!
Anfänger, der sich am Mega versucht. (Wegen Pin-Mangel bin ich vom Uno auf den Mega umgestiegen) Aktuelles Projekt: http://mfc-wittgenstein.

marau

Hallo Frank,

die Spannung über dem Shunt kannst Du ja mit einem OP verstärken.

Dazu empfiehlt sich dann ein Einfach-Typ mit herausgeführten Anschlüssen zum Nullpunktabgleich (z.B. TL071).

Die symmetrische Spannung für den OP kannst Du evtl. über einen kleinen Gleichspannungswandler aus der 5V-Versorgung des Arduino erzeugen, da brauchts ja nur ein paar Milliampere.
Am besten das ganze dann mit einstellbarer Verstärkung, dazu Spindeltrimmer verwenden.


Gruß

Martin

Klaus_ww

Wenn Du nicht unbedingt alle Werte ständig brauchst kannst Du auch ein preiswertes 2- oder 4-zeiliges LCD nehmen und dann die Werte abwechselnd anzeigen. Ist halt abhängig davon, was Du wie und in welcher Genauigkeit darstellen möchtest.
Bezüglich Einstieg: AnalogInput aus den Beispielsketches ist m.E. schon ein guter Start, Du wirst Deine Messgrößen ja als analoge Spannungen vorliegen haben?

Grüße
Klaus

-Micky

Jeder Meßwert auf einem Display. Ich habe momentan 4 Stück für meine Temperaturmessungen an einem UNO. Alle über I2C.

Diese grafischen Displays überzeugen mich bezüglich der Lesbarkeit gar nicht. Ist alles so verwaschen, sprich wenig Kontrast und wenig konturenreich. Und das was schwarz sein soll ist so ein verwaschenes Grau.


Micky

Gelegenheitsbastler

Guten Morgen zusammen,

nachdem ich noch ein paar Stunden darüber (und Playground) gebrütet habe, was ich so alles mit dem Arduino anstellen werde, sind doch einige Änderungen zusammen gekommen. Ich werde nicht das Labornetzteil mit einem LCD bestücken, sondern eine Stromsenke. Die befindet sich noch im Rohbau, funktioniert aber schon. Folgendes werde ich versuchen umzusetzen:

1 ) 20 x 4 LCD an Arduino anbinden (bin mir noch nicht schlüssig, ob I2C oder nicht - verträgt sich das mit dem RTC Modul am gleichen Bus? )
2 ) RTC mit einem fertigen Modul anschließen und Uhrzeit auf LCD ausgeben (ebay 330868967962) [2 x analog, SDA, SCL]
3 ) 3 Stück DS18S20 anschließen und Werte über LCD ausgeben [1 x digital]
4 ) Spannung über Spannungsteiler ermitteln und auf LCD ausgeben [1 x analog]
5 ) Strom (Spannungsabfall über Shunt) über OP anheben und auf LCD ausgeben [1 x analog]
6 ) Daten zur grafischen Darstellung über USB an LogView übermitteln
7 ) Vorhandenes 10-Gang Poti durch digitales Poti MCP 4151 ersetzen (habe noch keine Idee, wie ich das anstellen soll. Die Spannung, die das bisherige Poti regelt beträgt 12 Volt und nicht änderbar) [2 x digital]
8 ) Feste Szenarien (z. B.  X-Sekunden 5 A, Y-Sekunden 10 A, etc.) programmieren, mit denen die Stromsenke die Geräte/Akkus belastet
9 ) Buzzer anschließen, der ertönt, sobald vorgegebene Werte überschritten werden [1 x analog]
.
.

@Martin:
Über der Lösung mit dem OP brüte ich noch. In der Schaltung ist ein 4fach OP verbaut, bei dem noch zwei OPs frei sind.

@Klaus:
Ich hoffe, dass alles auf ein 20 x 4 Display passt, ohne umschalten zu müssen. Das könnte dann beispielhaft (die Bindestriche sollen Leerzeichen werden) so aussehen:

14:32--01.01.2013
12,45 V--10,7 A
133 Watt
34 'C--35 'C--34'C

@Micky
Ich bezweifle ebenfalls, ob die (bezahlbaren) grafischen Displays einen so guten Kontrast haben wie die einfachen LCD Displays. Daher werde ich auch erst einmal beim einfachen 20 x 4 Display anfangen. Wie ich oben schon geschrieben habe, bin ich mir nur noch nicht schlüssig, wie ich es ansteuern soll. Grob überschlagen müsste ich für meine Anwendungen für beide Anschlussoptionen genügend Pins haben. Präventiv habe ich mir schon mal eine kleine PCB zum Anlöten an das Display geordert, um es via I2C anzusprechen.

Frank
Anfänger, der sich am Mega versucht. (Wegen Pin-Mangel bin ich vom Uno auf den Mega umgestiegen) Aktuelles Projekt: http://mfc-wittgenstein.

Serenifly

#8
Jul 02, 2013, 11:21 am Last Edit: Jul 02, 2013, 11:26 am by Serenifly Reason: 1

1 ) 20 x 4 LCD an Arduino anbinden (bin mir noch nicht schlüssig, ob I2C oder nicht - verträgt sich das mit dem RTC Modul am gleichen Bus? )

Sicher. Dafür ist I2C ja da. Die ICs haben unterschiedliche Adressen und kommen sich dadurch nicht in die Quere. Ist einfach schöner anzuschließen.

Du könntest theoretisch sogar mehrere Displays am gleichen Bus anschließen solange man die Adressen ändern kann. Bei meinem I2C Display geht das.

Quote
Über der Lösung mit dem OP brüte ich noch. In der Schaltung ist ein 4fach OP verbaut, bei dem noch zwei OPs frei sind.

Verwende dafür am Besten einen etwas besseren OP und nicht ein einfaches 741-Derivat (z.B. LMx24). Der OP-08 z.B hat schon von Haus aus eine sehr geringe Offset-Spannung. Rail-to-rail wäre natürlich auch praktisch wenn man nur mit 5V arbeitet.

-Micky

Mit ein bißchen löten kann man bei den I2C Adaptern, die man direkt auf das LCD Display steckt, mehrere verschiedene Adressen einstellen.

Ich habe vier LCD Displays an einem UNO laufen. Für jeden Meßwert eins.


Micky

Gelegenheitsbastler

Könntest du mal ein Foto von deinem Gerät einstellen? Inzwischen denke ich, dass das gar keine so schlechte Idee ist, mehrere Display zu nutzen. Die Adapter habe ich bestellt. Aber da es günstig sein sollte, dauert es jetzt 3-4 Wochen. Derweil muss ich mich mit dem 2zeiligen und 16stelligen Display begnügen, dass ich hier habe.

Es gibt eine erste Erfolgsmeldung -> s. Anhang :)

Damit sind Punkt 1 und 2 schon mal erledigt. Wobei ich es gerne noch etwas anders hätte. Vor dem Datum soll der Wochentag stehen. Laut dieser Beschreibung http://playground.arduino.cc/Code/Time geht das aber nicht. Das einzige, was ich hin bekommen habe, ist eine 05 für Donnerstag. Ich hätte aber gerne ein Do. dort stehen. Wie kann man das Problem lösen? Ich bin absoluter Frischling was das Programmieren angeht und noch nicht viel weiter als "Hello World" gekommen, daher hoffe ich um etwas Nachsicht. Die ursprünglichen Idee habe ich von hier http://macherzin.net/Arduino++Echtzeit und dann so lange abgeändert, bis es so aussah, wie es jetzt ist.

Frank

Anfänger, der sich am Mega versucht. (Wegen Pin-Mangel bin ich vom Uno auf den Mega umgestiegen) Aktuelles Projekt: http://mfc-wittgenstein.

Serenifly

#11
Jul 04, 2013, 09:17 pm Last Edit: Jul 04, 2013, 10:15 pm by Serenifly Reason: 1
Die RTC zählt die Tage nur so mit (z.B. So = 1, Mo = 2...). Da musst du dir einfach eine Routine schreiben die dir Nummern in Strings umsetzt. Das ginge z.B. über ein String array. Oder einfach eine Switch-Anweisung die je nach der Nummer einen anderen String aufs Display schreibt. Oder if/else wenn dir das lieber/verständlicher ist.

Code: [Select]

int dayofweek = weekday();

switch(dayofweek)
{
   case 1:
     lcd.print("So");
     break;
   case 2:
     lcd.print("Mo");
     break;
.
.
.
}


Das ist nur ein übersichtlicherer Weg um eine lange if/else Reihe zu schreiben:
http://arduino.cc/en/Reference/SwitchCase

Gelegenheitsbastler

Genial, das funktioniert! Danke! Allerdings war noch ein kleiner Fehler drin. Ich habe es jetzt so gemacht:

Code: [Select]

.
.
.
{
  case 01:
   lcd.print("So. ");
    break;
  case 02:
    lcd.print("Mo. ");
    break;
.
.
.


Morgen gehts weiter. Gute N8.

Frank
Anfänger, der sich am Mega versucht. (Wegen Pin-Mangel bin ich vom Uno auf den Mega umgestiegen) Aktuelles Projekt: http://mfc-wittgenstein.

Serenifly

#13
Jul 04, 2013, 10:14 pm Last Edit: Jul 04, 2013, 10:24 pm by Serenifly Reason: 1
Ja, das hatte ich auch gerade gesehen. Die Time Library definiert 1 als Sonntag und 7 als Samstag. Bei mir verwende ich das nicht, und es gibt auch RTC Klassen die Sonntag als 0 haben.

Da gibt es auch ein enum, das aber nirgends verwendet wird:
Code: [Select]

typedef enum {
   dowInvalid, dowSunday, dowMonday, dowTuesday, dowWednesday, dowThursday, dowFriday, dowSaturday
} timeDayOfWeek_t;


Die führende Null hast du übrigens nur bekommen weil du das wahrscheinlich über lcd.printDigits ausgegeben hast. Das ist eigentlich dazu da die führenden Nullen bei Zeit und Datum zu erzeugen, damit die Ausgabe immer gleich breit ist. Für andere Ausgaben solltest du einfach lcd.print nehmen.

Gelegenheitsbastler

Guten Morgen zusammen,

da ich die Abkürzungen der Wochentage gerne auf deutsch haben möchte, kann es ruhig so bleiben, wie es ist.

Weil die Temperatursensoren noch nicht geliefert sind, habe ich mich an der Wiedergabe von Spannungen versucht. Das war bisher leider nicht sehr erfolgreich. Ich möchte einen Spannungsbereich von 0 bis etwa 30 Volt darstellen. Dazu habe ich mir testweise einen Spannungsteiler (ca. 25K und 2,5K) gebaut. Als Sketch habe ich diesen verwendet: http://startingelectronics.com/articles/arduino/measuring-voltage-with-arduino/

Leider schwankt die 5 V Spannung etwas. Sie ist ohne Display höher als mit. Ich habe die 5V-Spannung mit Display gemessen und den Wert in den Sketch eingegeben. Ebenso habe ich den Multiplikator mit Vin und Vout ermittelt und eingegeben. Danach habe ich eine Referenzspannungsquelle (2.5, 5.0, 7.5, 10.0 V) angeschlossen. Bei 2,5 Volt passt die Anzeige im Monitor. Aber je höher die Spannung ist, desto mehr driftet die Anzeige noch oben ab. Bei 10 Volt wurden 10,2xx Volt angezeigt. Die Referenzspannungsquelle ist recht genau. Daran liegt es nicht. Die Fluke-Multimeter sind zwar älter aber zeigen bis auf die letzte der 4 1/2 Stellen den gleichen Wert an. Daran liegt es also auch nicht, denke ich.

Dann habe ich nach einer Lösung im Netz gesucht und das hier gefunden: http://klaas.homeip.net/ArduinoWiki/doku.php?id=arduino:sensoren:spannung

Die Ausgabe auf dem Monitor zeigt exakt 1,10 Volt ohne Schwankungen an. Damit hätte ich schon mal eine genaue Referenz. Aber wie bringe ich dem Prozessor bei, dass er meine Spannung aus dem Spannungsteiler auf diese Referenz beziehen soll? Trotz langer Suche habe ich keinen passenden Sketch gefunden. Kennt von euch jemand einen passenden Link?

Frank



Anfänger, der sich am Mega versucht. (Wegen Pin-Mangel bin ich vom Uno auf den Mega umgestiegen) Aktuelles Projekt: http://mfc-wittgenstein.

Go Up