• Willkommen im Geoclub - dem größten deutschsprachigen Geocaching-Forum. Registriere dich kostenlos, um alle Inhalte zu sehen und neue Beiträge zu erstellen.

AVR Bastelei : GeoSenso

Finckenbande

Geocacher
Hallo zusammen,

ich empfinde es genauso wie im Nachbarthread: es ist einfach zu ruhig geworden in diesem Bereich.
Ich habe von so manchem hier profitiert und sogar mit Bussard mal zu einem kleinen Projekt beigetragen - der 16-Segment-Anzeige; das ist aber schon ein andere Thread.

Hier trage ich hoffentlich etwas für alle dazu bei, bin sogar heute ganz neu in Eagle eingestiegen, um meine Bleistiftzeichnungen in etwas professionellerer Art für Euch alle Online stellen zu können.
Hinweise, was man dort noch besser machen kann, nehme ich gerne entgegen !
Ich bin das, was ich gerne als Handtaschen-Bastler bezeichne: ich habe es mir ganz einfach gemacht und verwende BASCOM (sogar gekauft) und baue die Station "oldshool" auf Streifenraster und voll bedrahtet-bestückt auf. Damit aber auch für wirklich jeden nachvollziehbar und nachzubauen.

Zum Hintergrund:
Diese Station war in meinem bisher aufwendigstem Cache - https://coord.info/GC2MKC2 verbaut. Dieser war jedoch so aufwendig zu pflegen, dass ich ihn nur eine sehr kurze Zeit online hatte. In ihm waren insgesamt 9 Microcontroller verbaut und ich habe voll auf vom Cacher mitgebrachter Energie gesetzt - alle mussten also mindestens den handelsüblichen 9V-Block mitbringen. Die verbaute "Angst-Stromquelle" habe ich im nachhinein immer so verbaut, da die Cacher inzwischen so ziemlich alles mit viel Strom und Spannung an meine Stationen drangehalten haben; Verpol- und Überspannungsschutz sind also Pflicht.
Im Cache ging es darum, an mehreren Stationen Zahlenfolgen zu ergattern, welche man an einer zentralen Station eingeben musste. Es gab auch eine "Notfallstation", an der man alle max. 10 Minuten eine wählbare Lösung einer der abzuklappernden Stationen bekommen konnte.
Er hat sehr gut abgeschnitten und während seiner Laufzeit war der Wald ganz schön voll .....

Zum Aufbau:
Im Inneren befindet sich eine Streifenrasterplatine, die ich einfach frei nach Schaltplan aufbaue - in dem kleinen Kästchen ist immer genügend Platz. Für die Taster setze ich auf alle 5 verfügbaren Farben der Conrad-Taster (schwarz ist schwierig einzusetzen :roll: ) . Als Anzeige habe ich sowohl eine RGB-LED (die hinter einem "blind" gemachten Petlingkopf sitzt) gesetzt, als auch auf eine klassische 7-Segmentanzeige. Wie oben zu lesen, musste man eine Zahlenfolge bekommen. Wer da also eine Koordinate anzeigen möchte, muss an dem Sourcecode noch etwas ändern. (Finale Anzeige des Ergebnisses)
Die Station war mit einem Feuchtigkeitsbeutelchen in einer Lock-und-Lock-Dose verstaut. Ein einfaches Band hat es an dem Ort gehalten, wo es versteckt war.

Name der Station im Originalcache: "Der Professor" (Station 6)

Hier im Anfangspost auch direkt alle relevanten Dateien:
- Bild der Station von aussen:
GeoSenso_vorne.jpg
GeoSenso_seitlich.jpg

- Eagle-Schaltbild:
GeoSenso.png


- Bascom Sourcecode:
Code:
'****************** GeoSenso*********************************
' Attiny 2313 mit RGB-LED und 5 Tastern sowie 7-Segmentanzeige
' frei nach dem bekannten SENSO
' war mal verbaut im Cache
' https://coord.info/GC2MKC2
' extra dokumentiert für den Geoclub.de
' letzte Änderung am 11.02.2017
' alles gebaut, geschrieben von [email protected]
' AKA Finckenbande im Geoclub
'**********************************************************


$regfile = "ATtiny2313.dat"
$crystal = 1000000                                          ' Fuses auf Standard Out of Box - Geschwindigkeit ist nicht wichtig ...



Config Portd.0 = Output                                     'rot LED
Config Portd.1 = Output                                     'grün LED
Config Portd.2 = Output                                     'blau LED
Config Portd.3 = Input                                      'Taster Rot
Config Portd.4 = Input                                      'Taster weiss
Config Portd.5 = Input                                      'Taster grün
Config Portd.6 = Input                                      'Taster gelb
Config Porta.0 = Input                                      'Taster blau

Portd.3 = 1                                                 'und die pullups; taster ziehen nach grnd
Portd.4 = 1
Portd.5 = 1
Portd.6 = 1
Porta.0 = 1

Config Portb = Output                                       'hier kommt die 7-Seg-Anzeige dran

Portd.0 = 1                                                 'rote LED aus
Portd.1 = 1                                                 'grüne LED aus
Portd.2 = 1                                                 'blaue Led aus

Rot Alias Portd.0
Grün Alias Portd.1
Blau Alias Portd.2


Dim Level As Byte
Dim Schleifenzähler As Byte
Dim Hilfsvariable As Byte
Dim Farbfolge(11) As Byte

Config Timer1 = Timer , Prescale = 1                        'Timer für Zufallszahlen
Dim ___rseed As Word
Enable Timer1
Start Timer1

Falscheingabe:

Schleifenzähler = 1
Do                                                          'Auf Tastendruck warten
Portb = Lookup(schleifenzähler , Kreisen)
    Debounce Pind.3 , 0 , Start_game                        'Taste "rot" gedrückt
    Debounce Pind.4 , 0 , Start_game                        'Taste "weiss" gedrückt
    Debounce Pind.5 , 0 , Start_game                        'Taste "grün" gedrückt
    Debounce Pind.6 , 0 , Start_game                        'Taste "gelb" gedrückt
    Debounce Pina.0 , 0 , Start_game                        'Taste "blau" gedrückt
Incr Schleifenzähler
If Schleifenzähler > 6 Then Schleifenzähler = 1
Waitms 50
Loop
Portb = 0

Start_game:
___rseed = Timer1                                           ' Rseed setzen, damit Zufallszahlen abhängig vom ersten Tastendruck

For Schleifenzähler = 1 To 11                               'Array mit Zufallszahlen füllen
Farbfolge(schleifenzähler) = Rnd(50) + 10                   'Zufallszahl von 1-5 generieren
Farbfolge(schleifenzähler) = Farbfolge(schleifenzähler) / 10
Next Schleifenzähler


Level = 1                                                   'es wird mit stufe 0 begonnen (heisst: 1 Ziffer)
Do

Decr Level                                                  'anstatt hilfsvariable zum darstellen auf der 7-Segmentanzeige 0-9, dann Punkt benutzen
If Level < 10 Then
   Portb = Lookup(level , Zahlen)                           'aktuelles a darstellen
   Else
   Portb = 1                                                'bei 10 soll auf der 7-Segmentanzeige der Punkt an sein
End If
Incr Level                                                  'und hier das decrease für die Anzeige auf der 7-Segmentanzeige wieder zurückdrehen
Wait 1                                                      'dies ist die wartezeit vor jedem abspielen, um den Spieler nicht zu "verwirren" - sonst würde direkt nach vorangegangenem Tastendruck abgespielt
Gosub Darstellen                                            'es werden soviele farben "abgespielt" wie gerade in "level" ist

For Schleifenzähler = 1 To Level
   Gosub Tastendruckeinlesen                                'in hilfsvariable wird die gedrückte taste gespeichert
   If Farbfolge(schleifenzähler) <> Hilfsvariable Then      'es wurde falsch gedrückt
      Gosub Beep_error
      Goto Falscheingabe
   Else
      Gosub Beep_ok
   End If

Next Schleifenzähler
Incr Level                                                  'mit Level "eins höher" geht es weiter
Loop Until Level = 11                                       'bis x-1 in Folge richtig gedrückt wurden (es wird ja mit 0 begonnen) / maximal 12 (=11 Stellen)

'jetzt gehts weiter
Portb = 0                                                   '7-Segment aus
Schleifenzähler = 1
Do                                                          'wildes geblinke
Gosub Rotan
Waitms 50
Gosub Aus
Waitms 50

Gosub Grünan
Waitms 50
Gosub Aus
Waitms 50

Gosub Blauan
Waitms 50
Gosub Aus
Waitms 50

Gosub Gelban
Waitms 50
Gosub Aus
Waitms 50

Gosub Weissan
Waitms 50
Gosub Aus
Waitms 50

Incr Schleifenzähler
Loop Until Schleifenzähler = 10                             '10 mal wildes geblinke

'so die arbeit ist getan, nun muss noch dargestellt werden
Do                                                          'erstmal kreisen zum abgrenzen
For Hilfsvariable = 1 To 5
   For Schleifenzähler = 1 To 6
   Portb = Lookup(schleifenzähler , Kreisen)
   Waitms 50
   Next Schleifenzähler
Next Hilfsvariable

For Schleifenzähler = 1 To 10                               'die 9 Ziffern des Zielcoodes ausgeben
Hilfsvariable = Lookup(schleifenzähler , Code)
Portb = Lookup(hilfsvariable , Zahlen)
Waitms 400
Portb = 0
Waitms 400
Next Schleifenzähler

Loop                                                        'und endlos ausgeben ...



Darstellen:
For Schleifenzähler = 1 To Level
   Hilfsvariable = Farbfolge(schleifenzähler)
   Select Case Hilfsvariable
     Case 1 : Gosub Rotan
     Case 2 : Gosub Weissan
     Case 3 : Gosub Grünan
     Case 4 : Gosub Gelban
     Case 5 : Gosub Blauan
   End Select
   Waitms 500
   Gosub Aus
   Waitms 500
Next Schleifenzähler
Return

Tastendruckeinlesen:
Do
Hilfsvariable = 1
    Debounce Pind.3 , 0 , Tastendruck                       'Taste "rot" gedrückt
Hilfsvariable = 2
    Debounce Pind.4 , 0 , Tastendruck                       'Taste "weiss" gedrückt
Hilfsvariable = 3
    Debounce Pind.5 , 0 , Tastendruck                       'Taste "grün" gedrückt
Hilfsvariable = 4
    Debounce Pind.6 , 0 , Tastendruck                       'Taste "gelb" gedrückt
Hilfsvariable = 5
    Debounce Pina.0 , 0 , Tastendruck                       'Taste "blau" gedrückt
Loop
Tastendruck:
Return

Beep_error:
 Sound , Porta.1 , 20 , 1200
 Sound , Porta.1 , 50 , 1800
Return

Beep_ok:
 Sound , Porta.1 , 150 , 50
Return


Rotan:
Rot = 0
Grün = 1
Blau = 1
Return

Grünan:
Rot = 1
Grün = 0
Blau = 1
Return

Blauan:
Rot = 1
Grün = 1
Blau = 0
Return

Gelban:
Rot = 0
Grün = 0
Blau = 1
Return

Weissan:
Rot = 0
Grün = 0
Blau = 0
Return


Aus:
Rot = 1
Grün = 1
Blau = 1
Return

Zahlen:
'---------abcdefg.
  Data &B11111100                                           '0
  Data &B01100000                                           '1
  Data &B11011010                                           '2
  Data &B11110010                                           '3
  Data &B01100110                                           '4
  Data &B10110110                                           '5
  Data &B10111110                                           '6
  Data &B11100000                                           '7
  Data &B11111110                                           '8
  Data &B11110110                                           '9

Kreisen:
  Data &B10000000                                           ' fängt oben an
  Data &B01000000
  Data &B00100000
  Data &B00010000
  Data &B00001000
  Data &B00000100
  Data &B10000000                                           ' und hört oben wieder auf

Code:
Data 0 , 6 , 5 , 3 , 7 , 8 , 4 , 3 , 3 , 9 , 1              'die erste Ziffer ist ein dummy !!


Jetzt freue ich mich auf (konstruktive) Kritik (ich weiß: das ist die grüne Hölle :stock1: ) - und vom Lob lebt der Cacheowner ja bekanntlich :applaus:....

Wir bekommen hier wieder Schwung rein !!

Der Papa der Finckenbande
 

Riedleweg

Geocacher
Hab ein paar von den logs eures Caches gelesen, ja, da blutet einem das Herz. Es gehen Wochen drauf das zu realisieren.

Wie waren eure Erfahrungen mit der ext Stromquelle? Gabs da Ausfälle wg Überspannung? Die 7805er können ja schon was ab.
Den Gleichrichter als Verpolungschutz hab ich gesehen.
 

SammysHP

Moderator
Teammitglied
Wer hat draußen schon was dabei, was mehr als 9V liefert? Aber einen Überspannungsschutz zu integrieren ist auch kein großes Problem.
 

Riedleweg

Geocacher
Hab mir den Schaltplan mal angesehen.

Wenn ihr EAGLE-Neueinsteiger seit dann sieht das ja schon richtig gut aus

Welchen Programmer verwendet ihr? Hab den Pfostenstecker gesehen.

Das kennt ihr natürlich: http://bascomforum.de/

Gruß
 

fogg

Geomaster
Und ich dachte, der Name GeoSenso wäre geschützt :???: Mein Cache heißt nämlich genau so: https://coord.info/GC4E7EK. Ist aber 2 Jahre später online gegangen :eek:ps: .

Ich war da auch weniger kreativ und hab das Pollin-Spiel "gemoddet". Den Source-Code hat Pollin ja veröffentlicht. Ich habe dann einen Schlüssel-Code nach Runde 10 ausgegeben, und auch sonst noch ein paar Sachen geändert. Insbesondere schläft jetzt der Prozessor und wacht per Interrupt auf, wenn man die ON-Taste drückt. Im Schlaf benötigt der Prozessor dann < 1µA.

Die Tasten und LEDs wurden auch ersetzt. Und das ganze wurde dann in ein Kemo Gehäuse G090 eingebaut. Aber wie kriegt man da jetzt eine Batterie rein oder einen externen Batterieanschluss dran? Ich habe auf eBay günstig CR2477 mit Lötfahnen gefunden, wobei ich dann 2 Zellen zusammen mit 2 Dioden eingebaut habe (um auf < 5,5Volt zu kommen). Leider sinkt die Spannung aber dann auch schnell ab. Jetzt hängt da ein Spannungsstabilisator MCP1702-5002 drin und es funktioniert schon 3 Jahre. Ich sollte aber bald mal nach dem rechten schauen.

Fotos hab ich leider nicht, werde sie aber bei der nächsten Wartung mal machen.

Liebe Grüße
 
OP
F

Finckenbande

Geocacher
Hallo,

Das sind ja sehr schnell viele Antworten - also ist ja noch was los.

Mein Programmer ist der mySmartUSB - ich habe sowohl die 10- als auch die 6-pol Variante im Einsatz. Ich mag es einfach, auch im laufenden Betrieb noch einige Sachen ändern zu können. ISP ist also mein Freund. Für die Verwendung als Lochstreifen-kompatibel mag ich die 10-pol-Variante einfach lieber.

Ich hatte schon welche, die da einfach mit einem RC-Auto-Akku drangegangen sind, die haben je nach 3- oder sogar 4-Zellen Akku 11,1-14,4 V ...

@fogg: ich habe es noch nicht hinbekommen, irgendeine Station so mit Energie auszustatten, dass es mehr als ein Jahr hält. Irgendwie machen die Cacher immer etwas, was die Energie verbraucht ... Für mich heisst das für jede Station: Cacher bringt die Energie mit.

Bin gespannt, wie es weitergeht ...

Gruß
Finckenbanden_Papa
 

Riedleweg

Geocacher
Für meinen nächsten Cache plane ich die Versorgung mit Solarzellen. Basis sind billigste Garten-Solarleuchten. Die bekommt man im Krempelladen für unter 1€.

Zur Bereitstellung des Ruhestromes reicht es allemal. Interessantestes Teil neben der Solarzelle ist der Spannungswandler. Die Akkus können nichts taugen.

Die ersten Tests waren positiv, zwei Stück in Reihe, die Nutzspannung lag bei knappen 6V. Ist halt keine Gleichspannung die an den LEDs dieser Solarleuchten anliegt.
Aber zum Laden von AA-Akkus reicht es. Ich mus da noch etwas Hirnschmalz reinstecken.

Kommt natürlich drauf an wie der Strombedarf bei Aktivierung ist und wie man die "Logfrequenz" einschätzt aber wäre eine Alternative.
 

SammysHP

Moderator
Teammitglied
Spannungswandler aus LED Leuchten? Habe ich noch nie gesehen, zumindest nicht bei den billigen. Da steckt nur ein 4-pin Chip drin und mit dem hatte ich mich schonmal intensiv auseinander gesetzt. Der Laderegler besteht aus der Leistung der Solarzelle - mehr als ein paar mA kommen da selbst bei Sonnenschein nicht raus. Das ist perfekt für die Erhaltungsladung von klein NiMH-Zellen. Für die LED wird die Spannung mit dem Induktor etwas erhöht, das wars dann aber auch schon. Für kleine LED-Projekte sind diese Chips aber klasse (leider habe ich sie noch nicht als neu gefunden).
 

schatzi-s

Geowizard
Ich versuche es zu vermeiden, dass der Cacher Batterien mitbringt. Da sich Schalter auch nicht bewaehrt haben (die werden gerne "mal" vergessen...), bin ich Freund von energiesparenden Schaltungen und Deep Sleep. Bei einem Cache, bei dem Beides nicht praktikabel ist (Arduino Uno mit 2,4" Display), laeuft die Kombination: 18650 Powerbank und ein 160mA 5V Solarpanel. Je nach Geschick des Cachers dauert der Stunde 30-60 Minuten, der Stromverbrauch ist also immens. Da Akku und Display die Kaelte nicht gut vertragen, wird der Cache im Winter abgebaut und im Sommer reicht die Solarzelle, den Akku immer voll zu halten.
 

fogg

Geomaster
Ich habe auch alle meine Elektronikcaches so aufgebaut, dass man keine Stromversorgung mitbringen muss. Einer hat auch Solarzellen, die anderen laufen praktisch alle mit Lithium-Thionyl-Chlorid Zellen (3,6V) in AA-Größe. Die laufen auch bei Schnee und Eis und halten 10 Jahre. Wichtig ist, den Ruhestrom auf < 1µA zu drücken, was durch Power-Down-Sleep geht, wenn man nicht gerade ein Uno-Board benutzt. Man sollte nach dem Aufbau auch immer nochmal mit einem Multimeter kontrollieren, ob die Schaltung nicht doch mehr Strom zieht, da man leicht was vergisst, z.B. den AD-Wandler abzuschalten.
 

schatzi-s

Geowizard
Weise gesprochen mit dem Multimeter... Was hatte ich mich in der Vergangenheit gefreut, dass alles lief und dann kam mit dem Multimeter das boese Erwachen... .
Arduninos finde ich beim Entwickeln ganz praktisch, im Einsatz "mit knappem Strom" ziehe ich seit einer Weile den reinen Prozessor (nicht zwangslaeufig atMega) vor. Bisher reichte mir auch immer der interne Quarz, was dann den Aufbau und den Stromverbrauch deutlich vereinfacht/ verbessert hat. Man muss aber auch dabei sagen, dass meine Schaltungen auf Lochplatinen entstehen und ich immer neidisch auf Eure "richtigen" Platinen schaue... (man merkt mir meine Herkunft aus der Softwareentwicklung halt immer an ;-)

Eine 3,6 V Zelle habe ich auch schon verbaut :) In einem Cache von mir werkelt eine Zelle die Elektronik. Da dort aber auch ein Servo eingebaut ist, sind noch vier klassische AA Batterien verbaut. Ein Transistor sorgt dafuer, dass die nur zum Einsatz kommen, wenn sie gebraucht werden.
Da der Cache -leider- selten angegangen wird, halten die Batterien recht lang.
 

fogg

Geomaster
Mach ich genau so. Auf 'nem Pro Mini mit Stckbrett entwickeln und dann meist auf einen ATtiny84 rüber ziehen. Und auch ich bin eigentlich Softwareker, habe aber jetzt über die Jahre viel dazu gelernt. Insbesondere Eagle (davon gibt es ja eine freie Version) für den Platinenentwurf. Und dann setzt der Chinese oder auch OSH Park das für ganz kleines Geld in Platinen um (siehe Thread zu Platinenherstellern). Anders hätte ich das Zeugs nicht in die Petlinge bekommen.
 
Oben