Blogarchive

Ein Textadventure als Batch-Datei

Veröffentlicht am von 0 Kommentare

Mein Sohn (8) wühlt sich gerade durch sämtliche denkbaren und undenkbaren Programmier- und Scriptsprachen. Jetzt ist er bei Batch-Dateien (.bat) angekommen und löschert mich, was man damit machen kann.

Nun, heutzutage nicht mehr viel. Aber mir fiel in diesem Zusammenhang etwas ein, was ich vor fast 20 Jahren mal gemacht habe – ich hatte ein Textadventure geschrieben, das lediglich aus einer .bat-Datei bestand.

Technisch war das ziemlich interessant gelöst. Beim einfachen Ausführen der Datei wurde eine Reihe von weiteren .bat-Dateien erzeugt (nimm, benutz etc.), die dann die Befehle innerhalb des Spiels darstellten. Beim korrekten Beenden wurden diese Dateien dann wieder gelöscht. Damit man nicht immer wieder von vorn anfangen musste, gab es auch Passwort-Punkte.
Nur weißer Text auf Schwarz war mir aber zu langweilig. Deshalb habe ich die Möglichkeiten der ansi.sys genutzt und alles ein wenig bunter gemacht. 
Die Geschichte selbst ist eher einfach und schnell gespielt. Ein Teddy wird gestohlen und muss vor bösen Ganoven gerettet werden. Aber ein bisschen stolz bin ich auch heute noch auf dieses kleine Textdokument, das man auch ausführen konnte.

Deshalb habe ich meine alten Backups durchstöbert und siehe da: ich hab’s wieder gefunden. Natürlich habe ich es gleich ausprobiert. Ging natürlich nicht, zumindest nicht richtig. 
Ansi.sys geht schon lange nicht mehr. Und auch Ansi.com als Ersatz kann man vergessen, gibt es nicht als 64bit-Version.
Aber eine Suche brachte ansicon zutage. Ein kleines Tool, das die Commandozeile mit ansi-features startet und das es auch in 64bit gibt. 

Und, HURRA, damit läuft es noch*. 

Lust, es mal auszuprobieren? Hier ist es.

* Ein kleines Problem gibt es: die Escape-Sequenz ESC[=valueh wird nicht mehr unterstützt. Naja, fällt kaum auf.

Update: Sohnemann hat es durchgespielt 🙂 und dabei festgestellt, dass die Eingabeaufforderung von Windows 10 eingebaute ANSI-Unterstützung hat (Jippie!).
ansicon ist also unter Windows 10 nicht nötig.

Kategorie: Software

Bilder zur Vitrinenbeleuchtung

Veröffentlicht am von 0 Kommentare

Zum Schluss noch ein paar Bilder und ein kurzes Video.

Die Hauptplatine:

    

Die Touch-Platine:

   

Im Gehäuse:

Video der Funktion:

Kategorie: Vitrinenbeleuchtung

Das Steuergerät

Veröffentlicht am von 0 Kommentare

Die Schaltung des Steuergerätes für meine Vitrinenbeleuchtung ist sehr einfach. Herzstück ist der Microcontroller MSP430G2553. Ein Linearregler erzeugt die nötigen 3,3 V. Die Platine verfügt über 2 Anschlüsse für LED-Streifen, die von einem MOSFET getrieben werden. Die Helligkeitsinformation wird mit einem Fotowiderstand an den ADC des Controllers weitergegeben und dort ausgewertet. Die meisten I/O des Controllers werden für die 5 kapazitiven Schaltflächen und die Feedback-LEDs benötigt.

Das Dimmen erfolgt per PWM.

Belegung der 5 Schaltflächen:

  • Cap_Middle: Beleuchtung manuell An/aus (1s berührt), Rücksetzen der Einstellungen (2s berührt), Speichern der Einstellungen (3s berührt); die Rückmeldung erfolgt über die umliegenden LEDs
  • Cap_Up: Heller
  • Cap_Down: Dunkler
  • Cap_Right: Obere Einschalt-Schwelle; Ein Berühren übernimmt die aktuelle Helligkeit
  • Cap_Left: Untere Einschalt-Schwelle; Ein Berühren übernimmt die aktuelle Helligkeit

 

    

Bilder zur Vitrinenbeleuchtung

Kategorie: Vitrinenbeleuchtung

Nachtrag

Veröffentlicht am von 0 Kommentare

Das hätte an den Anfang gehört:

Es gibt noch einen Grund, warum ich so heiß auf den Schaufelradbagger war. Ich wohne in einer ehemaligen Tagebaugegend und direkt bei meinem Wohnort steht ein original Schaufelradbagger mitten auf dem Feld.

   Schaufelradbagger Typ SRs 1500

Panoramablick von links:

  • Lausitzring (Eurospeedway) mit 6,5MW Windrad /ca. 200m hoch, dahinter ein großer Windpark (> 90 MW)
  • Schaufelradbagger SRs 1500
  • Solar Park (150 MW)
  • Ganz rechts am Horizont (ganz klein) Braukohlekraftwerk Schwarze Pumpe (1,6 GW)

 

Und: Ich habe einen Blog-Eintrag bei hackaday.com bekommen. 🙂

Kategorie: Schaufelradbagger

Konzept der Vitrinenbeleuchtung

Veröffentlicht am von 0 Kommentare

Ich möchte eine Lösung für meine Vitrinenbeleuchtung haben, die  klein, einfach, unauffällig, aber schick ist.

Es sollen 2 Vitrinen beleuchtet werden. In den Vitrinen sind bereits LED-Streifen verbaut, einmal 2 und einmal 3. Die Streifen werden mit 12 V betrieben. Die Leistung ist ca. 3Wmax pro Streifen. Bei 5 Streifen sind das also 1,25 A, das ist nicht so viel. Außerdem ist das viel zu hell und wird wohl meist gedimmt betrieben werden.

Spannungsversorgung ist ein 12 V-Steckernetzteil. Da selbst etwas zu bauen, ist nicht nötig.

Da ich gern auch mal andere Sachen ausprobiere, habe ich keinen Arduino genommen, sondern einen TI MC vom Typ MSP430G2553. Für die Entwicklung habe ich mir das Launchpad MSP-EXP430G2 besorgt, das die Programmierschnittstelle für die spätere eigene Platine gleich mitbringt. Gleichzeitig wollte ich auf Knöpfe verzichten und fand die Idee von kapazitiven Schaltflächen sehr elegant. Dafür gibt es passend zum Launchpad den MSP430 Capacitive Touch BoosterPack.

Es gibt Code Composer Studio builds für Windows, MacOS and Linux, allerdings wird das MSP-EXP430G2 in MacOS nicht unterstützt, deshalb musste ich die Windows-Version nehmen 🙁

Das Steuergerät

Kategorie: Vitrinenbeleuchtung

Automatische Vitrinenbeleuchtung

Veröffentlicht am von 0 Kommentare

Vielleicht kennt Ihr das ja auch: Man hat sich endlich für eine neue Wohnzimmermöblierung entschieden und vielleicht ist da auch eine Glasvitrine dabei. Wenn die jetzt noch beleuchtet wäre … (ich weiß, das ist altmodisch (oder eben Geschmackssache)).
Sowas gibt es schon lange. Problem dabei: mit normalen Glühlampen ging das schnell ins Geld und wenn man die Beleuchtung manuell anschalten muss, macht man das sowieso nie.
Heute verwendet man LED-Leisten. Ein Problem bleibt: manuell anschalten ist unkomfortabel.
Vor diesem Problem stand ich vor einiger Zeit.
Die verfügbaren Automatiken waren teuer und/oder Mist und machten sowieso nicht das, was ich wollte.
Ich wollte, dass ich mich nach dem ersten Einschalten nie wieder um die Beleuchtung kümmern muss, wenn ich nicht will.

Folgende Eigenschaften waren mir wichtig:

  • Beleuchtung dimmbar
  • Beleuchtung ist aus, wenn es draussen hell ist
  • Beleuchtung ist aus, wenn es Nacht und im Zimmer dunkel ist
  • Die Schwellen für das Ein- und Ausschalten sind einstellbar
  • Ich kann die Einstellungen abspeichern (optional)

 

Die nächsten Beiträge zeigen, wie ich die Herausforderung gelöst habe.

Konzept der Vitrinenbeleuchtung

Kategorie: Vitrinenbeleuchtung

Zuletzt: es funktioniert!

Veröffentlicht am von 4 Kommentare

Zuletzt noch zwei kurze Videos:

Video 1: Starten und Abschalten des Raspberry Pi 3 (ca. 56 s)

 

Video 2: Funktionsvorführung (ca. 3 min)

 

Nachtrag

Kategorie: Schaufelradbagger

Teil 3: Programm und Ablauf

Veröffentlicht am von 0 Kommentare

Wie bereits gesagt, kommt als Herz ein Raspberry Pi 3 zum Einsatz. Das integrierte Bluetooth-Modul ist praktisch und lässt sich schön mit einer Wiimote koppeln.
Betriebssystem ist das aktuelle Raspbian, als Python-Version kommt 2.x zum Einsatz, da die verwendete Wiimote-Bibliothek mit der Version 3.x nicht funktioniert.
Ah ja, eine Anleitung, wie man die Bibliothek installiert und wie man die Wiimote koppelt, gibt es z.B. auf dieser Seite. Beim Pi 3 kann man sich das Installieren eines Bluetooth-Dongles natürlich sparen.

Hier ein Ausschnitt des Python-Programms:

  while True:

    buttons = wii.state['buttons']

  #Achtung: WiiMote wird quer gehalten, deshalb RIGHT --> Vorwaerts
    if(buttons & cwiid.BTN_RIGHT):
      if(buttons & cwiid.BTN_DOWN):     #DOWN --> rightfor
        Drive_rightfor()
      elif(buttons & cwiid.BTN_UP):     #UP --> leftfor
        Drive_leftfor()
      else:
        Drive_forward()      
    elif(buttons & cwiid.BTN_LEFT):     #LEFT --> Rueckwaerts
      if(buttons & cwiid.BTN_DOWN):     #DOWN --> rightback
        Drive_rightback()
      elif(buttons & cwiid.BTN_UP):     #UP --> leftback
        Drive_leftback()
      else:      
        Drive_back()
    else:
      if(buttons & cwiid.BTN_UP):       #UP --> leftturn
        Drive_leftturn()
      elif(buttons &cwiid.BTN_DOWN):    #DOWN --> rightturn
        Drive_rightturn()
      else:
        Drive_stop()
    time.sleep(0.1)

#Turm drehen mit 1 und 2
    if(buttons & cwiid.BTN_1):
      Turn_left()
    elif(buttons & cwiid.BTN_2):
      Turn_right()
    else:
      Turn_stop()
    time.sleep(0.1)

#Turm heben mit + und -
    if(buttons & cwiid.BTN_PLUS):
      Lift_up()
    elif(buttons & cwiid.BTN_MINUS):
      Lift_down()
    else:
      Lift_stop()
    time.sleep(0.1)

#Band und Bagger
    if(buttons & cwiid.BTN_A):
      if(pressed == '0' and run == 'stop'):
        Band_run()
        pressed = 'A'
      elif(pressed == '0' and run == 'run'):
        Band_stop()
        pressed = 'A'
    else:
      pressed = '0'
    
    time.sleep(0.1)

....

Und hier die Belegung der Wiimote:

Da natürlich kein Monitor und keine Tastatur am Pi stecken wird, muss das Programm automatisch starten. Die Status-LED, die immer blau leuchtet, wenn Spannung anliegt, blinkt kurz rot, wenn die Wiimote gekoppelt werden kann (gleichzeitiges Drücken von 1 und 2). Wenn die Kopplung erfolgreich ist, leuchtet die grüne LED zusätzlich. 
Wenn die Kopplung nicht erfolgreich ist, beendet sich das Programm, der Pi bleibt aber an. 
Nach erfolgter Kopplung kann man mit dem Bagger spielen.
Hat man keine Lust mehr, trennt man die Wiimote mit dem Home-Button. Dann fährt auch der Pi herunter. Hält man den B-Knopf (auf der Rückseite) gedrückt, während man Home drückt, trennt man nur die Verbindung. Der Pi fährt aber nicht runter.

Zuletzt: Es funktioniert

Kategorie: Schaufelradbagger

Teil 2: Anpassplatine

Veröffentlicht am von 0 Kommentare

Bevor ich zur Platine selbst komme, ein paar Worte zum Akku. 

Als Akku kommt eine Powerbank zum Einsatz. am besten eine mit 2 USB-Anschlüssen, einen für den Raspberry Pi und einen für die Motoren. Der Formfaktor sollte so sein, dass er gut einbaubar ist. Ich hatte mich für einen flachen quaderförmigen Typ entschieden, der einen High-Power-Output hat. Das ist wichtig, da die Motoren durchaus einen relevanten Strom ziehen (Details kann man sich googeln). Leider reichte auch das nicht aus. Der Akku reagierte nämlich sehr empfindlich auf den Anlaufstrom der Motoren, d.h., die Überstromsicherung schaltete oft den Akku aus, was ziemlich lästig war. Zum Glück habe ich dann noch einen anderen Akku mit ähnlichen Abmessungen und etwas mehr nomineller Strombelastbarkeit gefunden. Der hier ist es, wie lange es den allerdings gibt, wer weiß …

Ich brauche:

  • 4 x Motoransteuerung mit Drehrichtungswechsel für die 4 M-Motoren
  • 1 x Motoransteuerung einfach für den XL-Motor
  • Step-Up-Converter zur Bereitstellung der 9V aus 5V

Für die Motoransteuerung der M-Motoren verwende ich den L293D, ein robuster bewährter DC-Motor-Treiber, die Version mit den integrierten Dioden.
Da der XL-Motor keine Drehrichtungsumkehr braucht, reicht hier ein Relais aus, ich habe ein DIL14-Reed-Relais (Typ 3570-1210-053 bei Conrad) mit 0,5A Schaltstrom genommen.
Der Step-Up-Converter ist ein LM2577-ADJ, robuste Technik, leicht überdimensioniert, da gibts keine Probleme.
Dazu noch eine RGB-Status-LED, fertig.

Als Gehäuse für den Raspberry Pi habe ich ein Lego-kompatibles Teil genommen. Die Platine soll genau drauf passen, damit sie mit Legoteilen eingebaut werden kann. Die folgenden Bilder zeigen, wie das aussieht.

Teil 3: Programm und Ablauf

Kategorie: Schaufelradbagger

Teil 1: der Umbau

Veröffentlicht am von 0 Kommentare

Wie bereits erwähnt, war das Ziel, mit möglichst wenig Änderungen auszukommen. Trotzdem geht es nicht ohne zusätzliche Teile.

Die 4 M-Motoren sowie die Zuleitungen habe ich direkt bei Lego.com bestellt. Alle anderen Teile gab es bei KieselBrick über Brickscout, kann ich nur empfehlen.

Mit einer genauen Liste kann ich leider nicht dienen, da ich die Teile nach Gefühl ausgesucht habe und auch viele Teile wieder verwenden konnte, die durch den Umbau erstmal übrig geblieben waren.

1: Das Fahrwerk

Das Original fährt, aber nur geradeaus, lenken ist nicht. Außerdem sitzt der Motor oben im Hauptgetriebe. Deshalb habe ich unten 2 M-Motoren eingebaut, die getrennt ansteuerbar sind. Die Inspiration habe ich mir hier geholt, letztendlich habe ich aber meine eigene Variante gebaut, die mir etwas einfacher scheint.

Die Zuleitung zu den Motoren habe ich über die Drehachse zentral geführt, so dass ein Drehen des Turms weiterhin möglich ist.

2: Der Turm

Auch das Drehen des Turms wird im Original über das Zentralgetriebe mit dem XL-Motor gelöst. Ich habe die Verbindung zwischen Getriebe und Gestänge getrennt and an diese Stelle einen M-Motor mit Schneckenrad gesetzt.

 

3: Schaufelrad

Das Heben und Senken des Schaufelrads ist im Original nur manuell möglich. Aber auch hier kann man sehr einfach einen M-Motor mit Schnecke einsetzen.

4: Rad und Förderband

Bleibt der Antrieb des Schaufelrades und der Förderbänder: Das bleibt einfach, wie es ist. Der XL-Motor macht das prima. Den letzten Freiheitsgrad, das Drehen des kleinen Förderbandes, habe ich auch unverändert gelassen.

Teil 2: Anpassplatine

Kategorie: Schaufelradbagger