Forum: Mikrocontroller und Digitale Elektronik Automatische Stalltür, Sensorabfrage, Atmega8 GCC


von Benjamin K. (benjamin1983)


Lesenswert?

Guten Tag,
schonmal vielen Dank für das lesen meines Beitrags!
Ich möchte gerne eine kleine Hühnerstalltür öffnen wenn es hell wird und 
schließen wenn es dunkel wird.
Ich habe dazu einen Standard Servo, einen Atmega8 und einen 
Fotowiderstand von dem ich aber leider nicht die Typenbezeichnung haben.

Die Anssteuerung des Servos ist zwar schlampig geschrieben funktioniert 
aber soweit.
Nur komme ich nicht mit der AD Wandlung klar, würde gerne bei erreichen 
eines bestimmten Werts sagen Servo fahr Tür hoch und umgekehrt.

Ich habe den Fotowiderstand so verbunden:

PortC1 -> Fotowiderstand -> Batterie(Akku,1,2V ) -> GND

Ich weiss das eigentlich Kondensatoren dazu gehören, aber ich hab 
gelesen das es man es zum testen auch ohne versuchen kann.

Habe das hier zusammengeschrieben:

#define F_CPU 1000000UL

#include <avr/io.h>
#include <util/delay.h>

int main (void)
{
  DDRB = (1<<PB1);
 int i;
 int x;
 DDRC=0b00000000;
 i=0;
while(1)
{
ADCSR=0b11000101;
while (bit_is_set(ADCSR,6));
x=ADCW;

if(x>200)
{
  while(i<1000 ) {

    PORTB |= (1<<PB1);
    _delay_us( 1500 );
    PORTB &= ~(1<<PB1);

    _delay_ms( 18 );
  i++;
  }
i = 0;

}


if(x<200)
{
  while(i<480 ) {

    PORTB |= (1<<PB1);
    _delay_us( 20000 );
    PORTB &= ~(1<<PB1);

    _delay_ms( 18 );
  i++;
  }

}

}


  return 0;
}



Wie ich bereits sagte, ist der Code sehr schlampig geschrieben, aber 
glaube trotzdem lesbar.

Vielen Dank schonmal!

Liebe Grüsse

Benjamin

von Bernd (Gast)


Lesenswert?

Benjamin Kehl schrieb:
> PortC1 -> Fotowiderstand -> Batterie(Akku,1,2V ) -> GND

das ist schon Mal falsch!
Steht sicher irgendwo wie man's macht,
vermutlich im Tutorial

von LCDmann (Gast)


Lesenswert?

GND|-Widerstand-|-Fotowiderstand->Versorgungsspannung
               ADC

Hätte ich gesagt

von Bernd (Gast)


Lesenswert?

LCDmann schrieb:
> Hätte ich gesagt

musst du alles verraten?
(ich würde es übrigens noch ein bißchen anders machen)

von rudi (Gast)


Lesenswert?

Benjamin Kehl schrieb:
> und schließen wenn es dunkel wird.
Woher weißt du, ob dann alle Hühner im Stall sind?

von Benjamin (Gast)


Lesenswert?

ah ok, also mach ich
GND -> Widerstand (10k ) -> Fotowiderstand -> Akku1,2V-> PortC1

Danke!

Kann mir jemand sagen wie die Daten dann im ADCR gespeichert werden?
Würde er bei 1,2 Volt dann 120 reinschreiben? Denke wohl nicht, wäre 
nett wenn mir noch jemand die Umrechnungsmethode verraten könnte!

von Benjamin (Gast)


Lesenswert?

Die gehen wenns dunkel wird in den Stall, bzw schon immer etwas früher

von Krapao (Gast)


Lesenswert?

In deinem Programm ist die Schaltschwelle <200 oder >200. Damit hast du 
eine Hysterese von einem Wert (=200). Der Motor an der Tür wird sich den 
Wolf machen und genau dann wenn die Türaktion läuft zwischen Aufmachen 
und Zumachen zappeln!

> glaube trotzdem lesbar.
C Beautifier sind längst erfunden.

ADC beim Atmega8 in C
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#ADC_.28Analog_Digital_Converter.29
1
#define F_CPU    1000000UL
2
#include <avr/io.h>
3
#include <util/delay.h>
4
5
// Schaltung soll bei 1,2V+-10% an ADC1 schalten
6
// AVref = Vcc = 5V
7
#define SCHWELLWERT ((1024*1200)/5000) 
8
#define HYSTERESE   (SCHWELLWERT/10)
9
10
int main(void)
11
{
12
   DDRB = (1 << PB1); // PB1 Ausgang für Motor
13
   DDRC = 0b00000000;
14
   adc_init();
15
   while (1)
16
   {
17
      uint16_t adcwert;
18
      adcwert = adc_read(1);
19
      if ( adcwert > SCHWELLWERT+HYSTERESE )
20
      {
21
         // Tür öffnen
22
         for(int servopulse = 0; servopulse < 1000; servopulse++)
23
         {
24
            PORTB |= (1 << PB1);
25
            _delay_us(1500);
26
            PORTB &= ~(1 << PB1);
27
            _delay_ms(18);
28
         }
29
      } 
30
      else if ( adcwert < SCHWELLWERT-HYSTERESE )
31
      {
32
         // Tür schliessen
33
         for(int servopulse = 0; servopulse < 480; servopulse++)
34
         {
35
            PORTB |= (1 << PB1);
36
            _delay_us(20000);
37
            PORTB &= ~(1 << PB1);
38
            _delay_ms(18);
39
         }
40
      }
41
   }
42
   return(0);
43
}

> GND -> Widerstand (10k ) -> Fotowiderstand -> Akku1,2V-> PortC1

Das ist auch nix.

http://www.mikrocontroller.net/articles/AD-Wandler
http://www.mikrocontroller.net/articles/AVR-Tutorial:_ADC (rechte 
Schaltung)
1
   ^ Vcc
2
   |
3
   #
4
   # Fotowiderstand
5
   #
6
   |
7
   +-----o PINC.1 (ADC1)
8
   |
9
   #
10
   # 10K Widerstand
11
   #
12
   |
13
  GND

Ich würde aber noch einen Endtaster/Schalter vorsehen damit im Programm 
unnötiges Öffnen bzw. Schliessen der Tür vermieden wird.

Man könnte zwar den Zustand der Tür im Programm protokollieren (Variable 
nach dem Öffnen/Schliessen setzen). Aber ein manuelles Betätigen der Tür
könnte das System aus dem Tritt bringen, wenn man danach nicht manuell 
den Zustand herstellt den das Programm protokolliert hat. Wenn man 
bereit ist das zu tun, könnte man den Zustand z.B. mit einer LED 
anzeigen.

von Benjamin K. (benjamin1983)


Lesenswert?

Wow vielen Dank, habe es jetzt folgendermaßen:

#define F_CPU    1000000UL
#include <avr/io.h>
#include <util/delay.h>

// Schaltung soll bei 1,2V+-10% an ADC1 schalten
// AVref = Vcc = 5V
#define SCHWELLWERT ((1024*1200)/5000)
#define HYSTERESE   (SCHWELLWERT/10)

void adc_init(void) {

  uint16_t result;

//  ADMUX = (0<<REFS1) | (1<<REFS0);      // AVcc als Referenz benutzen
  ADMUX = (1<<REFS1) | (1<<REFS0);      // interne Referenzspannung 
nutzen
  // Bit ADFR ("free running") in ADCSRA steht beim Einschalten
  // schon auf 0, also single conversion
  ADCSRA = (1<<ADPS1) | (1<<ADPS0);     // Frequenzvorteiler
  ADCSRA |= (1<<ADEN);                  // ADC aktivieren

  /* nach Aktivieren des ADC wird ein "Dummy-Readout" empfohlen, man 
liest
     also einen Wert und verwirft diesen, um den ADC "warmlaufen zu 
lassen" */

  ADCSRA |= (1<<ADSC);                  // eine ADC-Wandlung
  while (ADCSRA & (1<<ADSC) ) {}        // auf Abschluss der 
Konvertierung warten
  /* ADCW muss einmal gelesen werden, sonst wird Ergebnis der nächsten
     Wandlung nicht übernommen. */
  result = ADCW;
}

uint16_t adc_read( uint8_t channel )
{
  // Kanal waehlen, ohne andere Bits zu beeinflußen
  ADMUX = (ADMUX & ~(0x1F)) | (channel & 0x1F);
  ADCSRA |= (1<<ADSC);            // eine Wandlung "single conversion"
  while (ADCSRA & (1<<ADSC) ) {}  // auf Abschluss der Konvertierung 
warten
  return ADCW;                    // ADC auslesen und zurückgeben
}





int main(void)
{
   DDRB = (1 << PB1); // PB1 Ausgang für Motor
   DDRC = 0b00000000;
   adc_init();
   while (1)
   {
      uint16_t adcwert;
      adcwert = adc_read(1);
      if ( adcwert > SCHWELLWERT+HYSTERESE )
      {
         // Tür öffnen
         for(int servopulse = 0; servopulse < 1000; servopulse++)
         {
            PORTB |= (1 << PB1);
            _delay_us(1500);
            PORTB &= ~(1 << PB1);
            _delay_ms(18);
         }
      }
      else if ( adcwert < SCHWELLWERT-HYSTERESE )
      {
         // Tür schliessen
         for(int servopulse = 0; servopulse < 480; servopulse++)
         {
            PORTB |= (1 << PB1);
            _delay_us(20000);
            PORTB &= ~(1 << PB1);
            _delay_ms(18);
         }
      }
   }
   return(0);
}



Wenn ich jetzt nichts an PortC1 anlege dreht sich der Motor in eine 
Richtung ohne zu stoppen.
Wenn ich jetzt 1,2 V an PortC1 anlege passiert auch nichts anderes...

Lese jetzt das Tutorial, falls wer noch nen Tip hätte würd ich mich 
freuen!

Vielen vielen Dank schonmal für die tolle Hilfe!

Liebe Grüsse

Benny

von Krapao (Gast)


Lesenswert?

Dann vereinfache das Problem.

Der Schlüssel für dich ist zu wissen, wie groß der adcwert bei deiner 
angelegten externen Spannung ist damit du 1) weisst ob dein ADC im 
Programm funktioniert und 2) du die SCHALTSCHWELLE einstellen kannst.

Optimal wäre es, wenn du den adcwert z.B. über UART direkt ausgeben 
könntest. Das macht aber ein Faß auf mit UART Programmierung und UART 
Hardware und RS232 Verbindung zum PC...

Wenn du genug freie Portpins hast, kannst du auch den adcwert auf die 
freien Portpins geben und dort mit dem Multimeter messen welcher Pegel 
anliegt und daraus den Wert berechnen. Statt Multimeter gehen auch LEDs, 
ist aber mehr Aufwand.

Angenommen du hast PORTD komplett frei dann kannst du 8-Bit ausgeben 
z.B. die unteren 8-Bits des 10-Bit wertes adcwert
1
DDRD = 0xFF;
2
PORTD = adcwert;

Du misst dann mit dem Multimeter die Pins von PORTD gegen GND. Bei LOW 
Pegel (um 0V) setze eine 0 für den PDx in folgende Formel ein, bei HIGH 
Pegel (>3V geschätzt) eine 1...
1
adcwert = PD7*128 + PD6*64 + PD5*32 + PD4*16 + PD3*8 + PD2*4 + PD1*2 + PD0*1

Wenn dich die oberen Bits interessieren kannst du die auf weitere zwei 
freie Pins geben oder adcwert vor der Ausgabe durch 4 teilen
1
DDRD = 0xFF;
2
PORTD = adcwert/4; // >>2

Mit
1
viertel_adcwert = PD7*128 + PD6*64 + PD5*32 + PD4*16 + PD3*8 + PD2*4 + PD1*2 + PD0*1

von Benjamin K. (benjamin1983)


Lesenswert?

So wunderbar alles funktioniert, habe den Code noch etwas verändert, nur 
ein einziges Problem besteht :((
Ich habe eine Batterie anstelle eines Akkus eingesetzt ( 1,53 Volt ),
wenn die Spannung über 1,2 Volt ist ist offen, wenn die Spannung unter 
0,76 Volt fällt ist zu, aber wenn es dazwischen ist ( also unter 1,2 und 
über 0,76 )gehts immer aufzuaufzuaufzu.

Bitte bitte helft mir noch bei diesem kleinen Denkfehler den ich da wohl 
habe :(

Vielen Dank für eure Zeit! Echt super die Leute hier im Forum! Danke!
1
#define F_CPU    1000000UL
2
#include <avr/io.h>
3
#include <util/delay.h>
4
5
// Schaltung soll bei 1,2V+-10% an ADC1 schalten
6
// AVref = Vcc = 5V
7
//#define SCHWELLWERT ((1024*1000)/5000) 
8
//#define HYSTERESE   (SCHWELLWERT/10)
9
10
void adc_init(void) {
11
 
12
  uint16_t result;
13
 
14
//  ADMUX = (0<<REFS1) | (1<<REFS0);      // AVcc als Referenz benutzen
15
  ADMUX = (1<<REFS1) | (1<<REFS0);      // interne Referenzspannung nutzen
16
  // Bit ADFR ("free running") in ADCSRA steht beim Einschalten
17
  // schon auf 0, also single conversion
18
  ADCSRA = (1<<ADPS1) | (1<<ADPS0);     // Frequenzvorteiler
19
  ADCSRA |= (1<<ADEN);                  // ADC aktivieren
20
 
21
  /* nach Aktivieren des ADC wird ein "Dummy-Readout" empfohlen, man liest
22
     also einen Wert und verwirft diesen, um den ADC "warmlaufen zu lassen" */
23
 
24
  ADCSRA |= (1<<ADSC);                  // eine ADC-Wandlung 
25
  while (ADCSRA & (1<<ADSC) ) {}        // auf Abschluss der Konvertierung warten
26
  /* ADCW muss einmal gelesen werden, sonst wird Ergebnis der nächsten
27
     Wandlung nicht übernommen. */
28
  result = ADCW;
29
}
30
 
31
uint16_t adc_read( uint8_t channel )
32
{
33
  // Kanal waehlen, ohne andere Bits zu beeinflußen
34
  ADMUX = (ADMUX & ~(0x1F)) | (channel & 0x1F);
35
  ADCSRA |= (1<<ADSC);            // eine Wandlung "single conversion"
36
  while (ADCSRA & (1<<ADSC) ) {}  // auf Abschluss der Konvertierung warten
37
  return ADCW;                    // ADC auslesen und zurückgeben
38
}
39
40
41
42
43
44
int main(void)
45
{
46
   DDRB = (1 << PB1); // PB1 Ausgang für Motor
47
   DDRC = 0b00000000;
48
   adc_init();
49
50
   int i=0;
51
   int aufzu=0;
52
53
   while (1)
54
   {
55
   erster:
56
   i=0;
57
      uint16_t adcwert;
58
      adcwert = adc_read(1);
59
   
60
 //     _delay_ms(5000000);
61
//  if(aufzu==0){
62
    if (adcwert < 102) //102 klappt
63
      {
64
    
65
    if(aufzu==0)
66
    {
67
         // Tür schließen
68
         while(i<100){  
69
       PORTB |= (1 << PB1);
70
            _delay_us(1500);
71
            PORTB &= ~(1 << PB1);
72
            _delay_ms(18);
73
      i++;
74
    
75
    }
76
    aufzu=1;
77
    }
78
    
79
     goto erster;
80
     } 
81
      
82
   // i=0;
83
    // } 
84
85
86
   
87
    
88
89
90
  //  if (aufzu==1){
91
    else if ( adcwert > 300 ) // 300 klappt
92
      {
93
    if(aufzu==1)
94
    {
95
96
         // Tür öffnen
97
     while(i<100)    {
98
            PORTB |= (1 << PB1);
99
            _delay_us(20000);
100
            PORTB &= ~(1 << PB1);
101
            _delay_ms(18);
102
      i++;
103
      
104
         }
105
     aufzu=0;
106
     }
107
     
108
     goto erster;
109
110
    }
111
  
112
   
113
    //}*/
114
  
115
116
   }
117
   
118
   return(0);
119
}

von Krapao (Gast)


Lesenswert?

Der Code
1
// Schaltung soll bei 1,2V+-10% an ADC1 schalten
2
// AVref = Vcc = 5V
3
#define SCHWELLWERT ((1024*1200)/5000)
4
#define HYSTERESE   (SCHWELLWERT/10)
5
6
void adc_init(void) {
7
8
  uint16_t result;
9
10
//  ADMUX = (0<<REFS1) | (1<<REFS0);      // AVcc als Referenz benutzen
11
  ADMUX = (1<<REFS1) | (1<<REFS0);      // interne Referenzspannung
12
nutzen

setzt eine bestimmte Hardwareschaltung am Atmega8 voraus.

AVcc und AGND müssen angeschlossen sein. AVREF ist frei bzw. über einen 
100nF Kondensator mit AGND verbunden. Wenn da Unklarheiten sind, zeige 
den Aufbau deiner Schaltung.

> Wenn ich jetzt nichts an PortC1 anlege dreht sich der Motor in eine
> Richtung ohne zu stoppen.
> Wenn ich jetzt 1,2 V an PortC1 anlege passiert auch nichts anderes...

Nichts anlegen ist nicht gut. Du solltest die garantierten Grenzwerte 
testen, dann sollten auf jeden Fall zwei Schaltzustände zu sehen sein. 
D.h. entweder 5V oder 0V anlegen. 0V heisst nicht nichts, sondern eine 
Verbindung zu GND. Um Kurzschlüsse zu vermeiden würde ich aber alle 
Spannungen über einen 1K Widerstand in Serie (als Strombegrenzer) an den 
Pin anlegen. Wenn keine zwei Schaltzustände zu sehen sind, muss die 
Schaltung und/oder das Programm entwanzt werden.

von Krapao (Gast)


Lesenswert?

> aber wenn es dazwischen ist ( also unter 1,2 und
> über 0,76 )gehts immer aufzuaufzuaufzu.

Da komme ich mit dem gezeigten Code nicht auf die Ursache.

Beeinflusst die Tür den Lichteinfall auf den Fotowiderstand?

Was macht der Servo bei ausbleibenden Impulsen, denn im Bereich 102 <= 
adcwert <= 300 schickst du dem Servo ja nichts.

Der Code mit dem goto ist nicht schön. Ich würde so arbeiten:
1
#define TUER_IST_AUF 2
2
#define TUER_IST_ZU 1
3
#define TUER_IST_UNDEFINIERT 0
4
5
int main(void)
6
{
7
  uint8_t tuer = TUER_IST_UNDEFINIERT;
8
9
  DDRB = (1 << PB1); // PB1 Ausgang für Motor
10
  DDRC = 0b00000000;
11
  adc_init();
12
13
  while (1)
14
  {
15
    uint16_t adcwert;
16
    adcwert = adc_read(1);
17
18
    if ( adcwert < 102 && tuer != TUER_IST_ZU ) //102 klappt
19
    {
20
      // Tür schließen
21
      int i = 0;
22
      while ( i < 100 )
23
      {  
24
        PORTB |= (1 << PB1);
25
        _delay_us(1500);
26
        PORTB &= ~(1 << PB1);
27
        _delay_ms(18);
28
        i++;
29
      }
30
      tuer = TUER_IST_ZU;
31
    } 
32
    else if ( adcwert > 300 && tuer != TUER_IST_AUF ) // 300 klappt
33
    {
34
      // Tür öffnen
35
      int i = 0;
36
      while ( i < 100 )    
37
      {
38
        PORTB |= (1 << PB1);
39
        _delay_us(20000);
40
        PORTB &= ~(1 << PB1);
41
        _delay_ms(18);
42
        i++;
43
      }
44
      tuer = TUER_IST_AUF;
45
    }
46
  }
47
  return(0);
48
}

von Benjamin (Gast)


Lesenswert?

Hallo!

Ok also ich hab mal alles rausgeschrieben:
Der Servo bekommt eigentlich nichts zugeschickt wenn die "mittelwerte" 
als Spannung anliegen, dachte das past schon so.

Also bisher steckt noch alles im Stk500, die Verdrahtung ist 
folgendermaßen:
Externe Stromquellen: 4,5 Volt Netzteil
                      1,5 Volt Batterie

Servo Data -> PB1
Servo + -> 4,5 Volt +
Servo - -> 4,5 Volt -


PORTC GND -> 4,5 Volt -

1,5 Volt -> Fotowiderstand -> Multimeter + -> Multimeter - ->  1,5 Volt 
-
Alles ist auf ein Breadboard gesteckt, in der 5er Reihe zwischen 
Fotowiderstand und Multimeter + habe ich das Kabel zum PORTC1.
In der 5er Reihe zwischen Multimeter - und 1,5 Volt - hab ich einen 10k 
widerstand nach 4,5 Volt -.

Danke schonmal!

von Benjamin (Gast)


Lesenswert?

Ach und die Tür beeinflusst den Lichteinfall nicht weil ja alles noch 
probeweise auf dem Breadboard gesteckt ist und noch nichts montiert ist.

Habe auch noch folgendes Problem, wenn ich das Multimeter rausnehme geht 
nichts mehr...
Ich glaub ich hab da ein Anschluss Problem....

von ... (Gast)


Lesenswert?

Benjamin schrieb:
> Ich glaub ich hab da ein Anschluss Problem....
Es hat auch keiner gesagt, dass du das Multimeter mit verschalten 
sollst.
Krapao hat doch aufgemalt, wie die Schaltung aussehen muß.

von Benjamin (Gast)


Lesenswert?

Ja aber dadurch konnte ich ablesen wie hoch die Spannung ist zum 
testen... Dachte ja nicht das es zu Problemen führen könnte wenn ich es 
danach rausnehme...

von Benjamin (Gast)


Lesenswert?

Bin gerne auch bereit ein paar Euros zu überweisen für die viele Zeit 
die du hier für mich opferst Krapao...

von Krapao (Gast)


Lesenswert?

> Also bisher steckt noch alles im Stk500, die Verdrahtung ist
> folgendermaßen:

Hmm...
1
µC-Seite                    Servoseite          Servoversorgung
2
===============================================================
3
PB1 o---------------------o Servo Data
4
GND o--------+------------o Servo GND o-------o GND Netzteil
5
             |            . Servo Vcc o-------o + 4.5V Netzteil
6
             #            ^
7
             # 10K        s 
8
             #            s
9
             |            s
10
PC1 o--------+.<~~~Volt~~~s
11
             |      meter  
12
             #
13
             # Fotowiderstand
14
             #
15
             |
16
Vcc o--------+
17
5V

> Bin gerne auch bereit ein paar Euros zu überweisen für die viele Zeit
> die du hier für mich opferst Krapao...

Überhaupt nicht nötig, iss einfach ein Ei für mich mit :-)


Oder bei 1,2V Versorgung des Fotowiderstands aus der Batterie.

Das ist aber nicht notwendig sondern verkompliziert die Schaltung und 
beim Entleeren der Batterie ändert sich die Spannung am PC1 Abgriff des 
Spannungsteilers, d.h. deine Schaltung funktioniert nicht mehr wie am 
Anfang!
1
µC-Seite                        Servoseite          Servoversorgung
2
===================================================================
3
PB1 o-------------------------o Servo Data
4
GND o--------+-----------+----o Servo GND o-------o GND    Netzteil
5
             |           |      Servo Vcc o-------o + 4.5V Netzteil
6
             #           | 
7
             # 10K       |
8
             #           |
9
             |   Volt-   |
10
PC1 o--------+<~~meter~~>+
11
             |           |
12
             # Foto-     |
13
             # wider-    |                         Sensorversorgung
14
             # stand     |                        =================  
15
             |           +------------------------o 1,2V Batterie -
16
             +------------------------------------o 1,2V Batterie +

Ich habe dabei angenommen, dass du den µC mit 5V vom Steckbrett/STK500 
versorgst.

Ist das später auch so vorgesehen oder willst du eine gemeinsame 
Spannungsquelle für µC, Sensor und Servo haben (fände ich praktisch)?

von Krapao (Gast)


Lesenswert?

Der ADC Wert ist natürlich stark davon abhängig wie du den 
Fotowiderstand versorgst. Je nachVariante müssen die Werte in der 
if-Bedingung angepasst werden. Weil die Spannung der Batterie beim 
Entleeren sinkt, ist das bei externer Batterieversorgung des Sensors 
auch ein Problem. Man müsste dann vor der Auswertung auch noch die 
Batteriespannung messen und adcwert entsprechend korrigieren.

von ...-. (Gast)


Lesenswert?

Warum denn eine hell/dunkel-Schaltung??? Dann geht die Klappe auch 
tagsüber zu, wenn es gewittert oder eine Sonnenfinsternis gibt. Und wenn 
es nachts gewittert und blitzt, geht die Klappe auf und der Fuchs holt 
Deine Hühner.

Mach das lieber nach der Uhrzeit, Du kannst ja nach Tabellen fahren (im 
Dezember wird es später hell und früher dunkel und im Juni ist es 
bekanntermassen anders).

Dazu zwei Lichtschranken, die zählen, ob auch alle Hühner drin sind und 
erst dann zumacht. Alarm, wenn z.B. um 23 Uhr immer noch ein Huhn fehlt.

von Benjamin (Gast)


Lesenswert?

Yeah yeah also die Batterie Variante funktioniert schonmal, muss kurz 
weg und dann versuch ich die mit der gleichen Stromversorgung, ist wohl 
wirklich praktischer! Vielen vielen Dank für all die ganze Hilfe!

von Benjamin (Gast)


Lesenswert?

Also ich freu mich echt riesig!
Klappt nun alles wunderbar, schon alles auf ne Lochrasterplatine 
gelötet, morgen wirds montiert. Falls du mal n paar Eier abhaben willst 
schreib mir ne Nachricht ;) "bbennyk83@yahoo.de"
Danke danke danke freu


Liebe grüsse und einen schönen Abend

Benny

von Benjamin (Gast)


Lesenswert?

Ach ja, habs jetzt über ein 5 Volt netzteil alles laufen, dann gibts 
keine Ungenauigkeiten mit dem ADC Wert bei sinkender Batterie.

Falls mal ne Sonnenfinsternis ist überlebens die auch drausen n paar 
Minuten, wenns Abend wird sind sie brav drin, schon bevors richtig 
dunkel ist.
Wenns wirklich bei nem Blitz aufgeht wird wohl net der Fuchs da 
rumrennen, da hoff ich einfach mal auf mein Glück und das der Fuchs auch 
Angst hat wenns Donnert ;)

Die Lichtschranken sind bissl blöd falls die Katzen durchs Tor laufen, 
ich werd das jetzt mal so die nächsten Wochen testen und dann bescheid 
sagen wenns doch unerwartete Probleme gibt ;)

von Benjamin (Gast)


Lesenswert?

Hallo,
habe ein Problem entdeckt!
Wenn es zu einem Strom ausfall kommt würde ich gerne auf "Notstrom" 
umschalten.
Habe überlegt ob das mit 4 * 1,5 V Batterien und einem Spannungsregler 
möglich wäre. Weiss nur nicht wie ich das vernünftig realisieren kann.
Hätte vielleicht jemand die Lösung?

Mit freundlichen Grüssen

Benny

von Krapao (Gast)


Lesenswert?

Kannst du messen, wieviel Strom deine Schaltung aufnimmt, wenn der Servo 
arbeitet und wenn der Servo ruht?

von Professioneller (Gast)


Lesenswert?

Will jetzt schon jeder Vollbauer Mikrokontrollerprogrammierer werden ???
Mal im Ernst: Bleib bei deinen Tieren

von Max G. (l0wside) Benutzerseite


Lesenswert?

Benjamin schrieb:
> Hallo,
> habe ein Problem entdeckt!
> Wenn es zu einem Strom ausfall kommt würde ich gerne auf "Notstrom"
> umschalten.
> Habe überlegt ob das mit 4 * 1,5 V Batterien und einem Spannungsregler
> möglich wäre. Weiss nur nicht wie ich das vernünftig realisieren kann.
> Hätte vielleicht jemand die Lösung?

Erstmal zu "Professioneller": was soll das dumme Geschwätz, noch dazu 
als Gast? Wir haben alle mal klein angefangen. Und Benjamin hat sein 
System wohl zum Laufen bekommen.

Benjamin: ist Notstrom wirklich ein Thema? Wenn bei Dir öfter der Strom 
ausfällt, stelle doch eine Autobatterie hin, die Du alle Vierteljahr 
nachlädst.

Ansonsten die primitivste aller Möglichkeiten: die beiden 
Spannungsquellen über Dioden (am besten Zenerdioden) kombinieren. So 
lange das Netzteil mehr Spannung liefert als die Batterie, ist die 
Batterie quasi abgehängt.

                             Zenerdioden

         .----------------------->|---------------
         |                                        |
         |                                        | --------
         |                  .---->|---------------'   zur Schaltung
         |                  |
         |                  |
         |                  |
         |                 / \   Netzteil
        --- Batterie      (_/_)  5V
         -  4,5V           \_/
         |                  |
         |                  |
         '
        GND                GND
(created by AACircuit v1.28.6 beta 04/19/05 www.tech-chat.de)

Gruß,

Max

von AR (.- .-.) (Gast)


Lesenswert?

Zenerdioden

von Max G. (l0wside) Benutzerseite


Lesenswert?

AR (.- .-.) schrieb:
> Zenerdioden

Danke für den freundlichen und ausführlichen Hinweis einschließlich 
Korrektur.

Es hätte natürlich Schottkydioden heißen sollen.

Max

von Cyblord -. (cyblord)


Lesenswert?

> Kann mir jemand sagen wie die Daten dann im ADCR gespeichert werden?
> Würde er bei 1,2 Volt dann 120 reinschreiben? Denke wohl nicht, wäre
> nett wenn mir noch jemand die Umrechnungsmethode verraten könnte!

Das Datenblatt tut dies sehr gerne.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.