Show Posts
Pages: 1 2 3 [4] 5 6 ... 21
46  International / Deutsch / Re: SSR / TRIAC / MOSFET / OPTOCOPPLER ? on: March 25, 2014, 01:03:32 pm
Dies SSR ist recht praktisch: http://www.reichelt.de/Solid-State-Relais/S216-S02F/3/index.html?&ACTION=3&LA=2&ARTICLE=15444&GROUPID=3298&artnr=S216+S02F
Kann die 16A einer Steckdose schalten, ist klein und trotzdem sitzen die Pins nicht so gefährlich nah, wie bei einem IC. Wenn man da nicht ganz sauber arbeitet und die Lötaugen zu groß ausfallen, werden die Sicherheitsabstände ganz schnell unterschritten.
Zu meiner Jugend (in den 80'ern) gabs die SSR noch nicht. Ich war froh, wenn ich nen passenden Triac oder Thyristor zu kaufen bekam. Ich habe mir meine SSR's selber gebaut mit Optokoppler. IR-LED und Fototransistor Kopf an Kopf (beides 4mm Epoxgehäuse) in einen Textilverstärkten Isolierschlauch. 2 getrennte Leiterplatten, die nur durch diesen "Optokoppler" in Verbindung standen. Das waren so meine Basteleien mit 14.
Lichtorgel mit 3 Kanälen und Pausenlicht, Strobo mit dicken Elkos und Spannungsverdoppler aus dem Netz...  Entweder, man weiß was man tut und ist vorsichtig, oder man ist ganz schnell Anwärter für den Darwin Award http://www.darwinawards.com/deutsch/  smiley-twist

Gruß Gerald
47  International / Deutsch / Re: Schimmelwarner mit DHT22 MLX90614 und 40x4 LCD Display on: March 24, 2014, 01:31:08 pm
Hallo,
Schimmelwarner, ist ja ne´ nette Geschichte.
Nur DAS: "if(celcius - taupunktTemp < 0)  // richtige Formel"
ist das dümmste, was Du machen kannst.
Bei "0" ist es schon nass! 100% Luftfeuchte!

Hast Recht, kannst ja statt 0 auch 1 oder jede andere Zahl angeben. Das ist ja das Schöne am Quellcode, das jeder dran rumfummeln kann  smiley-wink

Bei dieser Wetterlage (91,6%rF) wirst Du es schwer haben, die Luftfeuchte zu
drücken- also heizen. Bei 23.2°C wird das schon schwierig. Da muß Deine Heizung
richtig "Gas geben". Das Raumklima läuft Dir dabei aber aus dem Ruder.

Ich kann aber auch den Kühlschrank aufmachen. Die Kühlschlangen haben eine Temperatur unterm Taupunkt und trocknen die Raumluft ebenfalls  smiley-evil
48  International / Deutsch / Re: Schimmelwarner mit DHT22 MLX90614 und 40x4 LCD Display on: March 23, 2014, 06:45:29 am
Ich bin jetzt kein Bau- oder Sanierungsexperte.
Aber richtig stoßlüften bringt mehr, als alle Stunde mal kurz ankippen. Beim Stoßlüften wird die warme, feuchte Luft im Zimmer, gegen kalte trockene Luft von draußen ausgetauscht. Wenn man die kalte Luft erwärmt, wird sie relativ gesehen noch trockener, da sie ja erwärmt mehr Feuchtigkeit aufnehmen kann. Trockene Luft braucht auch nicht so viel Energie zum Erwärmen, da Wasserdampf einen höheren Wärmekoeffizienten hat.
Wen  du das Fenster nur wenig ankippst, kann es dir passieren, das dort, wo die kalte Luft unten ins Zimmer einströmt, sich die Wand abkühlt und sich dort Kondenswasser aus der warmen Raumluft bildet. Das wäre dann das genaue Gegenzeil von dem, was man erreichen will.
Deshalb ist es umso wichtiger präventiv vorzugehen. Wenn im Sommer das Mauerwerk durchgetrocknet ist, isoliert es gut und diesen Zustand sollte man durch Lüften aufrecht erhalten. Wenn man erst mal eine nasse, kalte Stelle hat, wird dort immer wieder Feuchtigkeit kondensieren. Ein Teufelskreis! Wir haben so ein Problem im Schlafzimmer. Die Wand wurde im ersten Jahr neu tapeziert, im nächsten Jahr wurde der Putz runtergehackt und mit Silica Farbe gestrichen, die dem Schimmel keine Nahrung bietet. Trotzdem gibt es noch kleine Stellen. Der Hausverwalter ist zum Glück sehr kooperativ und hat jedesmal umgehend Handwerker in Marsch gesetzt. Das Problem ist eher der Altbau mit dem Fallrohr der Dachrinne und dem Giebel, wo das Nachbarhaus eine Ecke nicht abdeckt, weil es niedriger ist. Ein digitales 8€ Messgerät habe ich schon gekauft, ist besser als garnichts, aber wenn man was Maßgeschneidertes basteln kann, ist das natürlich noch besser. Und wenn ein halbwegs praxistaugliches Schätzeisen daraus wird, interessiert das vermutlich auch den Hausverwalter.
49  International / Deutsch / Re: Schimmelwarner mit DHT22 MLX90614 und 40x4 LCD Display on: March 23, 2014, 05:04:42 am
Hallo,

danke für die Blumen, freut mich, das euch das Projekt gefällt. Das Meiste davon ist ja nicht auf meinem Mist gewachsen, sondern nur von mir miteinander kombiniert worden  smiley-wink
Die Formel habe ich mir ergoogelt mit den Stichworten Arduino und Taupunkt
https://www.google.de/?gfe_rd=cr&ei=6a0uU9tq5dryB8acgYgJ#q=arduino+taupunkt
z.B. hier: http://www.macherzin.net/article60-Temperatur-Feuchtigkeitssensor-DHT22-und-RHT03
Auch in anderen Links trifft man immer wieder auf diese Formel. Über das wie gut oder wie präzise sie arbeitet, kann ich nichts sagen.
Laut Murphy summieren sich Fehler sowieso immer in die für einen ungünstige Richtung  smiley-razz
- Der DHT22 hat Abweichungen bei der Temperatur und der Feuchte
- vom IR Sensor finde ich keinen Öffnungswinkel im Datenblatt - im worst case misst er später vielleicht noch einen Teil des Heizkörpers mit.
- die Formel ist vielleicht auch nur eine Näherung
Wie groß ist also der resultierende Fehler über alles?
Fakt ist, es ist besser als nichts, man sollte nur nicht so technikhörig sein und alle Nachkommastellen für bare Münze nehmen. Dieser Versuchung erliegt man bei allen digitalen Anzeigen, wie Messchieber, etc.  smiley
Das Ganze sollte eher als Denkanstoß für eigene Basteleien herhalten. Ein Schaltausgang, statt der Warnung in der Anzeige wäre leicht zu realsisieren. Oder ein Datenlogger auf SD-Karte. Wobei bei mir schon 8,8k Code zusammengekommen sind. Die Lib für SD ist da wohl auch ein "Schwergewicht" Ansonsten muß dann ein Mega, oder ein 1284 (gibts als DIL40) herhalten.
Der IR Sensor zeigt auf dem Breadboard momentan noch "Mist" an. Entweder, weil er die Deckentemperatur misst, wo es wärmer ist, oder weil ich mich drüber beuge. Und den DHT soll man wohl auch nicht in zu kurzen Intervallen zwecks Eigenerwärmung auslesen.
Ist erst mal ein Aufbau auf dem Breadboard. Soll aber mal ein sinnvolles Messgerät werden  smiley

PS. komme auf 1° Unterschied zwischen der Berechnung vom Arduino und dem oben angeführten Onlinerechner bei gemessenen 21,8°C und 48,8% Luftfeuchte. Wobei der Arduino 1° drüber liegt, was garnicht so schlecht ist, da 1° eher warnen bedeutet, das die Wand noch nicht nass ist - 1° später wäre nicht so gut.

Gruß Gerald
50  International / Deutsch / Schimmelwarner mit DHT22 MLX90614 und 40x4 LCD Display on: March 22, 2014, 03:54:00 pm
Hallo,

ich habe mal mit ein bisschen interessanter Hardware herumgespielt und herausgekommen ist ein Schimmelwarner.
Die Idee kam mir schon beim Testsketch zum DHT22. Aus Lufttemperatur und Luftfeuchte läßt sich der Taupunkt berechnen. Hintergrund ist, das kalte Luft weniger Feuchtigkeit aufnehmen kann. Der Taupunkt ist die Temperatur, wo sich aus den gemessenen Werten dann Sättigung ergibt. Die Formel hatte bereits ein netter Mensch bereits in Code "gegossen"  smiley
Wenn nun eine Außenwand kälter ist, als der Taupunkt, dann kondensiert dort die Luftfeuchtigkeit. Die Folge sind feuchte Wände und Schimmel! Durch Stoßlüften kann man die Luftfeuchte verringern und so aus dem gefährlichen Bereich herauskommen. Ein herkömmlicher Temperaturfühler, um die Wand zu messen ginge auch, wäre aber uncool  smiley-cool
Zufällig las ich hier im Forum von den berührungslosen IR Sensoren von Melexis. In einem Ebayshop in Amerika gibts die Dinger für ca. 11,50€, samt Link auf einen Testsketch.
Auf einem 20x4 LCD ließ sich alles nur abkürzen und nicht sinnvoll darstellen. Glücklicherweise hat Pollin 40x4 LCD Displays für 12,95€ - sogar billiger, als der freundliche Chinse liefern kann  smiley-grin
Das Problem ist, das 40x4 Display elektrisch eigentlich zwei 40x2 Displays sind und 2 Enable Pins besitzt. Die LiquidCrystalFast Lib kann damit umgehen.
Nun noch ein bisschen die einzelnen Libs und Codeschnipsel miteinander verwursten und heraus kommt dann ein Schimmelwarner.
Code:
// Einbinden des DHT22
#include <i2cmaster.h>
#include "DHT.h"                            // Library für DHT Sensor aufgerufen
#define DHTPIN 7                            // DHT Sensor wird aus PIN 9 ausgelesen
#define DHTTYPE DHT22                       // DHT Type wird auf DHT22 festgelegt
DHT dht22(DHTPIN, DHTTYPE);                 // DHTPIN und DHTTYE in dht22 definiert

#include <LiquidCrystalFast.h>

LiquidCrystalFast lcd(12, 11, 10, 9, 5, 4, 3, 2);
        // LCD pins: RS  RW  EN1 EN2 D4 D5 D6 D7

// make some custom characters:
byte ue[8] = {   // 0 off, 1 set pixel
  0b00000,       // in 5x7 caracter 8. row is unused
  0b01010,
  0b00000,
  0b10001,
  0b10001,
  0b10011,
  0b01101,
  0b00000
};

void setup(){
  // create a new character
  lcd.createChar(0, ue);

  i2c_init(); //Initialise the i2c bus
  PORTC = (1 << PORTC4) | (1 << PORTC5);//enable pullups 
  lcd.begin(40, 4);

dht22.begin();                              // Auslesen des DHT22 beginnt
}

void loop()
{
  float t = dht22.readTemperature();        // Die Temperatur wird vom DHT22 ausgelesen, Wert in "t" schreiben
  float h = dht22.readHumidity();           // Die Luftfeuchte wird vom DHT22 ausgelesen, Wert in "h" schreiben
  float a = 17.271;
  float b = 237.7;
  float taupunktTemp = (a * t) / (b + t) + log(h/100);
  float p = (b * taupunktTemp) / (a - taupunktTemp);
 
    int dev = 0x5A<<1;
    int data_low = 0;
    int data_high = 0;
    int pec = 0;
   
    i2c_start_wait(dev+I2C_WRITE);
    i2c_write(0x07);
   
    // read
    i2c_rep_start(dev+I2C_READ);
    data_low = i2c_readAck(); //Read 1 byte and then send ack
    data_high = i2c_readAck(); //Read 1 byte and then send ack
    pec = i2c_readNak();
    i2c_stop();
   
    //This converts high and low bytes together and processes temperature, MSB is a error bit and is ignored for temps
    double tempFactor = 0.02; // 0.02 degrees per LSB (measurement resolution of the MLX90614)
    double tempData = 0x0000; // zero out the data
    int frac; // data past the decimal point
   
    // This masks off the error bit of the high byte, then moves it left 8 bits and adds the low byte.
    tempData = (double)(((data_high & 0x007F) << 8) + data_low);
    tempData = (tempData * tempFactor)-0.01;
   
    float celcius = 1.38*(tempData - 273.15);
    float fahrenheit = (celcius*1.8) + 32;

lcd.setCursor(0, 0);                       // Anfang auf Stelle 0, Zeile 0 setzen
lcd.print("Lufttemp.  :");                      // Temp. : auf LCD ausgeben
lcd.setCursor(13, 0);                       // Anfang auf Stelle 9, Zeile 0 setzen
lcd.print(t ,1);                              // Wert aus "t" ausgeben (Temperatur)
lcd.setCursor(17, 0);                      // Anfang auf Stelle 15, Zeile 0 setzen
lcd.write(0xD0 + 15);                      // Grad-Zeichen (Arduino 1.00)
lcd.print("C   Wandtermp.: ");               // C auf LCD ausgeben
lcd.print(celcius ,1);
lcd.write(0xD0 + 15);                      // Grad-Zeichen (Arduino 1.00)
lcd.setCursor(39, 0);
lcd.print("C");

lcd.setCursor(0, 1);                       // Anfang auf Stelle 0, Zeile 1 setzen
lcd.print("Luftfeuchte:");                      // Luft.: auf LCD ausgeben
lcd.setCursor(13, 1);                       // Anfang auf Stelle 9, Zeile 1 setzen
lcd.print(h ,1);                              // Wert aus "h" ausgeben (Luftfeuchtigkeit)
lcd.setCursor(18, 1);                      // Anfang auf Stelle 15, Zeile 1 setzen
lcd.print("%   Taupunkt  : ");                          // % auf LCD ausgeben
lcd.print(p ,1);
lcd.write(0xD0 + 15);
lcd.print("C");
lcd.setCursor(1, 3);
// if(celcius - taupunktTemp < 0)  // richtige Formel
if(celcius - taupunktTemp > 0) // zum Testen
{
lcd.print("!!! Achtung L");
lcd.write(0);
lcd.print("ften, Schimmelgefahr !!!");
delay(1500);
lcd.setCursor(1, 3);
lcd.print("                                      ");
//delay(500);
}}
Das nächste Problem war, das kein "ü" für Lüften im Zeichensatz des Displays enthalten ist. Also suchte ich mir raus, wie man Sonderzeichen generieren kann.
Ok, es ginge vielleicht noch ein wenig übersichtlicher, indem ich mehr von set Cursor Gebrauch gemacht hätte, aber mit Leerzeichen weiterschreiben geht auch, bis zur Darstellung der nächsten Variablen  smiley-evil
Da es für das Blinken der Warnung in Zeile 4 keinen extra Befehl gibt, habe ich mal auf die Schnelle zum ungeliebten Delay gegriffen. Nach dem Überschreiben mit Leerzeichen ist kein weiteres Delay notwendig, da die Schleife ohnehin eine beachtliche Laufzeit besitzt. Außerdem beruhigt das Delay eine zu hektische Anzeige bei den Messwerten  smiley
Ich habe um den Warntext sichtbar zu machen und das Blinken implementieren zu können aus dem kleiner ein größer gemacht. Für das echte Gerät dann einfach die Auskommentierung tauschen.
Werde das Ganze batteriebetrieben zu einem handlichen Messgerät aufbauen. Allerdings werde ich das Pollin Display gegen ein anderes Modell austauschen, da es ein schlecht ablesbares Stromschwein ist. Die Hintergrundbeleuchtung säuft satte 500mA und die Lesbarkeit ist trotzdem nur semigut. Ein normales grünliches Display mit schwarzer Schrift ist besser lesbar und ohne Backlight wesentlich stromsparender.

Gruß Gerald
51  International / Deutsch / Re: Sekundentaktanzeige - Schönheitsfehler on: March 17, 2014, 03:35:45 pm
Klingt doch interessant. Und wie sieht es mit dem berühmten Unterschied zwischen Theorie und Praxis aus? Funktioniert es auch so, wie wir uns das denken  smiley-wink
Ob nun 2 oder 3 Drähte wäre mir Rille, wenn's so viel bringt  smiley-grin

Gruß Gerald
52  International / Deutsch / Re: Sekundentaktanzeige - Schönheitsfehler on: March 17, 2014, 01:38:23 pm
Gerald, welche Quelle hast du für die neue Libary? Würde gerne mal testen, ob diese wirklich so rund läuft, wie du vermutest. Habe in meinen Projekten nirgends einen DS18B20 im Einsatz, aber habe hier welche liegen.

War gestern schon in der Waagerechten  smiley
Hier bin ich darüber gestolpert: http://www.milesburton.com/?title=Dallas_Temperature_Control_Library
Guck dir mal die Betas und die Beschreibung hier an:
3.7.0]

Rob Tillaart was kind enough to introduce a new revision to the library, asynchronous calls. When you request a temperature you can choose to manage the delay in your own code and continue processing other data. This code is still considered beta so if you spot any issues let me know.


Ich werde nur nicht so 100% ig draus schlau, ob da nur dynamisch die Bitrate runtergeschraubt wird, oder ob man die Wartezeit anderweitig nutzen kann.
Eigentlich sollte doch, wenn man den Sensor nicht parasitär (was verbreiteter ist) sondern direkt versorgt, die Zwangspause wegfallen. Die Pause soll nach meinem Verständnis nur den Ausgang blockieren, damit sich der interne Kondensator aufladen kann, der wärend des Auslesens das IC versorgt. Versorge ich ihn direkt, muß ich nicht den Ausgang blockieren, der Arduino kann was anderes machen, auch wenn das IC nicht angesprochen werden darf, wärend es sich "vollsaugt"
Mache ich da jetzt einen Denkfehler?
53  International / Deutsch / Re: Sekundentaktanzeige - Schönheitsfehler on: March 16, 2014, 03:27:44 pm
Ich habe auch gleich an den Dallas gedacht. Der braucht mindestens 750 ms um sich mit Strom "vollzusaugen". Guck mal, es gibt ne neue Lib für den Dallas, da haben sie das irgendwie anders gelöst, das der nix anderes mehr ausbremst  smiley-wink

Gruß Gerald
54  International / Deutsch / Re: Thermometer mit 4x LED-Siebensegmentanzeigen, SAA1064 u. LM35 on: March 16, 2014, 10:25:47 am
Muß ich mal gucken, ob ich das hin bekomme. Das kann aber etwas dauern.
Den PID als Core Funktion würde ich aber auf alle Fälle favorisieren, da ich eventuell die Temperatur noch im Bereich von 35-40° einstellbar machen werde.

Gruß Gerald
55  International / Deutsch / Re: Thermometer mit 4x LED-Siebensegmentanzeigen, SAA1064 u. LM35 on: March 15, 2014, 06:13:05 pm
An die Parameter würde ich mich rantasten. http://de.wikipedia.org/wiki/Faustformelverfahren_%28Automatisierungstechnik%29
Ich weiß nur nicht, wie ich die PID Lib einbinden muß. Include bekomme ich noch hin, aber dann...  smiley-red
Und ich muß dem PID beibringen, das er PWM halt langsamer machen soll für ein SSR

Gruß Gerald
56  International / Deutsch / Re: Thermometer mit 4x LED-Siebensegmentanzeigen, SAA1064 u. LM35 on: March 15, 2014, 03:59:17 pm
Den verlinkten SAA1064 Code habe ich ja als Basis genommen. Sieht man sogar noch ganz oben. Nur als Thermometer hat den keiner dokumentiert. Bei ELV gibts was mit dem MCP9801 http://www.elv.de/i2c-4-digit-led-display-i2c-4dled-komplettbausatz.html

Die Heizung ist eigentlich nicht überdimensioniert. Nur handelt es sich um Zementwiderstände, die wie ein Nachtspeicherofen noch Wärme speichern.
Hier hatte ich das Ganze mal vorgestellt: http://forum.arduino.cc/index.php?topic=200232.msg1477064#msg1477064
Dachte nur, wenn es schon eine PID Lib gibt, ist deren Verwendung eleganter  smiley-wink

Gruß Gerald
57  International / Deutsch / Re: Bei LCD 2004 Farbe der Hintergrundbeleuchtung austauschen? on: March 15, 2014, 01:43:45 pm
Ich würde sagen wenn Du Display und die neue Hintergrundbeleuchtung zusammenzählst ist ein teures rotes Display immernoch billiger.
Grüße Uwe

Besonders, wenn man dann noch eins "zerbastelt"  smiley-twist  *ROFL* *duck und weg*  smiley-grin
58  International / Deutsch / Re: IDE (arduino.exe) Startparameter? on: March 15, 2014, 01:41:25 pm
Hm, mal eine ganz verquere Idee... so von hinten durch die Brust ins Auge...  smiley
Wenn du dir eine virtuelle Maschine installierst, auf der du dann die 2. IDE laufen lässt?  smiley-grin
Den USB Port kannst du vom Host System zur VM durchrouten, so das die serielle Kommunikation funzt. Unter Windows 7 kannst du in der Prof., Enterprise und Ultimate Version sogar auf dem Host Programmverknüpfungen auf die VM wie ein ganz normales Programm starten. Der dazu notwendige Start der VM geschieht automatisch  smiley-cool

Gruß Gerald
59  International / Deutsch / Re: Bei LCD 2004 Farbe der Hintergrundbeleuchtung austauschen? on: March 15, 2014, 01:31:14 pm
Wie sagt Radio Eriwan gleich? "Also, im Prinzip ja..."
Der Teufel liegt aber, wie so oft, im Detail  smiley-twist
Du kannst das Diaplay zerlegen, indem du die Metallklammern, die den Metallkäfig auf der Rückseite der Leiterplatte fixieren, geradebiegen und so den Käfig nach vorn abziehen. Ich empfehle dir dazu ausdrücklich Handschuhe zu tragen, um keine Fingerabdrücke zu hinterlassen. Denn Fingerabdrücke auf den Kontaktflächen für die Leitgummis können zu Kriechströmen und Fehlfunktionen des Displays führen! Fusseln im optischen Gang sind ebenfalls suboptimal  smiley-eek-blue
Ansonsten beim Zusammenbau alles nochmal mit Isopropanol putzen.
Merke: es kann gut gehen, muß aber nicht!
Die Hintergrundbeleuchtungen gibt es in einigen Bauformen bei Pollin - aktive Bauelemente - Displays und dann Seite 2 oder 3.
Bei den Hintergrundbeleuchtungen gibt es verschiedene Bauformen: SMD-LEDs flächig und eine Streuscheibe davor oder eine polierte Plexi-Scheibe und an den Stirnseiten wird über LEDs eingekoppelt. Kann man ändern, aber einfach geht definitiv anders  smiley-razz

Gruß Gerald
60  International / Deutsch / Thermometer mit 4x LED-Siebensegmentanzeigen, SAA1064 u. LM35 on: March 15, 2014, 01:08:16 pm
Hallo,
endlich habe ich es geschafft, den Code von ursprünglich einem LCD Display auf die Ausgabe auf LED Anzeigen aufzubohren. Der SAA1064 eigent sich dafür sehr gut, denn er kümmert sich ums Multiplexen der Anzeige, um die Strombegrenzung der Anzeigen und man kann die Anzeige auch über lediglich 4 Adern etwas abgesetzt vom µC platzieren. 1m Kabel sind überhaupt kein Problem.
youtube Videos gibts davon genug, nur keinen fertigen Code.
Deshalb hier mein Code:
Code:
/*
Example 39.3 - NXP SAA1064 I2C LED Driver IC Demo III
Displaying numbers on command
http://tronixstuff.com/tutorials > chapter 39
John Boxall July 2011 | CC by-sa-nc
*/
#include "Wire.h" // enable I2C bus
#include <LiquidCrystal_I2C.h>
#define sensorPin 0    // Verbunden mit LM35 Ausgang
#define DELAY1 10      // kurze Wartezeit beim Messen
#define DELAY2 500     // kurze Wartezeit beim Anzeigen
#define heaterPin 9     // Heizung-Pin
#define threshold 40   // Schalt-Temperatur für Lüfter (40 Grad Celsius)
#define hysterese 0.1  // Hysterese-Wert (0.1 Grad Celsius)
const int cycles = 50; // Anzahl der Messungen
LiquidCrystal_I2C lcd(0x20, 16, 2); // Adresse auf 0x27 für 16 Zeichen/2 Zeilen

byte saa1064 = 0x70 >> 1; // define the I2C bus address for our SAA1064 (pin 1 to GND)
int digits[12]={
63, 6, 91, 79, 102, 109, 125,7, 127, 111, 204, 0};
// these are the byte representations of pins required to display each digit 0~9, °C sign, and blank digit
// right hand digit 180° flip - DP ist used as ° symbol :-) 204 is °c for big C use 143
void setup()
{
  lcd.init(); // LCD initialisieren
  lcd.backlight(); // Hintergrundbeleuchtung aktivieren 
pinMode(heaterPin, OUTPUT);
Wire.begin(); // start up I2C bus
delay(500);
initDisplay();
}
void initDisplay()
// turns on dynamic mode and adjusts segment current to 12mA
{
Wire.beginTransmission(saa1064);
Wire.write(B00000000); // this is the instruction byte. Zero means the next byte is the control byte
Wire.write(B01110111); // control byte (dynamic mode on, digits 1+3 on, digits 2+4 on, 21mA segment current
// left 111 is relevant for current left hand "1" 12mA, middle 6mA and right 3mA - so you can tewak it
Wire.endTransmission();
}
void clearDisplay()
{
Wire.beginTransmission(saa1064);
Wire.write(1); // start with digit 1 (right-hand side)
Wire.write(0); // blank digit 1
Wire.write(0); // blank digit 2
Wire.write(0); // blank digit 3
Wire.write(0); // blank digit 4
Wire.endTransmission();
}
void displayInteger(int num, int zero)
{
int hundred, ten, one;
// breakdown number into columns
hundred = num/100;
ten = (num-(hundred*100))/10;
one = num-((hundred*100)+(ten*10));
if (zero==1) // yes to leading zero
{
Wire.beginTransmission(saa1064);
Wire.write(1);
Wire.write(digits[hundred]);
Wire.write(digits[ten]+128); // 128 turns on DP
Wire.write(digits[one]);
Wire.write(digits[10]); // print position 10 from arry - °C
Wire.endTransmission();
delay(10);
}
else
if (zero==0) // no to leading zero
{
if (hundred==0) { hundred=11; }
if (hundred==0 && num<100) { hundred=16; }
if (ten==0 && num<10) { ten=16; }
Wire.beginTransmission(saa1064);
Wire.write(1);
Wire.write(digits[hundred]);
Wire.write(digits[ten]+128);
Wire.write(digits[one]);
Wire.write(digits[10]);
Wire.endTransmission();
delay(10);
}
}
void loop()
{
 {
float resultTemp = 0.0;
for(int i = 0; i < cycles; i++){
int analogValue = analogRead(sensorPin);
float temperature = (5.07 * 100.0 * analogValue) / 1024; // reale Spannung Ub (theoretisch 5.00V)
resultTemp += temperature; // Aufsummieren der Messwerte
delay(DELAY1);
  }
resultTemp /= cycles; // Berechnung des Durchschnitts
lcd.clear(); // clear-Methode löscht LCD Inhalt
lcd.print("Temp: "); // print-Methode schreibt LCD Inhalt
lcd.print(resultTemp);
lcd.setCursor(10, 0);
#if ARDUINO < 100
lcd.print(0xD0 + 15, BYTE); // Grad-Zeichen (Arduino 0022)
#else
lcd.write(0xD0 + 15); // Grad-Zeichen (Arduino 1.00)
#endif
lcd.print("C");
lcd.setCursor(0, 1); // setCorsor-Methode positioniert LCD-Cursor
lcd.print("Heizung: ");
{
delay(20);
}
clearDisplay();
{
displayInteger(resultTemp * 10 ,0); //for LED-Display x10 - DP is hardwired
 delay(5);
if(resultTemp < (threshold - hysterese)) // Temperaturvergleich pos.
digitalWrite(heaterPin, HIGH);           // Heizung anschalten
else if(resultTemp > (threshold + hysterese)) // Temperaturvergleich neg.
digitalWrite(heaterPin, LOW);                 // Heizung abschalten
lcd.print(digitalRead(heaterPin) == HIGH?"an":"aus");
delay(DELAY2);
}
}
}
Bei den Anzeigen handelt es sich um "Ostalgie"
Es sind Siebensegmentanzeigen des Typ VQA 28 Made in GDR  smiley-cool
Owohl ich den lichtstärksten Suffix F habe, sind die Dinger nicht besonders hell. Das ist auch der Symbolgröße von 17,9mm geschuldet. Deshalb bestrome ich die Dinger auch mit den max. möglichen 21mA, die der SAA1064 zuläßt  smiley
Die rechte Stelle ist kopfstehend montiert, um den Dezimalpunkt als "°" Zeichen verwenden zu können.  Die Segmente habe ich so verschaltet, als würde die Anzeige richtig herum montiert sein, also wie vom Hersteller angegeben. Wenn man anders verdrahtet, ist Pos. 10 im Arry für die Anzeige von °C entsprechend anzupassen!
204 als kleines c oberhalb der Mitte finde ich optisch am besten. 143 erzeugt ein großes C
Im Zehner (3. Stelle) wird 128 addiert, da 128 den Dezimalpunkt aktiviert. Segment a=1, b=2, c=4 usw. Aufaddieren erzeugt dann das anzuzeigende Zeichen.
displayInteger(resultTemp * 10 ,0); hat folgenden Sinn: die Temperatur wird x10 genommen, da ich für das LED Display eine 3stellige ganze Zahl benötige - der Dezimalpunkt (+128) ist hart gesetzt und bewirkt wieder die Division durch 10 beim Betrachter  smiley-wink
,0 bedeutet, den Integerwert auf eine ganze Zahl zu runden - null Nachkommastellen
Für das ursprüngliche 16x2 I2C LCD Display habe ich den Code zur Kontrolle drin gelassen.
Ich habe das Ganze, wie man am Code erkennen kann, zur Steuerung eines Wärmeschrankes genutzt. Das LCD war mir dort zu schlecht ablesbar.
Meine Frage ist nun, wie kann ich die PID_v1 Lib. hier noch mit einbinden? Pin 9, der Heizungs-Pin steuert über einen Transistor die LED eines Solid-State-Relay an.
So mit festem Schaltpunkt, wie ich es jetzt habe, steigt die Temparatur nach dem Abschalten bei 40°C noch auf 41,5°C an, da die Heizwiderstände noch Wärme abgeben. Dieses Überschwingen ist aber nicht gewünscht  smiley-confuse
Kann mir da jemand weiterhelfen?

Gruß Gerald
Pages: 1 2 3 [4] 5 6 ... 21