INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Belichtungsgerät mit Timerfunktion (Countdown)
12.01.2020, 10:59 (Dieser Beitrag wurde zuletzt bearbeitet: 12.01.2020 11:01 von Scouter.)
Beitrag #1
Belichtungsgerät mit Timerfunktion (Countdown)
Hallo unf guten Tag zusammen.
Eins vorweg. Ich bin mir nicht sicher, ob ich hier mit meinen Fragen richtig bin. Wenn nicht, bitte ich um Nachsicht.

Zum Thema.
Wie die Überschrift schon vermuten lässt, möchte ich mir ein UV-Belichtungsgerät für Fotobeschichtete Platinen bauen. Dies sollte über einen einstellbaren Countdown verfügen, der auf einem LC-Display angezeigt werden soll. Ausserdem hab ich mir gedacht das Belichtungsgerät "zweiseitig" zu bauen, so das doppelseitige Platinen in einen Durchgang belichtet werden können, natürlich schaltbar. Das ganze werde ich in einem alten Alukoffer verbauen. Als UV-Quelle habe ich mir LED-Stripes besorgt, die mit 60 5050 SMD-LED's/m bestückt sind und eine Wellenlänge von 400nm haben.

Bei meiner Suche hier im Forum bin ich leider nur auf ein paar verwaiste Projekte gestoßen, die nicht beendet wurden. Das www hat mir aber folgende Schaltung und den dazugehörigen Sketch geliefert.

Ich hoffe, dass ich nicht gegen irgendwelche Regeln verstoße, wenn ich das hier poste.

Gefunden habe ich es hier
Es wurde vom User "Squermeter" geschrieben. Leider hat er das ganze nicht weiter gepflegt, vielleicht ist er ja auch hier zu finden.

Die Schaltung soll so funktionieren, dass beim gedrückt halten des Tasters über das Poti die Länge des Countdown eingestellt werden kann und beim Loslassen die LED's eingeschaltet und der Countdown runtergezält werden soll. Im Display sollte dann die eigentlich eingestellte Zeit als auch der Countdown zu sehen sein.

Ich fange mal mit der Schaltung an.

[Bild: schaltplanlcd-timertxjtd.jpg]

Die Schaltung erfährt von mir einige Änderungen. Die Stromversorgung bleibt aussen vor, da ich hier ein externes Netzteil benutzen werde. Auserdem fliegt der Transistor T1 und der Widerstand R5 raus und wird durch ein Darlington Array ersetzt, der dann zwei Relais schaltet. Hinzu kommt lediglich eine LED für die Betriebsbereitschaft und ein Mikroschalter, der beim öffnen des Koffers die UV-LED's abschaltet. Sicher ist sicher. Ausserdem noch ein Wechselschalter, über dem man zwischen einseitiger, oder zweiseitiger Belichtung umschalten kann.
Interessanter weise steht im Schaltplan ein 10k Poti und in der Beschreibung im Sketch schreibt er im Intro von einem 100k Poti. Was wäre denn nu richtig? Oder ist es eigentlich egal, da der Arduino die Widestandswerte eh auf 0-1023 setzt?

Das eigentliche Problem für mich ist, dass ich das Display per I²C anbinden möchte und ich die Schaltung so eigentlich nicht nutzen kann, oder doch? Aber wie?

Und dann noch der Sketch.

Code:
/*****************************Intro************************************
///Countdowntimer version 1.0
  
   Ein einfacher Timer der mit einem LC-Display, einem 100k Potentiometer,
   einem einfachen Taster als Eingang und einem schaltenden Ausgang
   ausgestattet ist.
  
   In dieser Konfiguration lässt sich die Zeit über den Poti an A0(PC0,Pin 23)
   von 00:00 min bis ca. 17:05 min einstellen.
   Die Konfiguration lässt sich in "void_readAin" umstellen.
  
   Ein (nicht entprellter) Highaktiver Taster an 8(PB0,Pin 14) dient als Eingang.
   Drücken = A/D Wert des Potis übernehmen und in den Timer schreiben
     -> negative Flanke : Timer starten/Ausgang 13(PB5,Pin 19)High setzen
   Drücken und Halten = A/D Wert einstellen
   nach ablauf des Timers = Ausgang 13(PB5,Pin 19) Low setzen

   Verdrahtung:
  
   Poti 100k (10Gang) = Schleifer=> A0/Pin 23; Anfang/Ende=>5V/GND
   Taster mit 10K Pulldown Widerstand => 8/Pin 14
   Ausgang => 13/Pin 19
   LCD => siehe Unten

**********************************************************************/

#include <LiquidCrystal.h>

//----LCD-PINS---(rs, en,d4,d5,d6,d7)----------------------//
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);

//-------------------- Taster/Ausgänge --------------------//

int varpin = A0;
int buttonstate;
int const buttonPin = 8;                 // Resetbutton Pin Deklarierung
int uvout = 12;                          // Ausgang für UV-Licht

//----------------Variablen für Countdown------------------//

int long countdowntime;                  // Countdown Variable bzw. Resetwert
int val;                                 // Variable für aktuellen Zustand
int lastval;                             // Variable für den vorherigen Zustand
int long minutes;                        // Countdown in Minuten
int long seconds;                        // Countdown in Sekunden
volatile unsigned char tick;             // Variable für den Timer
int inputtime ;                          // Variable für analogeingang    


//--------------- Timer Überlauf auslesen ------------------//

ISR (TIMER2_OVF_vect)                    // Wenn Timer 1 Überläuft gib ein High über
{                  
  ++tick;                          // tick aus.      
}

void setup() {
  pinMode(uvout, OUTPUT);
  inputtime = analogRead(varpin);        // analogwert einlesen  
  countdowntime = 0;                     // Starte bei 00:00
  lcd.begin(16, 2);                      // initialisiere Display
  lcd.setCursor(0,0);                    // setze Cursor für 1. Zeile
  lcd.print("Time:");                    // Beschriftung der ersten Zeile
  readAin ();                            // Analogwert eintragen
}


void loop()
{
  buttonstate = digitalRead(buttonPin);    // auslesen des Digitalwertes an Pin 7
  val = digitalRead(tick);                 // Overflow des Timers auslesen
  
if (buttonstate != HIGH)                
{
  lcd.setCursor(0, 0);                     // erste Zeile
  lcd.print("Time:");                      // Schreibe "Time:"
  
  if (countdowntime<=0)                    // wenn 'countdowntime 0
  {                                        //
    digitalWrite(uvout, LOW);              // schalte UV-Licht aus
  }                                        //

  if (countdowntime>0)
  {      
    if (val != lastval)                   // wenn sich 'val' von 'lastval' unterscheidet
    {                                     //
      countdowntime--;                    // inkrementiere 'countdowntime'
      digitalWrite(uvout, HIGH);          // schalte UV-Licht ein
    }                                     //
    
    lcd.setCursor(0,1);                   // Setze Cursor für Countdown
    printTime();                          // gebe Zeit aus  
        

    val = lastval;                        // aktuellen Zustand merken  
    delay(1000);                           // 1 sekunde Pause
  }
}

else
{  
  lcd.setCursor(0,0);          
  lcd.print("SET : ");                     // "Time:" zu "Set :" ändern

  lcd.setCursor(5, 0);                     // Cursor hinter "Set :" setzen
  readAin();                               // Schreibe Set-Time
  
  countdowntime = inputtime;               // reset
    
}
}



void printTime ()
{
  minutes = countdowntime/60;           // Aufteilung von 'countdowntime' in Minuten
  seconds = countdowntime%60;           // und Sekunden
        
  if (minutes<10)                       // wenn minuten unter 10
  {                                     //  
    lcd.print('0');                     // schreibe "0" vor minuten
  }                                     //
        
  lcd.print(minutes);                   // gebe Minuten aus
  lcd.print(":");                       // schreibe ":"
      
  if (seconds<10)                       // wenn Sekunden unter 10
  {                                     //  
    lcd.print("0");                     // schreibe erst Null und dann
    lcd.print(seconds);                 // die Sekunden
    lcd.write(' ');                     // entferne Werte nach sekunden
  }                                     //
  else                                  //
  {                                     //
    lcd.print(seconds);                 // schreibe die Sekunden normal
    lcd.print(" ");                     //
  }                                     //
  
}

void readAin ()
{
inputtime = analogRead(varpin);           // Analogwert in 'inputtime' schreiben
int showminutes = inputtime /60;          // inputtime/60 = showminutes = Minuten ausrechnen
int showseconds = inputtime %60;          // inputtime%60 = showseconds = Sekunden ausrechnen

if (showminutes<10)                      // wenn 'showminutes' unter 10
{                                        //
   lcd.print('0');                        // schreibe erst "0"
}                                        //

lcd.print(showminutes);                   // schreibe 'showminutes'
  
lcd.print(":");                           // schreibe ":"
    
if (showseconds<10)                       // wenn 'showseconds' unter 10
{
   lcd.print("0");                        // schreibe erst Null
   lcd.print(showseconds);                // dann die Sekunden
   lcd.write(' ');                        // entferne letzte Ziffer
}
else                                     // wenn nicht
{                                        //
   lcd.print(showseconds);                // schreibe die Sekunden normal
   lcd.print(" ");                        // und lösche die Ziffer dahinter
}
delay(150);                              // Verlangsame den kompletten vorgang

}

Ich denke den kann ich soweit übernehmen. Hier werde ich aber noch die ein paar Änderungen vornehmen, um sowohl den Umschalter (Ein-, oder Zweiseitig), als auch den Sicherheitsschalter einzubinden. Dafür sollten einfache if-Anweisungen ausreichen, denke ich jedenfalls.

Es wäre klasse, wenn ihr hier mal drüber guckt und evtl. Fehler aufzeigt, bzw Verbesserungsvorschläge habt.

Besten Dank im Vorraus.
Gruß
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
12.01.2020, 11:18 (Dieser Beitrag wurde zuletzt bearbeitet: 12.01.2020 11:19 von Tommy56.)
Beitrag #2
RE: Belichtungsgerät mit Timerfunktion (Countdown)
Sind Deine UV-LED wirklich für 12V oder für 5V?
Anstelle von Relais würde ich eher Logiklevel-MOSFET nehmen (kein Verschleiß an den Kontakten). Wenn Du die blauen Arduino-Relais benutzt, die sind LOW-aktiv, bei anderen Relais musst Du prüfen, ob Du die direkt vom Arduino ansteuern kannst oder einen Transistor dazwischen schalten musst. Freilaufdiode nicht vergessen.

Wieviel LED pro Seite sollen es den werden?

Warum willst Du mit Interrupt arbeiten? Du hast doch millis().

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
12.01.2020, 11:29
Beitrag #3
RE: Belichtungsgerät mit Timerfunktion (Countdown)
Der Atmega8 hat auch Hardware-I2C. Damit kannst du das Display auch mit I2C betreiben. Allerdings muss der Sketch auch darauf umgeschrieben werden.

Da solltest du überlegen, den nicht komplett neu zu schreiben und die Punkte von Tommy berücksichtigen.
Was das Poti zur Zeiteinstellung betrifft, ist es hier tatsächlich unkritisch.

Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
12.01.2020, 11:36 (Dieser Beitrag wurde zuletzt bearbeitet: 12.01.2020 11:37 von Tommy56.)
Beitrag #4
RE: Belichtungsgerät mit Timerfunktion (Countdown)
(12.01.2020 11:29)hotsystems schrieb:  Was das Poti zur Zeiteinstellung betrifft, ist es hier tatsächlich unkritisch.
Wobei ich eher zu 10 kOhm tendieren würde. Ein Nano als MC würde es auch tun, wenn es ein I2C-Display wird.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
12.01.2020, 12:23 (Dieser Beitrag wurde zuletzt bearbeitet: 12.01.2020 12:24 von Scouter.)
Beitrag #5
RE: Belichtungsgerät mit Timerfunktion (Countdown)
Danke für eure schnelle Antwort.
Die LED-Stripes arbeiten mit 12V, davon habe ich hier schon 2m liegen. Pro Seite wird je 1m, also 60 LED's auf einer Fläche von ca. 25x30 cm verbaut. Als Relais benutze ich von OMRON die G6D1A (5A/30VDC). Zur Ansteuerung der Relais wollte ich einen ULN2803a nehmen, spart mir die Transistoren und Freilaufdioden. Ist zwar ein 8fach Array, hab aber noch einige davon.
Die Lösung mit den MOSFET-Transistoren hören sich aber auch interessant an. Würde dann die IRF3205 nehmen wollen, wenns passt. Gibt es bessere Alternativen? Bedarf es der Kühlung? Pro MOSFET fließen theoretisch 3,6A.
Was ich vergessen habe zu erwähnen, ich wollte einen Arduino Nano benutzen, statt des Atmega8. Da sind es afaik A4/A5 die I²C Pins.
Schön, 10k Poti hab ich noch ne Hand voll.Big Grin
Der Sketch ist nicht von mir, wahr aber bisher das Einzige in der Art was ich gefunden habe. Daher wollte ich das darauf aufbauen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
12.01.2020, 12:34
Beitrag #6
RE: Belichtungsgerät mit Timerfunktion (Countdown)
Das mit dem Nano ist dann ok. Auch der Transistor funktioniert.
Da dieser voll durchsteuern soll und einen sehr geringen Innenwiderstand hat, wenn dieser durchgesteuert ist, wird ein Kühlkörper nicht unbedingt nötig sein.
Aber Vorsicht ist die Mutter der Porzelankiste. Wink
Somit könnte man einen kleinen Kühlkörper anbringen. Einfach im Betrieb mal die Temperatur messen.

Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
12.01.2020, 13:23 (Dieser Beitrag wurde zuletzt bearbeitet: 12.01.2020 13:23 von Scouter.)
Beitrag #7
RE: Belichtungsgerät mit Timerfunktion (Countdown)
Da einfache Aufsteckkühlkörper relativ preiswert sind, daran sollte es nicht scheitern.
Den Schaltplan hab ich jetzt mal neu gemacht.

[Bild: schaltplanlcd-timer2w2jy2.jpg]

So sollte es funktionieren, denke ich...
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
12.01.2020, 13:31 (Dieser Beitrag wurde zuletzt bearbeitet: 12.01.2020 13:33 von hotsystems.)
Beitrag #8
RE: Belichtungsgerät mit Timerfunktion (Countdown)
Alles habe ich mir noch nicht angesehen, aber die Mosfets sin N-Channel-Fets, da musst du den GND schalten. So steuern die nicht durch.
Und zur Sicherheit einen kleinen (ca. 100 Ohm) Gatewiderstand zum Pin des Nano.

Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Countdown timer cb_baer 9 8.469 04.03.2015 22:40
Letzter Beitrag: cb_baer

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste