Uhr mal anders...

Themabewertung:
  • 1 Bewertung(en) - 5 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
wedelchen
Junior Member
**

Beiträge: 39
Registriert seit: Jun 2014
Bewertung: 0
#1
08.06.2014, 14:57

Ich nenne sie mal 'Mülluhr'.

   

An sich stellt sie eine Umsetzung des Müllkalenders da. Mehrmals haben wir vergessen die Mülltonne rechtzeitig an die Straße zu stellen. Nun erscheint am Vortag ein Hinweis auf dem Display.

Das ganze Projekt hat mir als Einsteiger einige Probleme bereitet, da doch recht viele Komponenten verbaut sind (RTC, Display, Encoder).

Der Code ist mit Sicherheit alles andere als optimal, aber sie funktioniert :-)

Gruß,
Rainer...
Zitieren
tesacrep
Administrator
*******

Beiträge: 504
Registriert seit: Dec 2013
Bewertung: 2
#2
08.06.2014, 19:16

Hallo, freut mich dich begrüssen zu dürfen.

Ich sehe du verwendest dieses Display.

An sich eine einfache geniale Idee. Wie hast du es umgesetzt das die Uhr die tage weiß wo bei euch der Müll abgeholt wird? Und wie hast du das mit Feiertagen gelöst?

Aber sonst richtig geil.

Mfg, tesacrep
Zitieren
Unilein
Fachgebiet Rauchentwicklung
*******

Beiträge: 783
Registriert seit: Apr 2014
Bewertung: 5
#3
08.06.2014, 19:47

Willkommen im Forum!

Eine coole Idee. Von dem Display habe ich auch noch 3 Stück rumliegen. Die werde ich demnächst mal verbauen. Meine haben zusätzlich noch einen kleinen SD-Slot auf der Rückseite. Sehr praktisch Smile

Poste doch mal Deinen Code. Keine Sorge wegen des Stils oder dem Grad der Optimierung. Ich selbst bin auf den AVR's auch noch relativ neu. Mein Ziel ist es, die µC in Assembler zu programmieren. Aktuell versuche ich es, mangels Assemblererfahrung, mit Arduino-C.

Gruß
Uni
-----

Sic mundus creatus est.
Zitieren
wedelchen
Junior Member
**

Beiträge: 39
Registriert seit: Jun 2014
Bewertung: 0
#4
08.06.2014, 21:41

Hey,

ich benutze die Funktion der Lib DS1307new.h, um die vergangenen Tage seit dem 01.01.2000 in Bezug auf das aktuelle Datum zu ermitteln. Für die aktuelle Zeit/Datum habe ich ein DS3231-Modul verbaut.

Die Abfuhrtage ermittle ich aus dem örtlichen Kalender der Abfallentsorgers, mit diesen errechne ich in Excel die Differenz der Tage seit dem 01.01.2000 (geht sehr fix). Die Daten habe ich in einer Tabelle, separat für jede Tonne (bei uns Restmüll, Biotonne, Gelbe - und Papiertonne).

Nun vergleiche ich die Differenz vom aktuellen Datum mit den Daten der Tabellen zuzüglich 1 Tag. Die Meldung soll ja am Vortag des Abfuhrtages erscheinen.

Naja, der Rest ist Geschmacksache. Hatte anfangs ein Textdisplay, aber irgendwie ist man(n) ja nie zufrieden Cool

Nachtrag:
Die wesentlichen Teile der Abarbeitung.

Datenbestand der Abfuhrtage:

 
// Tage Gelbe Tonne, Diff 01.01.2000-> Abfuhrdatum (Übernahme aus Excelsheet)
#define numge 21
//int ge[numge]={15903,15917,15931,15945,15959,15973,15987,16001,16015,16029,16043,16057};
int ge[numge]={5196, 5210, 5225, 5238, 5252, 5266, 5280, 5294, 5308, 5322, 5336, 5350, 5364, 5378, 5392, 5406, 5420, 5434, 5448, 5462, 5476};
 
// Tage Papier Tonne, Diff 01.01.2000-> Abfuhrdatum (Übernahme aus Excelsheet)
#define numbp 10
int pa[numbp]={5212, 5240, 5268, 5296, 5324, 5352, 5380, 5408, 5436, 5464};
 
// Tage Bio Tonne, Diff 01.01.2000-> Abfuhrdatum (Übernahme aus Excelsheet)
#define numbi 20
int bi[numbi]={5207, 5222, 5236, 5249, 5264, 5278, 5291, 5305, 5319, 5333, 5347, 5361, 5375, 5390, 5403, 5417, 5431, 5445, 5459, 5474};
 
// Tage Restmüll Tonne, Diff 01.01.2000-> Abfuhrdatum (Übernahme aus Excelsheet)
#define numre 21
int re[numre]={5197, 5211, 5226, 5239, 5253, 5267, 5281, 5295, 5309, 5323, 5337, 5351, 5365, 5379, 5393, 5407, 5421, 5435, 5449, 5463, 5477};
 
// kein Datenbestand
// Datenbestand bis 31.12.2014
int lastday=5477;
 

Vergleich Datenbestand mit aktuellem Datum:

 
abfuhr = RTC.cdn, DEC; // Tage seit 01.01.2000
abfuhr=abfuhr+1; // Abfuhr morgen ?
abfuhrn=abfuhr+1; // Abfuhr übermorgen ?
 
if(abfuhr>lastday) // Ende Datenbestand erreicht ?
{
errorstatus=1;
tftendofwork();
}
if(vtag!=RTC.day) // neuer Tag ? Berrechnung Status Tonne
{
arttonne=0;
arttonnen=0;
for (int x = 0; x < numge; x = x + 1)
{
if (ge[x] == abfuhr)
{
arttonne+=1;
Serial.println("found Gelbe Tonne");
delay(2000);
}
if (ge[x] == abfuhrn)
{
arttonnen+=1;
Serial.println("Gelbe Tonne in 2 Tagen");
delay(2000);
}
}
for (int x = 0; x < numbp; x = x + 1)
{
if (pa[x] == abfuhr)
{
arttonne+=2;
Serial.println("found Papier Tonne");
}
if (pa[x] == abfuhrn)
{
arttonnen+=2;
Serial.println("Papier Tonne in 2 Tagen");
}
}
for (int x = 0; x < numbi; x = x + 1)
{
if (bi[x] == abfuhr)
{
arttonne+=4;
Serial.println("found Biotonne");
}
if (bi[x] == abfuhrn)
{
arttonnen+=4;
Serial.println("Biotonne in 2 Tagen");
}
}
for (int x = 0; x < numre; x = x + 1)
{
if (re[x] == abfuhr)
{
arttonne+=8;
Serial.println("found Restmuelltonne");
}
if (re[x] == abfuhrn)
{
arttonnen+=8;
Serial.println("Restmuelltonne in 2 Tagen");
}
}
 

Auswertung:

 
switch (arttonne) // ArtTonne: 0-keine; 1- ge, 2-pa; 4- bi, 8- re -> Rest: Fehler DB !
{
case 0:
tonnekeine();
break;
case 1:
tonnegelb();
break;
case 2:
tonnepapier();
break;
case 4:
tonnebio();
break;
case 8:
tonnerest();
break;
default:
tonnefehler();
break;
}
vtag=RTC.day;
 
Zitieren
Unilein
Fachgebiet Rauchentwicklung
*******

Beiträge: 783
Registriert seit: Apr 2014
Bewertung: 5
#5
09.06.2014, 11:26

Das gefällt mir!! Smile

Ich habe gesehen, dass das DS331 einen 32KB eeprom-Speicher hat. Da könnte man ja auf einige Jahre im Voraus Abholdaten ablegen. Scheitert aber vermutlich daran, dass die Abholpläne nur jährlich bekannt gegeben werden.

Welchen Arduino nutzt Du?

Gruß, Uni
-----

Sic mundus creatus est.
Zitieren
wedelchen
Junior Member
**

Beiträge: 39
Registriert seit: Jun 2014
Bewertung: 0
#6
09.06.2014, 12:25

Habe es zur Zeit mit einem Uno gemacht. Zusammen hängt alles in einem Plexicase und einem Magneten auf der Rückseite am Sicherungskasten bei uns im Flur.
Zitieren
tesacrep
Administrator
*******

Beiträge: 504
Registriert seit: Dec 2013
Bewertung: 2
#7
09.06.2014, 15:00

Schick, wirklich nette Idee. Ich kämpfe ja gerade mit meiner Uhr. Ist es bei dir auch so das sie jeden Tag etwa um 8 Minuten langsamer geht?
Zitieren
wedelchen
Junior Member
**

Beiträge: 39
Registriert seit: Jun 2014
Bewertung: 0
#8
09.06.2014, 15:13

Anfangs ging sie ca. 10 Minuten die Woche falsch, deshalb auch die Einstellmöglichkeit per Drehencoder. Dies lag am DS1307. Mittlerweile habe ich einen DS3231 verbaut (der Code muss nicht geändert werden), dadurch hat sich die Ganggenauigkeit sehr verbessert.

Mit welchen Problemen bist du grad am kämpfen?
Zitieren
tesacrep
Administrator
*******

Beiträge: 504
Registriert seit: Dec 2013
Bewertung: 2
#9
09.06.2014, 19:11

Okay ich verwende die DS1307.

Dann ist die Uhr wohl einfach mist. Ich werde jetzt die andere (DS3231) kaufen und nachbauen.
Zitieren
wedelchen
Junior Member
**

Beiträge: 39
Registriert seit: Jun 2014
Bewertung: 0
#10
09.06.2014, 20:34

Überprüfe mal zur Sicherheit die Spannung von der Batterie.

Wie gesagt, bei mir waren es gut 10 Minuten in der Woche.
Zitieren


Gehe zu:


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