Der Attiny und über das Internet lesbare Briefkasten

Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
tesacrep
Administrator
*******

Beiträge: 504
Registriert seit: Dec 2013
Bewertung: 2
#1
12.05.2014, 14:13

Hallo,

Ich möchte ein Konstrukt für Folgendes Bauen:

- Ein Briefkasten soll übers Internet gelesen werden. Ich will immer wissen ob Post drin ist oder nicht.
- Im Briefkasten ist der Platz beschränkt auf: 20 X 30 X 15 CM Einschließlich Post und Technik.
- Im Briefkasten gibt es kein Strom und Kein Internet

Was also mein Plan ist:

Ich will im Briefkasten zumindest für den Anfang eine Akku verbauen Später vlt. sogar eine Solarzelle. Das ganze wird in einen Einschub gebaut, den man jederzeit entnehmen kann. Betrieben soll der Briefkasten mit einem Attiny, der Via infrarot die Daten in mein 2M entferntes zimmer senden soll, wo dann ein Richtiger Arduino die Auswertung der Daten macht.

Theoretisch kein Problem, werde nachehr Kurz ein Attiny kaufen, und dann schauen wie sich das realisieren lässt. den Rest hab ich schon.

Gibts noch Tipps wie ich das am einfasten umsetzten kann?

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

Beiträge: 788
Registriert seit: Apr 2014
Bewertung: 5
#2
12.05.2014, 15:38

Hi tesacrep,

der ATTiny hat natürlich sehr begrenzte Möglichkeiten, da sein Speicher wirklich klein ist. Nimmst Du den 2313? Der hätte ja zumindest 2K Programmspeicher. Ich habe einige ATTiny13 im Einsatz. Da geht noch weniger.... Deine Ansprüche scheinen mir allerdings sehr überschaubar zu sein, es sollte also möglich sein.

Grobe Idee: Auf dem Boden des Briefkastens liegt eine Platte, die, wenn Post in den Kasten fällt, einen Mikroschalter bedient. Der ATTiny, der sich, solange nichts zu tun ist, im Sleepmode befindet, wacht auf, da die Betätigung des Schalters einen Interrupt auslöst. In der Interrupt-Service-Routine (ISR) wird als Reaktion dann ein IR-Signal an Deinen Arduino senden.

Soweit ganz einfach.

Herausforderungen:
  • Genügend empfindlicher Schalter am Boden des Briefkastens.
  • Stromversorgung der Schaltung (Solar??)
  • Starke IR-Diode mit möglichst geringer Betriebsspannung
  • Programmierung des ATTiny in Arduino, da Platz = Mangelware
  • Beschränkung des Signals auf wenige Sekunden um die Spannungsquelle nicht zu sehr zu belasten
  • Codierung des signals??? (Damit keiner dem Empfänger manipulieren kann -- ist aber nur eine Idee)

Bei intensiver Überlegung fallen mir da sicher noch weitere Herausforderungen ein. Smile

Folgende Fakten, die in die Überlegungen eingebracht werden müssen:
  • Ein "standard" ATTiny13 benötigt 2,7 Volt um den Betieb aufzunehmen (er muss dann mit 1 MHz betrieben werden, sonst haut das nicht hin)
  • Die ATTiny V-Typen laufen schon mit 1,8 Volt (Auch 1 MHz)
  • Im Sleepmode benötigt der ATTiny lediglich einen Ruhestrom von wenigen µA
  • IR-Dioden haben oft eine Betriebsspannung von ca 3,2 Volt, was den 1,8 - 2,7 Volt des ATTiny im Wege steht
  • Bei möglichst geringer Betriebsspannung kommen wir grob mit 3 Bauteilen aus: Mikroschalter, Mikrocontroller und IR-Diode

Vielleicht helfen meien Ausführungen ja.... Smile

Gruß
Uni
-----

Sic mundus creatus est.
(Dieser Beitrag wurde zuletzt bearbeitet: 12.05.2014, 15:38 von Unilein.)
Zitieren
Unilein
Fachgebiet Rauchentwicklung
*******

Beiträge: 788
Registriert seit: Apr 2014
Bewertung: 5
#3
12.05.2014, 17:47

Eine Kleinigkeit muss ich hier schon korrigieren: Um den Interrupt am Interrupt-Pin INT0 auslösen zu können, muss der Pin von logisch 1 auf logisch 0 gezogen werden. Folglich benötigen wir einen Pull-Up Widerstand, der den Pin auf logisch 1 hält (10K vom Pint INT0 an Vcc).


Wenn ich heute Abend etwas Zeit habe, kann ich das mal kurz aufbauen und vermutlich auch programmieren.
-----

Sic mundus creatus est.
(Dieser Beitrag wurde zuletzt bearbeitet: 12.05.2014, 17:51 von Unilein.)
Zitieren
Unilein
Fachgebiet Rauchentwicklung
*******

Beiträge: 788
Registriert seit: Apr 2014
Bewertung: 5
#4
12.05.2014, 21:24

So, ich habe die prinzipielle Schaltung mal auf mein Breadboard gesteckt:

   

Dazu ist noch zu sagen, dass die rote LED die IR-Diode darstellen soll. Der Mikroschalter soll unseren Schalter, der auf Posteinwurf reagiert symbolisieren. Wie zuvorbeschrieben liegt am Pin INT0 ein High-Signal an (über den 10K-Widerstand an Vcc).

In meiner Testschaltung wird die Spannung über einen 5 Volt Spannungsregler bereit gestellt. In der endgültigen Schaltung sieht das natürlich anders aus. Da gehe ich mal von 3 Volt aus.

Wenn in der Schaltung alles perfekt sein soll, dann muss der Mikroschalter noch entprellt werden. Das erreicht man mit einem kleinen Kondensator zwischen den Polen des Schalters. Der sollte zwischen 100 nF und 1 µF liegen. Grösser auf keinen Fall.

Ausserdem ist ein Abblockkondensator zwischen GND und Vcc empfehlenswert. Dieser killt hochfrequente Interferenzen und sorgt für Stabilität.

Und zu guter letzt legt man den Reset-Pin (Pin 1 beim ATTiny) auch auf High-Potenzial (über einen 10 K-Widerstand), damit dieser nicht in der Luft hängt und zu spontanem Zurücksetzen des Controllers führt.

Auf diese Empfehlungen kann man natürlich verzichten, jedoch hilfreich für Stabilität.

Das Programm für die Schaltung entwickele ich gleich noch. Sobald das fertig ist, hänge ich es an den Thread.

Mfg
Uni
-----

Sic mundus creatus est.
(Dieser Beitrag wurde zuletzt bearbeitet: 12.05.2014, 21:36 von Unilein.)
Zitieren
Unilein
Fachgebiet Rauchentwicklung
*******

Beiträge: 788
Registriert seit: Apr 2014
Bewertung: 5
#5
12.05.2014, 23:19

So... und hier ist auch schon meine erste Code-Version.
Das Programm wird initialisiert und schickt den ATTiny schlafen. In diesem Stadium ist die Programmausführung angehalten, der Prozessor reagiert aber auf "äußere Reize". In unserem Fall auf den Taster an Pin INT0.

Im Programm habe ich jetzt mal in der ISR (Interrupt Service Routine) eine kleine Blinkroutine eingebaut, damit man auch etwas sehen kann. Die LED blinkt jetzt mit 1 Hz, also einmal pro Sekunde. Damit hört der ATTiny auch nicht mehr auf.

Die Routine ist nur für Demo-Zwecke. Ich werde das Programm so basteln, dass es im Falle eines Tastendrucks die LED für ca. 3 Sekunden einschaltet und danach wieder aus.

...und jetzt geh ich ins Bett Smile

 
.device AtTiny13

.def temp = r16 ; R16 für temporäre Informationen

; Interruptvektoren
rjmp RESET ; Start-Sequenz
rjmp TastINT0 ; Int0-Interrupt (Wenn Taste gedrückt)
reti ; PcInt0-Interrupt
reti ; Timer/Counter 0 Overflow
reti ; EEprom ready
reti ; Analog Commarator
reti ; Timer/Counter Compare Match A
reti ; Timer/Counter Compare Match B
reti ; Watchdog Timeout
reti ; ADC Conversion complete
reti
 
 
Reset:
ldi temp,low(Ramend)
out SPL,temp ; Stackpointer stetzen

ldi temp, (1<<INT0)
out GIMSK,temp ; INT0 Taste freischalten
 
ldi temp, (1<<SE)+(1<<SM1)+(0<<ISC01)
out MCUCR,temp ; Sleep und INT0 low level
 
ldi temp,0 ; Port B auf LOW
out DDRB,temp
out PORTB,temp
 
sei ; globale Befähigung für Interrupts
sleep ; Den ATTiny schlafen legen
loop: rjmp loop ; Für immer
 
 
/* Ab hier läuft die ISR */
TastINT0:
;ldi temp, (1<<PORTB0) ; PB0 auf 1
;out PORTB, temp
 
 
Start:
ldi r16,0xFF
out DDRB,r16
Schleife:
ldi r16,(1<<PORTB0)
out PORTB,r16
ldi r18,5
Warte13:
ldi r17,195
Warte12:
ldi r16,170
Warte11:
dec r16
brne Warte11
dec r17
brne Warte12
dec r18
brne Warte13
ldi r16,(0<<PORTB0)
out PORTB,r16
ldi r18,5
Warte23:
ldi r17,195
Warte22:
ldi r16,170
Warte21:
dec r16
brne Warte21
dec r17
brne Warte22
dec r18
brne Warte23
rjmp Schleife
 
 
reti
 
 
-----

Sic mundus creatus est.
(Dieser Beitrag wurde zuletzt bearbeitet: 13.05.2014, 08:19 von Unilein.)
Zitieren
Unilein
Fachgebiet Rauchentwicklung
*******

Beiträge: 788
Registriert seit: Apr 2014
Bewertung: 5
#6
13.05.2014, 08:44

Habe das Programm heute morgen noch schnell angepasst. Probieren kann ich es nicht, da ich im Büro sitze und ich mein Equipment nicht hier habe Big Grin

Dennoch denke ich, dass das funktioniert.

--> ATTiny schläft von Anfang an
--> Interrupt INT0 wird vom Prozessor bedient
--> Tastendruck löst INT0 aus
--> Pin PB0 wird auf high gesetzt
--> der Prozessor wartet 4 Sekunden
--> Pin PB0 wird auf low gesetzt
--> ATTiny schläft wieder

 
/*
* IR_Sender.asm
*
* Created: 12.05.2014 20:38:47
* Author: Martin
*/
 
/* Funktion: Bei gedrücktem Taster, der Pin INT0 des ATTiny13 auf Masse zieht,
* wird der ATTiny13 aus seinem Schlafmodus geweckt und der Pin PB0 (Pin 5)
* auf High gelegt. Eine angeschlossene LED beginnte zu leuchten
* nach einer definierten Zeit wird PB0 wieder Low und die LED erlischt
*
*/
 
 
.include "tn13def.inc"
.device AtTiny13

.def temp = r16 ; R16 für temporäre Informationen

; Interruptvektoren
rjmp RESET ; Start-Sequenz
rjmp TastINT0 ; Int0-Interrupt (Wenn Taste gedrückt)
reti ; PcInt0-Interrupt
reti ; Timer/Counter 0 Overflow
reti ; EEprom ready
reti ; Analog Commarator
reti ; Timer/Counter Compare Match A
reti ; Timer/Counter Compare Match B
reti ; Watchdog Timeout
reti ; ADC Conversion complete
reti
 
 
Reset:
ldi temp,low(Ramend)
out SPL,temp ; Stackpointer stetzen

ldi temp, (1<<INT0)
out GIMSK,temp ; INT0 Taste freischalten
 
ldi temp, (1<<SE)+(1<<SM1)+(0<<ISC01)
out MCUCR,temp ; Sleep und INT0 low level
 
ldi temp,0 ; Port B auf LOW
out DDRB,temp
out PORTB,temp
 
sei ; globale Befähigung für Interrupts
sleep ; Den ATTiny schlafen legen
loop: rjmp loop ; Für immer
 
 
/* Ab hier läuft die ISR */
TastINT0:
; LED einschalten
ldi temp, (1<<PORTB0) ; PB0 auf 1
out PORTB, temp
 
; 4 Sekunden warten
ldi R17, &#36;24
WAIT0: ldi R18, &#36;BC
WAIT1: ldi R19, &#36;C4
WAIT2: dec R19
brne WAIT2
dec R18
brne WAIT1
dec R17
brne WAIT0
; -----------------------------
; 3 Takte lang warten
ldi R17, &#36;01
WAIT3: dec R17
brne WAIT3
; -----------------------------
; 1 Takt lang warten
nop
 
; LED ausschalten
ldi temp, (0<<PORTB0) ; PB0 auf 1
out PORTB, temp
reti
 
 
-----

Sic mundus creatus est.
Zitieren
tesacrep
Administrator
*******

Beiträge: 504
Registriert seit: Dec 2013
Bewertung: 2
#7
13.05.2014, 10:58

WOW,

Okay hätte ich gewusst das du so weit gehst, hätte ich mich ein wenig genauer ausgedrückt. Wie ich messen will ob Post im Briefkasten ist wird relativ einfach. Ich möchte einen IR Distanzmesser verwenden, so bin ich vom Gewicht her nicht gebunden, und muss keine beweglichen Teile verbauen.
Via Infrarot möchte ich folgende Daten im 2 Sec. Takt übertragen:

- Post/Keine Post

Das keine Post soll aussagen, das meine Schaltung auch Funktioniert, also online ist. Das ganze werde ich mit diesen IR Codes machen, mit Send Char (). Ich denke für die Codierung des Signals nehme ich einfach die RGB Codes die ich bereits von der Fernbedienung Herausgelesen habe.

Die kann ich aber erst daheim wieder Herausfinden. Was die Steuerung innen angeht wird das wohl noch ein größerer Akt, denn ich denke ich möchte zu der HP noch ein Display, eine Heligkeitssesor, so das die Beleuchtung nicht nachts an ist. Auch ist eine Überlegung wenn Post erkannt wird ob ich vielleicht eine Meldung ausgeben lasse über ein Tweeter. Ich nehme heute Abend mal genaue Mase des Briefkasten, und fange dann mal an die Teile zusammenzusuchen.
Dann werde ich mir auch deinen Sketch genauer ansehen.

BTW: Du kannst auch die direkte Arduino-Datei, also die .ico anhängen, das habe ich extra freigeschalltet.

Vielen Danke erstmal,
tesacrep
Zitieren
Unilein
Fachgebiet Rauchentwicklung
*******

Beiträge: 788
Registriert seit: Apr 2014
Bewertung: 5
#8
13.05.2014, 11:15

Zitat:BTW: Du kannst auch die direkte Arduino-Datei, also die .ico anhängen, das habe ich extra freigeschalltet.

Ich habs halt direkt in Assembler geschrieben. Arduino-C habe ich gar nicht benutzt Wink

Was Deinen Wunsch angeht, so habe ich noch nicht ganz verstanden, wohin die Reise genau geht. Ich lese heraus, dass Du wesentlich mehr funktionalität benötigst als das, was ich jetzt mal grob umgesetzt habe.

Jenachdem, was Du Dir genau vorstellst, wird es auf der Senderseite mit dem Speicher des ATTiny schnell knapp werden. Und Port-Pins sind ja auch relativ rar. Wenn Du mehr machen willst, als nur "Post angekommen", dann wäre es eine Überlegung wert, ein NRF24L01-Modul für Übertragung und Empfang einzusetzen. Der NRF24L01 kann ohne weiteres direkt am Arduinio (oder einem nackten µC) betrieben werden.

Dazu gibt es sogar passende Bibliotheken.
-----

Sic mundus creatus est.
Zitieren
Unilein
Fachgebiet Rauchentwicklung
*******

Beiträge: 788
Registriert seit: Apr 2014
Bewertung: 5
#9
13.05.2014, 22:20

Ich lasse da jetzt nicht locker und habe nochmal ein wenig gesucht. Es ist tatsächlich möglich, mit einem ATTiny und dem NRF24L01 einen Funksender aufzubauen. Smile

Mit den ganz kleinen ATTiny gehts leider nicht, da hier der Speicher für die Programmierung des Sendemoduls und des Sensors nicht ausreichen wird (ATTiny bis Modell 25 einschließlich). Mit einem ATTiny85, der immerhin schon 8K Speicher hat.

Hab natürlich auch ein Schaltungsbeispiel für Euch:

   
-----

Sic mundus creatus est.
(Dieser Beitrag wurde zuletzt bearbeitet: 13.05.2014, 22:28 von Unilein.)
Zitieren
tesacrep
Administrator
*******

Beiträge: 504
Registriert seit: Dec 2013
Bewertung: 2
#10
14.05.2014, 09:24

Zitat:Ich habs halt direkt in Assembler geschrieben. Arduino-C habe ich gar nicht benutzt Wink

Assembler ist jetzt auch freigeschalten, wenn noch was fehlt gib laut.Smile

Zitat:Was Deinen Wunsch angeht, so habe ich noch nicht ganz verstanden

Ich möchte nur an einer Seite einen Attiny verwenden, und zwar an der Briefkastenseite. Auf der anderen kommt ein Normaler Arduino. Zum übertragen, erwähnte ich ja bereits das ich ebenfals Infrarot verwenden möchte (Hatte unter anderem damit zu tun das ich keinen anderen weg kannte.Confused)
Vom NRF24L01 habe ich hier noch 2 rumliegen, mit den möchte ich dringend auch noch etwas basteln.
Wäre jetzt eigentlich jetzt der Richtige zeitpunkt, aber es war nicht leicht an die Sende IR Led zu kommen, und jetzt möchte ich diese auch verwenden.
[Bild: attachment.php?aid=120]
BTW: Mir ist klar das ich so nur in eine Richtung Signale übertragen kann.

Zum checken ob Post da ist verwende ich diesen IR Distanzmesser:
[Bild: attachment.php?aid=119]

Vielen Dank nochmal,

tesacrep


Angehängte Dateien Thumbnail(s)
       
Zitieren


Gehe zu:


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