Ultimate Machine       

von Ralf Beesner                  
Elektronik-Labor   Projekte   AVR 



 
Video: https://youtu.be/IUS_OKWRA4k

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



Elektronik-Labor   Projekte   AVR