lowtzow
03.02.2009, 17:12
Hallo
habe im winter immer ein problem mit meinen pflanzen, sie gehn ein. wahrscheindlich wollen sie nicht die heizungsluft! ist auch eine tatsache, welche bestätigt wurde.
Abhilfe?
besprühung, ja!!!!!
methode 1:
man befülle so eine sprühfalsche und besprühe, vergisst man sicher 5mal in der woche
methode2:
man hole sich ne quariumpumpe ein paar gardena nebeldüsen, schläuche adapter & einen mega8 programmiere disen. fertig!
http://666kb.com/i/b63wtoo8dxav6l6yh.jpg
so das gnaze noch mal langsam zum mitschreiben.
1. eine mega8 grundschaltung am besten mit lcd und programmiere eine Uhr
http://666kb.com/i/b63wq1k8absnj673t.jpg
2. man programmiert zeiten ein in denen ein Ausgang geschalten wird.
if (sek<=4&&min==1&&hour==7 ) { //um 7h1min für 4sek
PORTB|=(1<<PB0);
}
3. man verbinde den gewählten Ausgang mit einem Relais und schalte die aquariumpumpe
http://666kb.com/i/b63wt7rofa8ogihdl.jpg
hier eine von insgesamt 3 Nebeldüsen
http://666kb.com/i/b63ww7jfj8nvr4nsp.jpg
hier die betropfung kann man einstellen zwischen 0-20l/h
http://666kb.com/i/b63wwf4btwun4him1.jpg
und kann dann entweder benebeln oder betropfen.
derzeit funktioniert nur eines von beiden, denn ich habe nur einen Kreis.
ich bin jetzt am überlegen ob ich eine zweite pumpe hole oder eine magnetventildose um die pumpe wahlweise im benebelkreis oder im betropfungskreis arbeiten zu lassen.
aja, benebeln sollte man nicht zu lange sonst wirds nass, wenn man zB alle 3stunden mal 4sek benebelt ist vollkommen ok
mit dem betropfen muss ich noch erfahrungswerte sammeln, da die pflanzen gerade im winter weniger wasser brauchen.
welche updates kommen noch.
eine bessere uhr, derzeit geht meine uhr pro tag um 10sek faslch (entweder ich otimiere die uhr, oder ich steig auf funkuhr um)
eine zweite pumpe oder eine magnetventildose, hier brauche ich euren rat!
und eine schönes gehäuse mit eingabemöglichkeiten
ja derzeit fallt ma nix ein, ich werde jedoch updaten bei news.
eventuell lesen da profis mit die sich mit diesen quariumpumpen auskennen, ich hab bedenken wenn ich die pumpe gegen einen zu großen widerstand pumpen lasse, kann die kaputt gehen?
nur zur veranschalichung, die pumpe macht 3000l/h
eine betrofungsdüse macht ca 2l/h x6 =12l/h
die nebeldüsen machen mehr l/h gefühlsmäßig, werte stehen leider keine drauf, jedoch wird benebelt max 4sek und betropft wahrscheindlich so 1-2min
mfg & danke fürs mitlesen ;-)
low
ps.
aja programmiert habe ich in avrstudio mit gcc
bin von bascom umgestiegen und kann es nur empfehlen, ist zwar schwieriger aber auch interessanter!
hier der code der main, leider noch nicht ganz kommentiert bzw noch falsch bin halt noch faul von bascom!
#include <avr/io.h>
#include "lcd-routines.h"
#include <util/delay.h>
#include <stdlib.h>
#include <avr/signal.h>
uint8_t sek=0;
uint8_t min=0;
uint8_t hour=7;
uint8_t day=0;
uint8_t var;
void int2lcd(int,int,int,int);
inline uint8_t debounce(volatile uint8_t *port, uint8_t pin);
int main(void)
{
DDRB = (1<<DDB0); //PinB0 als Ausgang
DDRB &= ~(1<<DDB1); //PinB2 als Eingang
PORTB = (0<<PB0)| (1<<PB1); // PibB1 auf 0 & PINB2 PullUp auf vcc
// LCD initialisierung anfang****************************************
lcd_init();
set_cursor(0,1);
lcd_string("Bewaesserung ");
set_cursor(0,2);
lcd_string("initalisierung***");
lcd_clear();
// LCD initialisierung ende****************************************
//Timer1 config anfang******************************************** ***
TCCR1B = (1<<CS12)|(1<<CS10);//cpu teiler= takt /1024
TCNT1H = 0xE1; //-> 8MHZ/1024=7812,5 => 1/11718 =128µsek
TCNT1L = 0x7A; //->1/128µsek=7812,5 => 2^16(65535)-7812,5=57722 = 0xE7A1
TIMSK = (1<<TOIE1); // bei Überlauf wird ein Interrupt ausgelöst
sei (); //Globale Interrupts freigeben
//Timer1 config ende********************************************** *****
while(1)
{
//lcd_init();
//lcd_clear();
//
int2lcd(day,hour,min,sek);
// Aufrufen des Unterprogrammes mit dem der int wert in ein acii umgewandelt wird und am lcd angezeigt wird
//Tastenabfrage anfang******************************************** ***
if (PINB & (1<<PINB1)) {
PORTB&= ~(1<<PB0);
}
else{
PORTB|=(1<<PB0);
}
//Tastenabfrage ende********************************************** *
//Zeitabfrage anfang******************************************** ***
if (sek<=4&&min==1&&hour==7 ) { //um 7h1min für 4sek
PORTB|=(1<<PB0);
}
if (sek<=4&&min==10&&hour==8 ) { //wenn sek =60
PORTB|=(1<<PB0);
}
if (sek<=4&&min==0&&hour==9 ) { //wenn sek =60
PORTB|=(1<<PB0);
}
if (sek<=4&&min==0&&hour==12 ) { //wenn sek =60
PORTB|=(1<<PB0);
}
if (sek<=4&&min==0&&hour==13 ) { //wenn sek =60
PORTB|=(1<<PB0);
}
if (sek<=4&&min==0&&hour==18 ) { //wenn sek =60
PORTB|=(1<<PB0);
}
//Zeitabfrage anfang******************************************** ***
}
}
ISR(TIMER1_OVF_vect){
sek++;
if (sek>=60) { //wenn sek =60
sek=0;
min++;
}
if (min>=60) { //wenn sek =60
min=0;
hour++;
}
if (hour>=24) { //wenn sek =60
hour=0;
day++;
}
TCNT1H = 0xE1; //s.o.
TCNT1L = 0x7A; //s.o.
}
void int2lcd(int temp1,int temp2,int temp3,int temp4)
{
lcd_data(temp1);
lcd_data(temp2);
lcd_data(temp3);
lcd_data(temp4);
set_cursor(0,2);
// Ausgabe der Variable als Text in dezimaler Schreibweise
{
// ... umwandeln siehe FAQ Artikel bei www.mikrocontroller.net
// WinAVR hat eine itoa()-Funktion, das erfordert obiges #include <stdlib.h>
char Buffer1[20]; // in diesem {} lokal
itoa( temp1, Buffer1, 10 );
// ... ausgeben
lcd_string( Buffer1 );
}
set_cursor(2,2);
lcd_data(':');
//***************************************
set_cursor(3,2);
// Ausgabe der Variable als Text in dezimaler Schreibweise
{
// ... umwandeln siehe FAQ Artikel bei www.mikrocontroller.net
// WinAVR hat eine itoa()-Funktion, das erfordert obiges #include <stdlib.h>
char Buffer2[20]; // in diesem {} lokal
itoa( temp2, Buffer2, 10 );
// ... ausgeben
lcd_string( Buffer2 );
}
//*****************************************
set_cursor(5,2);
lcd_data(':');
//***************************************
set_cursor(6,2);
// Ausgabe der Variable als Text in dezimaler Schreibweise
{
// ... umwandeln siehe FAQ Artikel bei www.mikrocontroller.net
// WinAVR hat eine itoa()-Funktion, das erfordert obiges #include <stdlib.h>
char Buffer3[20]; // in diesem {} lokal
itoa( temp3, Buffer3, 10 );
// ... ausgeben
lcd_string( Buffer3 );
}
//***************************************
set_cursor(8,2);
lcd_data(':');
//***************************************
set_cursor(9,2);
// Ausgabe der Variable als Text in dezimaler Schreibweise
{
// ... umwandeln siehe FAQ Artikel bei www.mikrocontroller.net
// WinAVR hat eine itoa()-Funktion, das erfordert obiges #include <stdlib.h>
char Buffer4[20]; // in diesem {} lokal
itoa( temp4, Buffer4, 10 );
// ... ausgeben
lcd_string( Buffer4 );
}
}
inline uint8_t debounce(volatile uint8_t *port, uint8_t pin)
{
if ( ! (*port & (1 << pin)) )
{
/* Pin wurde auf Masse gezogen, 100ms warten */
_delay_ms(50); // max. 262.1 ms / F_CPU in MHz
_delay_ms(50);
if ( *port & (1 << pin) )
{
/* Anwender Zeit zum Loslassen des Tasters geben */
_delay_ms(50);
_delay_ms(50);
return 1;
}
}
return 0;
}
habe im winter immer ein problem mit meinen pflanzen, sie gehn ein. wahrscheindlich wollen sie nicht die heizungsluft! ist auch eine tatsache, welche bestätigt wurde.
Abhilfe?
besprühung, ja!!!!!
methode 1:
man befülle so eine sprühfalsche und besprühe, vergisst man sicher 5mal in der woche
methode2:
man hole sich ne quariumpumpe ein paar gardena nebeldüsen, schläuche adapter & einen mega8 programmiere disen. fertig!
http://666kb.com/i/b63wtoo8dxav6l6yh.jpg
so das gnaze noch mal langsam zum mitschreiben.
1. eine mega8 grundschaltung am besten mit lcd und programmiere eine Uhr
http://666kb.com/i/b63wq1k8absnj673t.jpg
2. man programmiert zeiten ein in denen ein Ausgang geschalten wird.
if (sek<=4&&min==1&&hour==7 ) { //um 7h1min für 4sek
PORTB|=(1<<PB0);
}
3. man verbinde den gewählten Ausgang mit einem Relais und schalte die aquariumpumpe
http://666kb.com/i/b63wt7rofa8ogihdl.jpg
hier eine von insgesamt 3 Nebeldüsen
http://666kb.com/i/b63ww7jfj8nvr4nsp.jpg
hier die betropfung kann man einstellen zwischen 0-20l/h
http://666kb.com/i/b63wwf4btwun4him1.jpg
und kann dann entweder benebeln oder betropfen.
derzeit funktioniert nur eines von beiden, denn ich habe nur einen Kreis.
ich bin jetzt am überlegen ob ich eine zweite pumpe hole oder eine magnetventildose um die pumpe wahlweise im benebelkreis oder im betropfungskreis arbeiten zu lassen.
aja, benebeln sollte man nicht zu lange sonst wirds nass, wenn man zB alle 3stunden mal 4sek benebelt ist vollkommen ok
mit dem betropfen muss ich noch erfahrungswerte sammeln, da die pflanzen gerade im winter weniger wasser brauchen.
welche updates kommen noch.
eine bessere uhr, derzeit geht meine uhr pro tag um 10sek faslch (entweder ich otimiere die uhr, oder ich steig auf funkuhr um)
eine zweite pumpe oder eine magnetventildose, hier brauche ich euren rat!
und eine schönes gehäuse mit eingabemöglichkeiten
ja derzeit fallt ma nix ein, ich werde jedoch updaten bei news.
eventuell lesen da profis mit die sich mit diesen quariumpumpen auskennen, ich hab bedenken wenn ich die pumpe gegen einen zu großen widerstand pumpen lasse, kann die kaputt gehen?
nur zur veranschalichung, die pumpe macht 3000l/h
eine betrofungsdüse macht ca 2l/h x6 =12l/h
die nebeldüsen machen mehr l/h gefühlsmäßig, werte stehen leider keine drauf, jedoch wird benebelt max 4sek und betropft wahrscheindlich so 1-2min
mfg & danke fürs mitlesen ;-)
low
ps.
aja programmiert habe ich in avrstudio mit gcc
bin von bascom umgestiegen und kann es nur empfehlen, ist zwar schwieriger aber auch interessanter!
hier der code der main, leider noch nicht ganz kommentiert bzw noch falsch bin halt noch faul von bascom!
#include <avr/io.h>
#include "lcd-routines.h"
#include <util/delay.h>
#include <stdlib.h>
#include <avr/signal.h>
uint8_t sek=0;
uint8_t min=0;
uint8_t hour=7;
uint8_t day=0;
uint8_t var;
void int2lcd(int,int,int,int);
inline uint8_t debounce(volatile uint8_t *port, uint8_t pin);
int main(void)
{
DDRB = (1<<DDB0); //PinB0 als Ausgang
DDRB &= ~(1<<DDB1); //PinB2 als Eingang
PORTB = (0<<PB0)| (1<<PB1); // PibB1 auf 0 & PINB2 PullUp auf vcc
// LCD initialisierung anfang****************************************
lcd_init();
set_cursor(0,1);
lcd_string("Bewaesserung ");
set_cursor(0,2);
lcd_string("initalisierung***");
lcd_clear();
// LCD initialisierung ende****************************************
//Timer1 config anfang******************************************** ***
TCCR1B = (1<<CS12)|(1<<CS10);//cpu teiler= takt /1024
TCNT1H = 0xE1; //-> 8MHZ/1024=7812,5 => 1/11718 =128µsek
TCNT1L = 0x7A; //->1/128µsek=7812,5 => 2^16(65535)-7812,5=57722 = 0xE7A1
TIMSK = (1<<TOIE1); // bei Überlauf wird ein Interrupt ausgelöst
sei (); //Globale Interrupts freigeben
//Timer1 config ende********************************************** *****
while(1)
{
//lcd_init();
//lcd_clear();
//
int2lcd(day,hour,min,sek);
// Aufrufen des Unterprogrammes mit dem der int wert in ein acii umgewandelt wird und am lcd angezeigt wird
//Tastenabfrage anfang******************************************** ***
if (PINB & (1<<PINB1)) {
PORTB&= ~(1<<PB0);
}
else{
PORTB|=(1<<PB0);
}
//Tastenabfrage ende********************************************** *
//Zeitabfrage anfang******************************************** ***
if (sek<=4&&min==1&&hour==7 ) { //um 7h1min für 4sek
PORTB|=(1<<PB0);
}
if (sek<=4&&min==10&&hour==8 ) { //wenn sek =60
PORTB|=(1<<PB0);
}
if (sek<=4&&min==0&&hour==9 ) { //wenn sek =60
PORTB|=(1<<PB0);
}
if (sek<=4&&min==0&&hour==12 ) { //wenn sek =60
PORTB|=(1<<PB0);
}
if (sek<=4&&min==0&&hour==13 ) { //wenn sek =60
PORTB|=(1<<PB0);
}
if (sek<=4&&min==0&&hour==18 ) { //wenn sek =60
PORTB|=(1<<PB0);
}
//Zeitabfrage anfang******************************************** ***
}
}
ISR(TIMER1_OVF_vect){
sek++;
if (sek>=60) { //wenn sek =60
sek=0;
min++;
}
if (min>=60) { //wenn sek =60
min=0;
hour++;
}
if (hour>=24) { //wenn sek =60
hour=0;
day++;
}
TCNT1H = 0xE1; //s.o.
TCNT1L = 0x7A; //s.o.
}
void int2lcd(int temp1,int temp2,int temp3,int temp4)
{
lcd_data(temp1);
lcd_data(temp2);
lcd_data(temp3);
lcd_data(temp4);
set_cursor(0,2);
// Ausgabe der Variable als Text in dezimaler Schreibweise
{
// ... umwandeln siehe FAQ Artikel bei www.mikrocontroller.net
// WinAVR hat eine itoa()-Funktion, das erfordert obiges #include <stdlib.h>
char Buffer1[20]; // in diesem {} lokal
itoa( temp1, Buffer1, 10 );
// ... ausgeben
lcd_string( Buffer1 );
}
set_cursor(2,2);
lcd_data(':');
//***************************************
set_cursor(3,2);
// Ausgabe der Variable als Text in dezimaler Schreibweise
{
// ... umwandeln siehe FAQ Artikel bei www.mikrocontroller.net
// WinAVR hat eine itoa()-Funktion, das erfordert obiges #include <stdlib.h>
char Buffer2[20]; // in diesem {} lokal
itoa( temp2, Buffer2, 10 );
// ... ausgeben
lcd_string( Buffer2 );
}
//*****************************************
set_cursor(5,2);
lcd_data(':');
//***************************************
set_cursor(6,2);
// Ausgabe der Variable als Text in dezimaler Schreibweise
{
// ... umwandeln siehe FAQ Artikel bei www.mikrocontroller.net
// WinAVR hat eine itoa()-Funktion, das erfordert obiges #include <stdlib.h>
char Buffer3[20]; // in diesem {} lokal
itoa( temp3, Buffer3, 10 );
// ... ausgeben
lcd_string( Buffer3 );
}
//***************************************
set_cursor(8,2);
lcd_data(':');
//***************************************
set_cursor(9,2);
// Ausgabe der Variable als Text in dezimaler Schreibweise
{
// ... umwandeln siehe FAQ Artikel bei www.mikrocontroller.net
// WinAVR hat eine itoa()-Funktion, das erfordert obiges #include <stdlib.h>
char Buffer4[20]; // in diesem {} lokal
itoa( temp4, Buffer4, 10 );
// ... ausgeben
lcd_string( Buffer4 );
}
}
inline uint8_t debounce(volatile uint8_t *port, uint8_t pin)
{
if ( ! (*port & (1 << pin)) )
{
/* Pin wurde auf Masse gezogen, 100ms warten */
_delay_ms(50); // max. 262.1 ms / F_CPU in MHz
_delay_ms(50);
if ( *port & (1 << pin) )
{
/* Anwender Zeit zum Loslassen des Tasters geben */
_delay_ms(50);
_delay_ms(50);
return 1;
}
}
return 0;
}