Ultimate Machine
Vorwort
Claude Shannons Namen verbinden "Techies" vor allem mit zwei Schöpfungen: dem Nyquist-Shannon-Theorem und der Ultimate Machine.
Unvorstellbar, dass der heutige Wissenschaftsbetrieb einen wie ihn
hervorbringen könnte. Neben seinen grundlegenden Arbeiten zur
theoretischen Nachrichtentechnik und zur IT frönte er exzentrischen
Beschäftigungen; Wikipedia erwähnt nicht nur seine Gaukeleien und
skurrilen Apparate, sondern auch die Legende, nach der er in den Bell
Labs auf einem Einrad mit Bällen jonglierend auf den Fluren
herumgefahren sei.
Seine Wissenschafts-Nachfahren müssen sich hingegen mit einem
System arrangieren, das von BWLern dominiert wird: wissenschaftliche
Reputation wird als Anzahl der Veröffentlichungen (natürlich nur die in
exzellent "gerankten" Wissenschaftsmagazinen) und Anzahl der
Konferenzvorträge bemessen, und statt das zu erforschen, was einen
interessiert, muss man Geld besorgen, indem man wohlklingende Anträge
auf irgendwelche BMWi- (das ist nicht etwa das
Wissenschaftsministerium, sondern das Wirtschaftsministerium) oder
EU-Forschungsrahmen-Ausschreibungen stellt und auf den Zuschlag hofft.
Das funktioniert also nach der klassischen BWL-Zahlenreligion:
man schafft ein simplifiziertes Modell der komplexen Realität, indem
man sie auf ein paar leicht messbare Teilaspekte reduziert, optimiert
nur danach das System und erwartet ernsthaft, dass dabei etwas
brauchbares herauskommt. Ähnlicher betrieblicher Quatsch, der aber
langsam aus der Mode kommt, ist das Führen mit Zielvereinbarungen.
Wahrscheinlich könnte man damit eine Firma zugrunde richten, wenn es
nicht genügend Leute gäbe, die eben nicht ihre Arbeit auf diese
isolierten Ziele optimieren, sondern das tun, was in einem komplexen
betrieblichen Umfeld wirklich wichtig und nötig ist.
Aber genug polemisiert - die Ultimate Machine wäre jedenfalls
als Nebenprodukt eines exzentrischen Wissenschaftlers nur schwer
vorstellbar. Vielleicht hätte sie heutzutage jemand als
Kickstarter-Projekt aufgelegt.
Kauf oder Nachbau
Shannons Ultimate Machine war ein reines Elektromechanikprodukt. Die kleine Firma Weidmann Elektronik
hat den Nachbau drastisch durch Einsatz von Modellbau-Servos und
ATtiny-Mikrocontrollern vereinfacht. Die Bausätze sind auch von Leuten,
die nur zwei linke Hände haben, gut aufzubauen und ersparen das Suchen
nach einem geeigneten Gehäuse und das Herumprobieren mit der
mechanischen Anordnung der Komponenten. Leider ist die Firmware auf der
mitgelieferten SMD-Platine ziemlich lieblos programmiert: betätigt man
den Einschalter, wartet der ATtiny etwa eine Sekunde, fährt dann die
"Hand" mit Servo-Maximalgeschwindigkeit aus und nach Umlegen des
Kippschalters mit Maximalgeschwindigkeit wieder ein ("ritsch-ratsch").
Der Mikrocontroller sendet also lediglich die beiden Endwerte
an den Servo, und der Servo versucht, sie möglichst rasch zu erreichen.
Ich habe die Firmware so abgewandelt, dass dem Servo jeweils eine Rampe
vorgegeben wird, die er langsam abfährt (das wirkt dann, wie man im
englischen so schön bildlich ausdrückt, "much more creepy") - und da
noch massig Platz im Flash frei war, klopft die Maschine vorher ein
paar mal "verärgert" gegen den Deckel, bevor die Hand ausgefahren wird.
Die Hardware-Schaltung lässt sich ebenfalls verbessern.
Gespeist wird die Schaltung aus 4 AAA-Batterien, die in frischem
Zustand 6V "bringen". Der Servo verträgt bis zu 6V und wird unter 4V
recht kraftlos. Der ATtiny sollte nur mit max. 5,5V betrieben werden,
funktioniert aber auch noch mit weitaus weniger als 4V.
Die Betriebsspannung für den Servo wird in der
Originalschaltung durch einen NPN-Transistor in Emitterfolger-Schaltung
geschaltet, liegt also schon mal 0,5 - 0,7V unter der Betriebsspannung
des Attiny. Die Betriebsspannung des ATtiny muss über eine Diode in
Durchlassrichtung auf ca. 5,5V herabgesetzt werden. Am Servo kommen
also auch bei frischen Batterien nur 5V an, und wenn die Batterien auf
5V abgesunken sind (Wegwerfbatterien sind dann bei weitem noch nicht
entladen), sind es nur noch 4V.
Besser ist es, die Servo-Betriebsspannung mit einem
PNP-Transistor zu schalten, über den (im durchgeschalteten Zustand) nur
einige 10 mV abfallen. Damit die Software zu beiden Hardware-Varianten
passt, wird das Signal des Mikrocontrollers durch einen
Kleinleistungs-NPN-Transisor invertiert.
Da der Servo hohe Stromspitzen "zieht", muss man die
Betriebsspannung mit einem grossen Elko abblocken. Fährt der Servo die
Rampen nicht sauber ab, war der Elko zu klein ;-) .
Der geänderte Schaltplan und das Streifenraster-Platinenlayout (Ansicht von der Oberseite):
Da nun schon so viel geändert war, habe ich noch versucht, das
komplette Gerät aus einem zufällig vorhandenen Gehäuse (bestehend aus
zwei billigen symmetrischen Halbschalengehäusen von Reichelt (2 Stück
SD 20 SW HALB) nachzubauen. Für den Schwenkhebel (die "Hand") musste
Platinenmaterial herhalten. Das Resultat sieht ziemlich jämmerlich aus,
funktioniert aber.
Als verbesserungswürdig erwies sich:
- das Gehäuse ist etwas zu klein, es passten nur noch AAA-Zellen statt Mignonbatterien
- durch das Teilen des oberen Deckels rasten die beiden feststehenden Teile nicht mehr gut ineinander (Lösung: Universalkleber)
- das Scharnier für den schwenkbaren Deckel ist ein übles Provisorium (schwarzes Isolierband)
- Der Servo ist falsch positioniert (Lösung: Hebel schmaler gefeilt, damit er nicht gegen den Deckelrand fährt)
Die Abmessungen des Hebels kann man anhand des
Platinenmaterial-Lochrasters abzählen. Die Anordnung von Kippschalter
und Servo ist recht kritisch - einerseits muss der verborgene Teil des
Schalters recht nah an die Servoscheibe rücken, ohne sie zu berühren,
andererseits muss der Servo so nah an die Deckel-Sägekante, dass der
Hebel den Kippschalter umschalten kann, ohne zuvor an die
Deckel-Sägekante zu stossen.
Ich hatte nur einen Miniatur-Kippschalter in der Bastelkiste;
besser geeignet wäre ein Micro-Kippschalter gewesen, weil der wegen
seines kleineren Gehäuses etwas näher an der Servoscheibe plaziert
werden kann.
Der Hebel muss oben sorgfältig geglättet sein, damit er bei
der Rückwärtsfahrt nicht an der Kante des Klappdeckels hängen bleibt.
Der Servo ist nicht direkt in den Deckel geklebt, dazwischen sitzt ein
12mm hohes Holzklötzchen.
Sourcecode
Vermutlich müssen in der Software die Endwerte der Servo-Rampe
an den verwendeten Servo und die Geometrie der Mechanik angepasst
werden. In der Originalsoftware, deren Quellcode man bei
Weidmann-Elektronik findet, muss man die Änderung an mehreren Stellen
vornehmen, ich habe daher die Konstanten servo_min und Servo_max
eingebaut, damit man nur an einer Stelle ändern muss. Weitere
Änderungen der Software sind im Kommentar-Kopf des Bascom-Files
vermerkt:
Download des Bascom-Quelltextes: 0616-um.zip
' Useless machine / expert servo
' Aenderungen gegenüber Weidmann-Originalsoftware:
' Servo verlangsamt (faehrt Rampe ab)
' Pulse mit "Pulseout" erzeugt (bei kurzen Zeiten genauer als Wait)
' Konstanten Servo_min und Servo_max definiert
' Da noch Platz im Flash war, "rumpelt" die Maschine erst zwei Mal,
' klappert dann drei mal mit dem Deckel und schaltet dann erst den Kippschalter
' Danach "grummelt" sie noch mal
' Compiler: BASCOM 2.0.7.5 Demo
$Regfile = "Attiny13.dat" ' specify the used micro
$Crystal = 1200000 ' used crystal frequency
$Hwstack = 32 ' default use 32 for the hardware stack
$Swstack = 8 ' default use 10 for the SW stack
$Framesize = 8 ' default use 40 for the frame space
Config Portb.2 = Output 'Servo Signal
Config Portb.4 = Output 'Servo AN/AUS
Portb.2 = 0 'PIN initialisieren (OFF)
Portb.4 = 0 'PIN initialisieren (OFF)
Portb.1 = 1 'Internen Pullup EIN
Didr0 = &B00011101 'ungenutzte Digitaleingaenge stillegen
Config Int0 = Low Level 'Int0 auf Low Level konfigurieren
Enable Interrupts 'Einschalten der Interrupts
Enable Int0 'Einschalten Von Interrupt Int0
Dim I As Word
Dim K As Word
Const Servo_min = 200 ' Servo-Ruhestellung
Const Servo_max = 540 ' Max. Servo-Auslenkung
Const Servo_rumble = 220 ' Servobewegung ohne Heben des Deckels
Const Servo_knock = 260 ' Servobewegung mit Heben des Deckels
Do
Disable Int0 'Ausschalten Von Interrupt Int0
If Pinb.1 = 0 Then 'Prüfen ob Kippschalter ON ist
Wait 1 '1 Sek warten
If Pinb.1 = 0 Then 'Prüfen ob Kippschalter ON ist
Portb.4 = 1 'Servo VCC über Relais einschalten
For K = 1 To 2 ' zwei Mal Rumpeln ohne Heben des Deckels
For I = 1 to 10
Pulseout Portb, 2, Servo_rumble
Waitms 15
Next
For I = 1 to 10
Pulseout Portb, 2, Servo_min
Waitms 15
Next
Next
Wait 1 '1 Sek warten
For K = 1 To 3 ' drei Mal Rumpeln mit Heben des Deckels
For I = 1 to 10
Pulseout Portb, 2, Servo_knock
Waitms 15
Next
For I = 1 to 10
Pulseout Portb, 2, Servo_min
Waitms 15
Next
Next
Wait 1 '1 Sek warten
For I = Servo_min to Servo_max Step 5
Pulseout Portb, 2, I
Waitms 20
If Pinb.1 = 1 Then 'Prüfen ob Kippschalter OFF ist und
I = I + 10 'Sicher gehen, dass der Kippschalter nicht halb-aus ist
Pulseout Portb, 2, I 'Sicher gehen, dass der Kippschalter nicht halb-aus ist
Exit For 'Schleife Verlassen
End If
Next
For K = I to Servo_min Step -5 'Arm hineinfahren
Pulseout Portb, 2, K
Waitms 20
Next
Wait 1
For I = 1 to 10 ' noch mal grummeln
Pulseout Portb, 2, Servo_rumble
Waitms 20
Next
For I = 1 to 10
Pulseout Portb, 2, Servo_min
Waitms 25
Next
Portb.4 = 0 'Servo VCC über Relais ausschalten
End If
End If
If Pinb.1 = 1 Then 'Prüfen ob Kippschalter OFF ist
Enable Int0 'Einschalten Von Interrupt Int0
Powerdown 'Controller einschlafen lassen
End If
Loop
End