Montag, 30. Dezember 2013

Chinesischer AVR-ISP

Im Rahmen des chinesischen Advents-Kalenders habe ich u.a. eine Tüte voll USB-AVRISP Adapter gekauft. Im Gegensatz zu den meisten Programmern, die man in der Bucht findet steckt dieser in einem soliden und sehr schlanken Metallgehäuse und preiswert war er obendrein. Da er extrem klein ist, fand ich ihn perfekt als Begleiter, wenn man mal zum Basteln "on the road" ist. Hier ein Familienfoto und eine Nahaufnahme mit Flachbandkabel:

 
Also gleich mal anstecken:

[283553.080099] usb 5-2: new low-speed USB device number 2 using uhci_hcd
[283553.253147] usb 5-2: New USB device found, idVendor=03eb, idProduct=c8b4
[283553.253151] usb 5-2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[283553.253154] usb 5-2: Product: USBHID
[283553.253156] usb 5-2: Manufacturer: zhifengsoft
[283554.564881] generic-usb 0003:03EB:C8B4.0001: hiddev0,hidraw0: USB HID v1.01 Device [zhifengsoft USBHID] on usb-0000:00:1d.0-2/input0
[283554.564939] usbcore: registered new interface driver usbhid
[283554.564944] usbhid: USB HID core driver


Hm - ein HID device? Ich hatte jetzt eher mit ttyUSB oder sowas gerechnet - merkwürdig. Laut eBay Verkäufer wird das Ding von Progisp 1.72 unterstützt. Davon hab ich noch nie gehört und eine Google-Suche führt mich auf diverse, in elaboriertem Chinglish verfasste Seiten mit wenig vielversprechenden Screenshots voller fernöstlicher Schriftzeichen. Sowas will ich nicht haben, sondern meinen geliebten avrdude! Also weitersuchen. Die Beschreibung sagt etwas von USBasp - den kennt avrdude. Also testen wir das mal:

$ avrdude -p m328p -c usbasp -U flash:r:foo.dat:i
avrdude: error: could not find USB device "USBasp" with vid=0x16c0 pid=0x5dc

avrdude done.  Thank you.


Das war wohl nix - offenbar sollte der USBasp die ID 16c0:05dc haben und nicht 03eb:c8b4 wie mein chinesisches Kleinod (Typ: MX-USBISP-V3.00, 2013-03-15 laut silkscreen). Also mal nach der ID googeln. Aha - ich bin nicht allein mit meinem Problem: Das Ding ist zwar hardwaremäßig fast ein USBasp, aber das weiß seine Firmware nicht. Zu allem Überfluss kommt die originale USBasp Firmware nicht mit dieser Hardware klar - grumpf!

Also erst mal aufmachen - nur wie? So:

Einfach die Metallhülse in Richtung USB-Stecker schieben. Von innen bietet sich dann folgendes Bild:

Nach einiger Suche hab ich dann eine Lösung gefunden: im GreenPhotons-Blog von [uwezi] fand sich ein Eintrag zu genau dem Ding. Offenbar braucht die USBasp Firmware einen kleinen Tweak, um auf diesem Progammer zu laufen. Auf obiger Seite kann man auch eine bereits gepatchte Firmware herunterladen, falls man zu feige zum compilieren ist. Das folgende ist nicht auf meinem Mist gewachsen, ich gebe es aber hier wieder, damit zukünftige Leidensgenossen einen weiteren Anlaufpunkt bekommen:
  1. Zunächst besorge man sich die USBasp Firmware
  2. Dann muß diese leicht modifiziert werden:
    in main.c finden sich die Zeilen

    int main(void) {
      uchar i, j;

      /* no pullups on USB and ISP pins */
      PORTD = 0;
      PORTB = 0;
      /* all outputs except PD2 = INT0 */
      DDRD = ~(1 << 2);


    die letzte Zeile muss so verändert werden:
      DDRD = 0x00;
  3. Compilieren
  4. Metallgehäuse abziehen
  5. Auf der Unterseite der Platine finden sich zwei Kontakte, die mit "-> up <-" gekennzeichnet sind. Diese mit einem Stück Schaltdraht überbrücken. Nun ist das Ding im self-programming mode
  6. Mit einem anderen ISP-Programmer die neue Firmware flashen z.B.:
    avrdude -p m8 -c stk500v2 -P /dev/ttyACM0 \\
      -U flash:w:20130212_mega8_usbisp.hex:i
  7. Schaltdraht-Brücke raus, Gehäuse drauf
  8. Fertig
 Nun meldet sich das gute Stück korrekt als USBasp:

[285378.660075] usb 5-2: new low-speed USB device number 3 using uhci_hcd
[285378.832112] usb 5-2: New USB device found, idVendor=16c0, idProduct=05dc
[285378.832122] usb 5-2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[285378.832129] usb 5-2: Product: USBasp
[285378.832135] usb 5-2: Manufacturer: www.fischl.de


Und auch avrdude ist nun zufrieden:

avrdude -p m328p -c usbasp -U flash:r:foo.dat:i
avrdude: AVR device initialized and ready to accept instructions

Reading |###################################| 100% 0.01s

avrdude: Device signature = 0x1e950f
avrdude: reading flash memory:

Reading |###################################| 100% 5.26s

avrdude: writing output file "foo.dat"
avrdude: safemode: Fuses OK
avrdude done.  Thank you.


Sehr gut! Und zuguterletzt sei noch erwähnt, dass man angeblich auch mit unmodifizierter USBasp Firmware arbeiten kann, wenn man ein paar Lötbrücken vom Board entfernt - ich fand die Firmware-Modifikation aber eleganter.

Einsatz mit AtmelStudio

Im Gegensatz zu avrdude unterstützt AtmelStudio den USBasp nicht. Das heißt aber nicht, das der Programmer nicht dennoch zum Einsatz kommen kann! Zwei Lösungsmöglichkeiten habe ich gefunden:
  1. Eine stk500 kompatible Firmware auf den Programmer flashen (z.B. die von Christian Ulrich).
  2. avrdude unter AtmelStudio als externen Programmer einbinden. Auf microcontroller.net hat user [eduardo] hat eine Anleitung dazu verfasst.

Fazit

Ein netter kleiner Programmieradapter, der nach obiger Firmware-Transplantation durchaus empfehlenswert ist.

Sonntag, 22. Dezember 2013

Chinesischer Adventskalender

Es ist mal wieder so weit: Weihnachten naht! Glühwein und Lebkuchen überall und die Menschen mit den beiden X-Chromosomen wollen ständig auf Weihnachtsmärkte gehen. Aber es gibt auch Adventstraditionen für Nerds - bzw. wenn es sie nicht gibt muß man sie halt erfinden und das habe ich getan!

Ladies & Gentlemen voller Stolz präsentiere ich den chinesischen Adventskalender für Geeks. Und das geht so: So ca ab Anfang/Mitte November jeden Tag auf Ebay gehen und interessante Kleinigkeiten bei fernöstlichen Anbietern schießen. Z.B. Header-Pins, Jumper-Wires, USB2TTL Adapter, Mikrocontroller-Boards, ICSP-Adapter, Flachbandkabel, Wannensteckern, Crimpzangen, etc. etc. Und ab Anfang Dezember kommt dann fast jeden Tag der Postbote mit seinem Schlitten und man darf wieder ein Türchen Luftpolsterumschlägchen öffnen – große Freude!

Als Hintergrundmusik empfehle ich das beliebte Weihnachtslied "Stille Bucht".

Freitag, 6. September 2013

Defekte USB-Festplatte heilmachen

Heute habe ich mal wieder eine kleine Repair Story. Ein Bekannter hat mir eine defekte Samsung USB-Festplatte gegeben damit ich mal schaue, ob sie noch zu reparieren ist bzw. die Daten zu retten sind.

Schon von außen konnte man das Problem schnell erkennen: die mini USB Buchse war abgerissen und zwar gründlich – die seitlichen Lötstellen hatten die Massefläche mitgenommen und die Pins hingen krumm und schief ohne Gehäuse mehr oder weniger lose an ihren Lötstellen bzw. waren komplett abgebrochen. Das wird eine leichte Datenrettung dachte ich mir. Einfach die Platte aus dem USB Gehäuse nehmen, über SATA anschließen, Daten rüberziehen und ggf. ein neues USB-Gehäuse empfehlen – falsch gedacht! Meine Überraschung war nicht gering, als ich das Gehäuse geöffnet hatte: Da war kein SATA Anschluss – diese Platte hat wirklich selbst einen USB-Anschluss – direkt auf der Platine. Sowas hatte ich bisher noch nicht gesehen. Also doch versuchen, die abgerissenen USB-Buchse zu ersetzen. Als erstes habe ich mir mal eine neue Buchse besorgt, denn die abgerissene war definitv hinüber, so dass an wieder anlöten nicht zu denken war. Hier zunächst mal ein Bild der Unfallstelle:
Das sieht echt übel aus – oder? Als erstes habe ich mal die Platine ausgebaut, um vernünftig an den Operationsbereich heranzukommen und die Pin-Reste abgelötet, das Ganze etwas entfettet etc.
Und hier mein Reparatur-Zubehör – neue Buchse und Kraftkleber:
Also erstmal mit gaaaaanz wenig Lötzinn, einem Schluck Flussmittel und ruhiger Hand die neue Buchse auflöten. Echt fummelig! Und wirklich stabil ist das auch nicht, denn normalerweise wird so eine Buchse von den 4 Masse-Lötaugen gehalten. Und da die Massepads ja weg sind geht das nicht mehr, was zudem zur interessanten Frage führt, wie ich da wieder Masse drauf bekomme.
Letztlich habe ich mit Skalpell und Glasfaserradierer ein Stück Massefläche in der Nähe freigelegt und mit einem echt hässlichen Lötzinn-Blob angeschlossen.
Platine wieder einbauen und nun kommt also der spannende Moment! Gaaanz vorsichtig ein USB-Kabel anstecken, möglichst ohne diese fragile Buchsenkonstruktion gleich wieder abzureißen, an den Computer anschließen und hoffen, dass dessen USB-Schnittstelle nun nicht gebraten wird. Also sicherheitshalber über einen billigen USB-Hub...
Und siehe da – die Platte meldet sich!

[12023260.948923] usb 1-1.3: new high-speed USB device number 33 using ehci_hcd
[12023261.045519] usb 1-1.3: New USB device found, idVendor=04e8, idProduct=1f0a
[12023261.045529] usb 1-1.3: New USB device strings: Mfr=1, Product=11, SerialNumber=3
[12023261.045537] usb 1-1.3: Product: Samsung S2 Portable
[12023261.045543] usb 1-1.3: Manufacturer: JMicron
[12023261.045549] usb 1-1.3: SerialNumber: 00000011E09310500334
[12023261.046516] scsi7 : usb-storage 1-1.3:1.0
[12023262.082143] scsi 7:0:0:0: Direct-Access Samsung S2 Portable 2AR1 PQ: 0 ANSI: 2 CCS
[12023262.083804] sd 7:0:0:0: Attached scsi generic sg3 type 0
[12023262.084619] sd 7:0:0:0: [sdc] 1953524736 512-byte logical blocks: (1.00 TB/931 GiB)
[12023262.085358] sd 7:0:0:0: [sdc] Write Protect is off
[12023262.085366] sd 7:0:0:0: [sdc] Mode Sense: 28 00 00 00
[12023262.086136] sd 7:0:0:0: [sdc] No Caching mode page present
[12023262.086148] sd 7:0:0:0: [sdc] Assuming drive cache: write through
[12023262.089373] sd 7:0:0:0: [sdc] No Caching mode page present
[12023262.089383] sd 7:0:0:0: [sdc] Assuming drive cache: write through
[12023262.120260]  sdc: sdc1
[12023262.123727] sd 7:0:0:0: [sdc] No Caching mode page present
[12023262.123737] sd 7:0:0:0: [sdc] Assuming drive cache: write through
[12023262.123745] sd 7:0:0:0: [sdc] Attached SCSI disk


Und auch die hübsche blaue Aktivitäts-LED flackert beim Zugriff fröhlich vor sich hin:

Hab die prekäre Buchse ordentlich mit dem Kraftkleber umschmiert. Für den Alltagseinsatz wird das sicher nie mehr was, aber zumindest kann man nun in Ruhe die Daten kopieren.

Samstag, 31. August 2013

TFT zum Selbermachen

Jeder Bastler kennt das: Laptop von Frau/Freundin kaputt, neuen kaufen. Alten ausschlachten, weil wegwerfen will man ja nix. Man könnte ja mal irgendein Teil brauchen. Vor allem das schöne TFT Panel... 15 Zoll, 1024x768 4:3 matt - ziemlich old school aber trotzdem.

Tja leider kann man aber mit so einem Panel im Bastelbereich kaum was anfangen, da die Ansteuerung über LVDS-Signale mit einer irrwitzigen Bandbreite erfolgt. Mit Mikrocontrollet geht da nix und wenn man nicht gerade einen FPGA rumliegen hat mit dem man das Ding ansteuern könnte, dann hat man das Ding im Bücherregal stehen und muss seiner Frau erklären warum da schon wieder ein Teil mehr rumliegt... 

Ich wollt natürlich trotzdem das Panel irgendwie zum Laufen bringen - es wär ja sonst schade drum ;-). Es gab auch tatsächlich im Almighty Internet ein Controllerboard dafür mit VGA und DVI Anschluss, aber leider ziemlich teuer: 70EUR und ich wusste weder ob die Stecker passen, noch ob mein Panel überhaupt unterstützt wird. Das war mir dann doch zu heiß. Um das Geld krieg ich ja auch schon einen kompletten gebrauchten 15-Zoll TFT-Schirm - was aber nicht annähernd so reizvoll wäre, das verstehen aber nur Maker ;-). 

Auch im Embedded-Bereich für industrielle Anwendungen gibts solche Boards, aber auch teuer und Kompatibilität ist ungewiss. Schon die Steckerform und -belegung des LVDS-Anschlusses (gefühlt 100 Pins ;-)) sind eine Herausforderung - mangels Dokumentation aber wahrscheinlich eher zum Scheitern verurteilt.

Aberes gibt ja Ebay und schließlich entdeckte ich in China (wo sonst?) einen Händler der genau die richtigen Controllerboards hat! Sogar mit Kompatibilitätslisten für welche Panels es klappt. Super, eine DVI VGA Kombo um 30EUR versandkostenfrei direkt aus dem Reich der Mitte. 


5451-DVI-LCD-Controller-VGA-DIY-1920x1200-logic-Board-AD-Converter-LVDS-xbox-PC

Leider war mein Panel nicht in deren Liste: Hannstar HSD150PX11-B. Bei dem Preis ist aber die Fehlkaufschmerzschwelle schon fast unterschritten ;-). Trotzdem fragte ich einfach mal beim Verkäufer nach. Prompte Antwort, das mein Panel unterstützt wird - cool. Im Preis inbegriffen ist auch ein Inverter für die Hintergrundbeleuchtung und eine Menüplatine. Alle Stecker und die Firmware kommen passend für das Panel, das man bei der Bestellung angegeben hat - Beauty ;-). Nur noch 12V 4A Netzteil drauf - sowas hat man eh zuhauf daheim rumliegen - und ab gehts.

Funktioniert super - Thumbs up, it's a winner ;-). Dave Jones färbt langsam auf mich ab... Wie man auf dem Foto sieht hab ich auch eine nützliche Verwendung für das DIY-TFT - ich nehms als Schirm für meinen Raspberrypi. Das passt viel besser wie ein richtiger Bildschirm. Oh Mann, bin ich ein Nerd.



HP95LX frisch aus der Bucht

Ebay Beute reparieren

Ich sammle HP Taschenrechner. Ich weiß – nerdiger gehts nicht mehr, aber ich liebe die Dinger. Und vor kurzem habe ich in der Bucht ein Schnäppchen gemacht: ein HP95LX:

OK – eigentlich ist das kein Taschenrechner, sondern ein Taschencomputer, aber cool ist er trotzdem. Baujahr ca. 1991, Läuft unter DOS, hat unglaubliche 1MB RAM und ein mitgeliefertes Lotus123, sowie eine HP Taschenrechner Applikation. Wer kann da widerstehen frage ich!

Er ist in sehr gutem Zustand und funktioniert perfekt. Aber leider behauptete er auch nach einsetzen funkelnaglneuer Batterien, dass diese nicht mehr voll seien und auch der Batteriestandgraph zeigt es:
Hm - was ist da los? Ein bisschen Recherche brachte zu Tage, dass das "Low battery syndrom" eine typische Krankheit des HP95LX ist. Zahlreiche Posts handeln davon und empfehlen alle möglichen Batteriebeschwörungen: von Reboot, über das Schließen bestimmter Programme bis hin zu magischen Ritualen. Hat aber alles nix gebracht. Schließlich fand ich eine Seite, die die tatsächliche Erklärung inklusive Fix enthielt: Es gibt da einen 0.1µF Tantalkondenstor, der gerne mal den Geist aufgibt und gewechselt werden muss. Also Gerät zerlegt und auf Kondensatorsuche:
Der Schuldige ist der kleine Gelbe SMD Kondensator über dem Mintfarbenen Bauteil. Freundlicherweise ein Standardbauteil, das ich bei Völkner für sage und schreibe 24 Cent bekommen habe. Naja eigentlich 1,20 € wegen Mindestbestellmenge von 5 Stück. Aber dank Versandflatrate trotzdem billig :-)
Gesagt – getausch. Hier der Neue – noch feucht vom Flussmittel:

Und schon passt auch die Batterieanzeige wieder:

Mikroprojekt fertig! Endlich mal wieder was gebastelt, auch wenns nur eine Kleinigkeit war :-))

Nachtrag

Was mir übrigens noch aufgefallen ist: In meinem Rechner ist der Kondensator exakt andersrum eingelötet, als auf den Bildern der Website auf der ich die Lösung fand. Seltsam – verkehrte Polung?

Samstag, 30. März 2013

Servomotor-Tester #1: Bausatz und Messungen

Einleitung & Hintergrund

Nach langer Blogabstinenz  melde ich mich wieder zurück mit einem kleinen Beitrag über etwas Einfaches, das aber ziemlich nützlich und interessant ist: ein Modellbauservo-Tester. Hier lassen sich Theorie und Praxis lehrriech und gut untersuchen. Wollte immer schon so einen Servotester haben. Beim Pollin gibts den ganz günstig.

Ich werde den Bausatz kurz vorstellen und ein paar Messungen zu seiner Performance machen. Dann möchte ich noch dei Schaltung simulieren (das wird erst in einem 2. Beitrag passieren) und sehen, wie gut die Simulationsergebnisse mit der Realität übereinstimmen. Also eine schöne Möglichkeit an einem einfachen Projekt einiges auszuprobieren.

Schön verpackt, wie man es gewöhnt ist ;-)

Ist nix anders wie ein PWM-Generator mit 555er Chips (bzw. einem Dual 555 also ein556). Mit ein paar Widerständen einem Poti und ein paar Kondensatoren lassen sich prima PWMs damit machen - genau in dem Bereich, um einen Standardservo auf Funktionstüchtigkeit zu prüfen.

Ich verstehe immer nur PWM... Aber wie funktioniert so eine Servoansteuerung überhaupt genau. Zum Glück gibt es Wikipedia ;-):

Modellbauservos werden über eine Pulsweitenmodulation (PWM) angesteuert. Über die Breite der Pulse wird der Winkel, auf den der Servoarm gestellt werden soll, gesteuert. Gängig ist ein 50-Hz-Signal (20 ms Periodenlänge), welches zwischen 1 ms (linker Anschlag) und 2 ms (rechter Anschlag) auf High-Pegel und den Rest der Periodenlänge auf Low-Pegel ist. Viele Servos haben in diesem Wertebereich jedoch nicht ihre volle Bewegungsfreiheit ausgenutzt. Die Werte, bei denen der Servo ganz links bzw. rechts ist, können auch unterhalb 1 ms bzw. oberhalb 2 ms liegen. Die Periodendauer von 20 ms ist kein kritischer Wert und muss bei der Ansteuerung nicht genau eingehalten werden.
Das Ding besteht nur aus einer kleinen Platine und wenigen Teilen und ist schnell aufgebaut. Mein Sohn Julian (4 Jahre) hat natürlich gerne  dabei geholfen :-). Er durfte nach jeder Lötung die überstehenden Drahtstücke abzwicken.

Das sind tatsächlich alle Teile

Fertig aufgebaut und in Aktion

Die Aufbau- und Bedienungsanleitung inlusive Spezifikation und Schaltplan befindet sich bei Pollin als PDF zum Download. Dort finden sich folgende Angaben zu den technischen Daten:
  • Betriebsspannung: 6...12 V-, verpolungsgeschützt
  • Motorlaststrom max.: 2 A
  • PPM Bereiche: 0,9...2,2 ms (fein), 0,4...2,8 mm (grob)
  • PPM Periodenlänge: 20 ms (50 Hz)

 

 Windows 7: XP Mode Parallel Port

Das musste ich mir gleich mal auf meinem altertümlichen (aber für solche Dinge immer noch recht nützlichen) Voltcraft PSC64i Computer-Speichozsi mit Parallelportschnittstelle ansehen. Leider musste ich feststellen, dass es schon ein Wunder war, dass die dazugehörige Software unter Windows XP noch gelaufen war. Unter Windows 7 verweigert sie schlicht den Dienst. Zum Glück gibts den "Windows XP Mode" - eine virtuelle XP Maschine unter Windows 7 basierend auf Virutal PC.

Wie dem nun mal so ist - jeder Bastler kennt das, werden in der aktuellsten Version von Virtual PC leider keine Parallelports mehr unterstützt... *ggg*. Ich wollte mir keine andere virtuelle Maschine wie z.B. Virtual Box installieren - vor allem hätte ich dort auch XP von Hand installieren müssen... Also begann ich im Mighty-Web zu recherchieren - und siehe da, Virtual PC unterstützt Parallelports immer noch, nur können sie nicht mehr über die GUI aktiviert und konfiguriert werden. Aber direkt über die XML-Konfigurationsdatei der virtuellen Maschine schon. Einfach ein paar Zeilen dort reinkopieren und man hat den Parallelport :-). Glück gehabt.

Ich hab einige Zeit gebraucht, um den Parallelport in Virtual PC unter Windows 7 für den Windows XP Mode zum Laufen zu bringen. Daher zur Hilfe für andere eine Kurze Anleitung:
  1. Die Virtual PC Master Konfigurationsdatei für den Windows XP Modelokalisieren: C:\Users\userxyz\AppData\Local\Microsoft\Windows Virtual PC\Virtuelle Computer\Windows XP Mode.vmc
  2. Das ist ein xml-file. Im Tag <super_io> folgendes hinzufügen (und ggf. vorhandene <parallel_port> Tags ersetzen):
    <parallel_port>
    <port_shared type="boolean">false</port_shared>
    <port_type type="integer">0</port_type>
    </parallel_port>
    <parallel_port id="0">
    <port_name type="string">LPT1 (378h-37Fh)</port_name>
    <port_type type="integer">1</port_type>
    </parallel_port> 
Dann einfach den XP-Modus neu starten und die parallele Schnittstelle sollte zur Verfügung stehen.

Die Messungen 

 Die Oszi-Software ließ sich dann problemlos im XP-Mode installieren und läuft mit (gerade noch) akzeptabler Performance - aber sie läuft und erkennt auch das Oszi. Es lässt sich passabel damit messen. Die untenstehenden Bilder zeigen die Messergebnisse.

Zuerst hab ich mir angesehen, ob die Grundfrequenz der PWM-Ansteuerung passt. Die muss ca. 20ms sein, ist aber kein kritischer Wert: 18ms passen also. Dann hab ich die einstellbaren Wertebereich der Pulsbreiten verifiziert. In der Grobeinstellung sind es gemessene 2,75 bis 0.5ms, was im Rahmen der Toleranzen ganz gut zu den spezifizierten Werten passt. In der Feineinstellung messe ich 2,25 bis 0,88ms - auch das ist eine zufriedenstellende Übereinstimmung mit der Spezifikation.

Übersichtsplot: ca. 20ms Periodendauer
Grobeinstellung max. Pulsbreite: 2,75ms
Grobeinstellung min. Pulsbreite: 0,5ms
Feineinstellung max. Pulsbreite: 2,25ms
Feineinstellung min. Pulsbreite: 0,88ms
So, dass mal fürs erste. Ich wollte diesen Beitrag noch länger machen, aber es wird einen 2. Teil geben. Ich möchte nämlich die Schaltung analysieren und auch mit verschiedenen Tools simuliere: LTSpice, www.circuitlab.com und evt. National Instruments Multisim 11. Ich möchte die Schaltung wirklich im Detail verstehen und werde meine Erkenntnisse hier mit euch teilen.

Donnerstag, 21. März 2013

Mein Name ist Bond - DAGU Magician DG-007

Mein erster kleiner Roboter (das Tutorialprojekt von letsmakerobots.com) war ja nur mit Doppelklebeband zusammengeklebt. Sah ganz nett aus und war kompakt, aber schon damals wollte ich gerne was Stabileres, Wertiges - aber trotzdem günstig. Auf den DAGU Magician DG-007 stieß ich schon vor längerer Zeit. Kostet unter 20 Euro, kommt aus China (woher sonst...) aber es gab in Deutschland keine Bezugsquellen. Und dann stieß ich vor kurzem auf exp-tech.de als ich auf der Suche nach Komponenten von Adafruit Industries war. Endlich eine Bezugsquelle in Deutschland :-).

Natürlich musste ich ihn sofort mitbestellen. Zu viel erwartet hab ich mir aufgrund des Preises nicht. Im Netz hab ich auch durchwachsene Kritiken zum Bausatz gelesen. Der erste Eindruck war ganz gut (abgesehen vom lieblosen verschweissten durchsichtigen Billigplastikbeutel in dem der Bausatz kam. Ein mickriges Blatt Papier mit ein paar Bildern zur Montage. Kein Text - braucht man aber auch nicht. Überrascht war ich von der guten Qualität der lasergeschnittenen Acrylplatten und -teile, die noch einseitig mit Schutzpapier vom Schneiden beklebt waren. Die Räder muten etwas "plasty" an sonst ist der eindruck aber generell posistiv. Der Geruch ist recht intensiv (wahrscheinlich der Reifengummi...).
 

Die Einzelteile im Überblick
  Was ist denn alles so drin (siehe Foto):
  • Boden- und Deckplatte aus Acryl
  • 2 Kunststoffräder mit Gummireifen
  • 2 Getriebemotoren
  • 2 Odometrierädchen
  • 4 Acrylhalter für die Motoren
  • Metallrollball als 3. Fuß
  • Batteriehalter (3x AA)
  • Schrauben und Abstandshalter
Der Zusammenbau ist simpel und geht einfach von der Hand. Als erstes montiert man die Motoren an der Bodenplatte und steckt die Odometrierädchen auf den auf der Innenseite herausgeführten Achsen auf. Die Sitzen etwas lose und reichen auch nicht wirklich in die ausgeschnittenen Schlitze der Bodenplatte hinein, aber wenn man Gabellichtschranken verwendet passt das schon. Die Motoren sollten mit jeweils der gleichen Seite nach außen montiert werden.

1. Schritt: Motoren montieren
Die Bohrungen in der Bodeplatte sind für die Montage eines 4x AA Batteriehaltes vorgesehen. Also muss man für den mitgelieferten Halter entweder ein zusätzliches Loch bohren (Dremel sei dank ;-)) oder - so wie ich - nur eine Schraube zur Befestigung verwenden. Dann kommen noch die Abstandshalter und der Rollball an die vorhergesehenen Stellen. Die Abstandshalter und die Schrauben sind von guter Qualität - da hab ich bei anderen Chinaprodukten schon wesentlich schlechteres gesehen. Die Räder lassen sich gut auf die Achsen aufstecken und sitzen dort recht fest. Ein Rad sitzt ein wenig schief, da offenbar der Druckguß der Felge nicht ganz optimal gelaufen ist - naja. Ist aber noch akzeptabel, da nichts an der Bodenplatte schleift.

2. Schritt: Räder, Batteriehalter, Rollerball, Abstandshalter
Der nächste Schritt ist reichlich unspektakulär: Deckplatte drauf und passt. Und dann wir haben fertig :-).

3. Schritt: Deckplatte drauf und fertig
 
Noch ein Bildchen vom fertigen Teil
So, nun muss die neue Plattform natürlich gleich ausprobiert werden. Und was würde sich besser eignen als der idente Aufbau wie vom letsmakerobots.com Getting-Started Tutorial, das ich ja schon einmal nur mit Klebeband realisiert hatte? Noch ein Tip zum Anschluss der Motoren: da ich die Anschlüsse möglichst flexibel halten wollte, hab ich nicht direkt Kabel an die Lötösen der Motoren gelötet, sondern kleine Stifte, an die man die altbekannten und bewährten solderless Female Jumper-Wires anschließen kann. Beim Anlöten der Stift muss man den Motor aus dem Getrieb nehmen (um thermische Schäden am Kunsstoff zu vermeiden) und aufpassen, dass man die Kunstoffhalterung für den Motor nicht abreisst.


Das ist der fertige kleine Roboter ala letsmakerobots.com

Tata... jetzt ist er fertig. Dazu noch ein kleines Video. Die Software ist noch nicht auf die geänderte Geometrie der neuen Plattform und die etwas andere Übersetzung der Getriebemotoren adaptiert - aber darum ging es hier auch gar nicht.

Donnerstag, 28. Februar 2013

Kopflose Himbeertorte

Also wenn Chris einen Raspberry Pi hat brauch ich natürlich auch einen ;-)

Und heute isser gekommen. Die SD-Karte für das Betriebssystem habe ich schon seit gestern - allerdings hatte ich erst ziemlich gegrübelt, welche Bestellung ich da ganz vergessen hatte, als ich das Paket von der Post abgeholt hatte. Ich glaube diese Sendung bricht alle Rekorde in Sachen Verpackung-zu-Inhalt-Verhältnis:



OK - ein Reicheltkatalog war auch noch drin, aber ich fand es trotzdem beeindruckend!
Aber zurück zum Thema: Also der Raspberry Pi ist da - freu! Außer der SD-Karte hatte ich sonst nix bestellt dafür, denn meine Bastelkiste ist gut gefüllt und sollte alles weitere beinhalten. Falsch gedacht! Das Kleingedruckte hatte ich, wie immer, nicht gelesen und so war kein Mikro-USB Kabel auf Lager. Was kein Problem gewesen wäre. Wenn nicht auch mein dummes Auto in der Werkstatt gewesen wäre. Grumpf! Aber inzwischen ist das Auto repariert und das Stromkabel plus Netzteil gekauft. Also frisch ans Werk :-)

Headless installation

Nu wäre die ganze Angelegenheit keinen Blog-Eintrag wert, denn Chris hat ja bereits eine schöne RasPi Vorstellung abgeliefert, aber ich dachte mir, ich gehe das mal von einer anderen Seite an: Es soll um embedded Computing gehen - und da stören Tastatur, HDMI, GUI etc. doch nur ;-)
Also heute mal eine reine Shell-Veranstaltung, inklusive Installation. Das ist natürlich nicht neu und wer es wissen will findet im Web tausende von entsprechenden Anleitungen, d.h. es ist schon alles gesagt - aber noch nicht von mir ;-)

Distribution

Das OS-Image das ich verwende ist ein simples Raspbian, welches sich mittels dd auf die oben erwähnte 16 GB SD-Karte geschrieben habe. Warum 16GB? Weil ich für zukünftige Anwendungen einfach genug User-Space haben wollte und die Dinger super billig sind, auch wenn man eine mit vernünftiger Geschwindigkeit nimmt. Da der Rasp Pi ja wie gesagt noch nicht da war, hatte ich vorab Zeit zum rumspielen und habe zunächst die root-Partition ein wenig vergrößert (gparted sei dank) der restliche freie Platz ist dann in eine eigene Partition gewandert, die ich dann vermutlich als /home einbinden werde:

  pi@raspberrypi ~ $ sudo fdisk -l /dev/mmcblk0
 
  Disk /dev/mmcblk0: 15.8 GB, 15811477504 bytes
  4 heads, 16 sectors/track, 482528 cylinders, total 30881792 sectors
  Units = sectors of 1 * 512 = 512 bytes
  Sector size (logical/physical): 512 bytes / 512 bytes
  I/O size (minimum/optimal): 512 bytes / 512 bytes
  Disk identifier: 0x00014d34

          Device Boot  Start       End    Blocks Id  System
  /dev/mmcblk0p1        8192    122879     57344  c  W95 FAT32 (LBA)
  /dev/mmcblk0p2      122880   6264831   3070976 83  Linux
  /dev/mmcblk0p3     6264832  30881791  12308480 83  Linux

Jungfernfahrt

Also die SD-Karte in den Raspberry Pi rein, Ethernet Kabel anschließen und zuletzt Mikro-USB-Kabel in die Ladewarze und den Pi. Nach ca. einer Minute hab ich es nicht mehr ausgehalten und bin auf Suche nach dem neuen Mitglied des Netzes gegangen:

  hal:~$ nmap -sP 192.168.0.10-50

  Starting Nmap 6.00 at 2013-02-28 18:29 CET
  Nmap scan report for hal.fritz.box (192.168.0.10)
  Host is up (0.00014s latency).
  Nmap scan report for arronax.fritz.box (192.168.0.21)
  Host is up (0.0028s latency).
  Nmap scan report for 192.168.0.24
  Host is up (0.030s latency).
  Nmap scan report for 192.168.0.33
  Host is up (0.00087s latency).
  Nmap done: 41 IP addresses (4 hosts up) scanned
  in 2.42 seconds

Da isser ja! :-))

Also mal freundlich anklopfen:

  hal:~$ nmap 192.168.0.33
 
  Starting Nmap 6.00 at 2013-02-28 18:31 CET
  Nmap scan report for 192.168.0.33
  Host is up (0.0098s latency).
  Not shown: 999 closed ports
  PORT   STATE SERVICE
  22/tcp open  ssh
 
  Nmap done: 1 IP address (1 host up) scanned 
  in 0.19 seconds

Gut - ssh ist aktiv. Gleich mal einloggen:

  hal:~$ ssh pi@192.168.0.33
  pi@192.168.0.33's password:
  Linux raspberrypi 3.6.11+ #371 PREEMPT 
  Thu Feb 7 16:31:35 GMT 2013 armv6l  The programs included with the Debian 
  GNU/Linux system are free software;
  the exact distribution terms for each
  program are described in the individual 
  files in /usr/share/doc/*/copyright.  Debian GNU/Linux comes with ABSOLUTELY 
  NO WARRANTY, to the extent permitted by 
  applicable law.
  NOTICE: the software on this Raspberry Pi
  has not been fully configured. 
  Please run 'sudo raspi-config'

Das sieht sehr gut aus! Ist allerdings auch gelogen, denn ich Wahrheit hab ich erstmal eine ganze Weile damit verbracht herauszufinden, wieso mich das Mistding so oft rauswirft und einen reboot braucht. Letztlich war es natürlich das Qualitätsnetzteil von LogiLink. Mit einem anderen, dessen Herstellungskosten vermutlich über 20 Cent lagen ging es dann stabil.
Die Konfiguration per ssh lief dann wirklich problemlos inklusive Systemupdate via Internet. Ein bisschen zusätzliche Software hab ich auch gleich noch installiert. Hab mich gleich zuhause gefühlt: scheint im Großen und Ganzen ein ganz normales Debian System zu sein.
D.h. ich habe nun einen zigarettenschachtelgroßen Mini-LINUX-Server, der sich brav per ssh fernwarten lässt :-)))))))))))))))))))

Wenn sich damit nichts verrücktes machen lässt, dann weiß ich auch nicht womit!

WLAN einrichten

Bekanntermaßen hat der Raspberry Pi kein eingebautes WLAN. Also habe ich aus der Bastelkiste einen USB-WLAN Stick im nano-Format hervorgekramt. Konkret war es war ein TP-Link TL-WN-725N:


Das Einstöpseln hat er erstmal kurz übel genommen und mit einem Reset quittiert - vermutlich ist auch diese Power-Supply noch zu schwachbrüstig...
Auf alle Fälle erkennt er ihn:

  pi@raspberrypi ~ $ lsusb
  Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp.
  Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root 
   hub
  Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp.
  Bus 001 Device 004: ID 0bda:8176 Realtek Semiconductor
   Corp.RTL8188CUS 802.11n WLAN Adapter

Also hab ich mal eine runde /etc/network/interfaces editiert und mein heimisches WLAN konfiguriert (habe ich schon mal erwähnt, dass ich eine persönliche Feindschaft mit network-manager pflege und ihn umgehe, wann immer ich kann?). Hier also der relavente Abschnitt:

  iface wlan0 inet dhcp
        wpa-driver wext
        wpa-ssid philnet
        wpa-proto WPA2
        wpa-psk XXXXXXXXXXXXXXXXXXXXXXXXXXX # WiFi key

Daumen drücken und ausprobieren:

  pi@raspberrypi ~ $ sudo ifup wlan0
  Internet Systems Consortium DHCP Client 4.2.2
  Copyright 2004-2011 Internet Systems Consortium.
 
[...] 

  Listening on LPF/wlan0/64:70:02:29:fb:23
  Sending on   LPF/wlan0/64:70:02:29:fb:23
  Sending on   Socket/fallback
  DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 6
  DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 20
  DHCPREQUEST on wlan0 to 255.255.255.255 port 67
  DHCPOFFER from 192.168.0.1
  DHCPACK from 192.168.0.1
  Stopping NTP server: ntpd.
  Starting NTP server: ntpd.
  bound to 192.168.0.39 -- renewal in 400508 seconds.

Heureka! Wir haben WLAN Anschluss. Das war echt einfach - und das war's auch für heute.

Sonntag, 10. Februar 2013

Roboterarm – Aufbau


Am Ende meines letzten Beitrag hatte ich ja überlegt, ob es nicht toll wäre, einen Roboterarm zu bauen, der dann gegen den Mephisto Schach spielen könnte. Nach kurzer Suche im Netz habe ich dann auch einen entdeckt, der nicht viel kostet und möglicherweise geeignet wäre: Der KSR10 von Vellemann.
Inzwischen hatte ich einen bestellt. Also voller Freude Schachtel auf und reinschauen. Überraschung: es ist ein Bausatz im besten Sinne des Wortes – das Teil kommt in Form mehrerer Tütchen mit Plastikteilen, Motoren, Zahnrädern, Schrauben etc.:



Die Anleitung ist ganz brauchbar. An einigen Stellen muss man ein bisschen aufpassen - z.B.beim Zusammenbau der Motor/Getriebe-Module, denn diese sind keineswegs alle identisch, wie es auf den ersten Blick scheint. Und auch die zig verschiedenen Typen von Schräubchen muss man genau ansehen, damit man nichts durcheinander bringt. Also nicht gerade was für Anfänger, aber wenn man keine 2 linken Hände hat und schon mal irgendwas gebaut hat, dann ist es auch kein Problem. Viel zu sagen gibt es zum Aufbau eigentlich nicht, deshalb hier einfach kommentarlos diverse Bilder der verschiedenen Bauphasen:
Und wie bei jedem guten Puzzle ist auch hier natürlich ein Teil übrig geblieben:


x-mal die Bauanleitung durchsucht, wo das blöde Ding hingehört hätte – nix! Grumpf! Aber dann die Erleuchtung: 
Uff – also bin ich doch nicht zu blöd einer Bauanleitung zu folgen... So - das hat Spaß gemacht! Zu einem Funktionstest komme ich heute nicht mehr. Das gibt's dann in der nächsten Folge. Allerdings wird es wohl nichts damit, den Arm für das Schachbrett zu nutzen, denn dazu ist der gute kleine Robbi einfach nicht groß genug:
 
So - nun freue ich mich schon darauf, etwas mit dem Roboterarm zu spielen. Als nächstes steht dann wohl die Ansteuerung mit Mikrocontroller oder Computer an, auch wenn ich mir das USB-Interface nicht dazu gekauft habe, dürfte das wohl nicht allzu schwierig werden.

PS: habe ich schon mal erwähnt, dass das Interface zum Platzieren von Bildern in dieser Blogger-Software eine Vollkatastrophe ist? Gut, das ich HTML kann...