Archive for the 'electronics' Category

42cm Quadcopter: im Baum übernachtet

Wednesday, May 9th, 2012

Gestern wollte ich mit meinem Quadcopter einen neuen persönlichen Höhen-Rekord aufstellen. Das gelang mir auch (80m), aber es war keine gute Idee denn der Wind war recht stark und der Quadcopter wurde gerade von Multiwii 1.9 auf 2.0 upgedatet – das fühlte sich noch etwas ungewohnt an und ich hatte es draussen bei Wind noch nicht getestet. Es war wie so oft: Aufsteigen ist ganz einfach… aber der Sinkflug ist sau-schwierig. Zu viel oder zu wenig Gas ? Drift auf Yaw ! Der Wind treibt ihn weg.. Wo ist vorne??? Panik! Er treibt schnell auf den Wald zu und ist immer noch sehr hoch. Mist! schon hinter den Bäumen verschwunden – Jetzt aber Gas auf Null!
Sch…!
Die Suche beginnt. Zunächst nur flüchtige Blicke auf den Waldboden und in die Baumkronen (15m hoch!) , den Weg, die Dächer und die Felder hinter dem Waldstück
kontrolliert. Kinder gefragt, ob sie was gesehen haben. nix.
Dann systematisch mäanderförmig den Waldboden abgesucht und auch immer wieder die Baumkronen betrachtet. Die Baumkronen sind teilweise so dicht – da könnte ein Copter ‘drauf liegen ohne dass man ihn von unten sehen kann. Nach einer Stunde war ich mir ziemlich sicher: auf dem Boden liegt er nicht.
Später kam ein Freund und half bei der Suche. Wir gingen noch mal zum Startplatz und konzentrierten und auf einen ca. 20m breiten Bereich vom Wald mit der höchsten Wahrscheinlichkeit entsprechend meiner Erinnerung. 4 Augen sehen mehr als 2: Mein Kollege hat meinen Kopter entdeckt. Kaum zu erkennen. Man sieht jeweils ein Stück der orangenen Propeller, aus einer anderen Perspektive kann man den Umriss erkennen. Wir schätzen er liegt in 10m Höhe, es waren aber eher 15m. Sender geholt: Vergeblich, denn wenn der Quad auf dem Rücken liegt kann man die Motoren nicht einschalten :-(

Ein Tag später: Der Landwirt, der dort lebt, bietet sein Hilfe an. Er hat ein ca 9m lange 2-teilige Leiter und eine ca 8m lange Stange aus GFK-Rohr+Holz. Wir legen die Leiter an den Baum. Ich klettere hoch. Soweit o.k. aber wenn ich jetzt noch die Stange halten müsste… …schwierig! Der Landwirt und ich sind der Meinung das sollte jemand machen, der mit sowas etwas geübter ist, z.B. der Sohn des Landwirts, welcher in der Feuerwehr aktiv ist. Und er machte das wirklich sehr professionell: Hat sich einen Gurt angezogen und sich oben an Baum und Leiter fest geseilt. Der Copter wird vorsichtig geschubst, landet 5m tiefer auf den Ästen eines andern Baumes. Von dort war er dann greifbar und wurde dann über die Leiter nach unten getragen. Völlig trocken und unversehrt. Akku noch ‘dran. Cam ist noch dran. Zuhause stelle ich fest: Der Akku ist tiefentladen – also kaputt. Alles andere funktioniert.

Fazit:
* keine Höhenflüge an windigen Tagen
* den schwierigen Sinkflug noch viel viel öfter trainieren, z.B. aus 20m Höhe
* besser schräg gegen den Wind steigen, statt senkrecht nach oben
* Suchpiepser einbauen z.B. mit AUX2 schaltbar, oder mit eigenem Akku: automatisch Alarm nach 10 Minuten
* Stange mit Depron-Dreieck, lichtdicht(Alufolie?) zur besseren Lageerkennung
* wenn möglich die Cam so einstellen, dass alle 10 Minuten eine neue Datei erstellt wird
* 2m Motorsegler sind besser gegeignet wenn man sehr hoch fliegen will.

Nokia 3310 LCD

Sunday, April 22nd, 2012

Vor 3 Jahren habe ich das Display aus einem Nokia 3310 ausgeschlachtet und dort Kabel, Steker und Kondensator angelötet. Dann ruhte das Projekt, weil ich noch keine Erfahrung mit 3,3V Bauteilen, Pegelwandler usw. hatte. Mein erstes Projekt, wo der Micrcontroller mit 3,3V läuft war der SD-Karten-Logger. Für das Nokia Display habe ich im Atmega328P die Fuses für 8Mhz interner Oszillator und Brown-Out-Detection auf 2,6V gesetzt. Die Schaltung habe ich mit einem DC-DC Wandler versorgt. Die Schaltung funktioniert ab 2,7 V aber fürs flashen werden ca. Vcc=3,6V-3,7V benötigt, damit die High-Pegel vom usbasp erkannt werden. Das sind 0,4V zuviel für das Display aber das hat es bisher überlebt. Vielleicht mache ich noch eine Diode in die VDD(+) Leitung des Displays, aber ich habe mal gehört, dass die Pegel an den Eingängen nicht höher sein sollen als Vcc.

Software: Das este Bespielprogramm von http://www.arduino.cc/playground/Code/PCD8544 hat nicht funktioniert, aber das zweite lief sofort. Man kann sich die DA Pins die man verwenden möchte frei aussuchen. Der von mir gebaute Stecker ist so belegt:
#define PIN_SCE 2
#define PIN_RESET 0
#define PIN_DC 3
#define PIN_SDIN 4
#define PIN_SCLK 6

Später probier’ ich mal die lib von Adafruit:
https://github.com/adafruit/Adafruit-PCD8544-Nokia-5110-LCD-library
Oder vielleicht die Borgware von das-labor.org – das könnte der kleinste 2D Borg werden :-)

nokia LCD

USBaspLoader, Metaboard

Saturday, April 21st, 2012

In 2009 und 2010 habe ich 2 BLIT2008-Boards gebaut: Atmega8, 12MHz Quarz, USB-Bootloader. http://bralug.de/wiki/BLIT2008-Board
Der 12Mhz Quarz war damals üblich, um das USB Timing für V-USB hinzukriegen.
Inzwischen hat sich V-USB weiterentwickelt und es geht auch mit anderen Taktfrequenzen.

We supply assembler modules for clock frequencies of 12 MHz, 12.8 MHz, 15 MHz, 16 MHz, 16.5 MHz 18 MHz and 20 MHz. Other clock rates are not supported.

Und es gibt einen Bootloader, der kompatibel zu USBasp ist. Folglich passt er dann auch zu avrdude und zur arduino-IDE:
http://www.obdev.at/products/vusb/usbasploader.html

Wie beschrieben habe ich USBaspLoader konfiguriert, kompiliert & geflasht…
make
make fuse
make flash

Das hat leider nicht funktioniert. Mein Notebook hat kein USB-Gerät erkannt.

Im Netz fand ich 2 weitere Boards mit Atmega & V-USB:
http://wiki.lochraster.org/wiki/Rumpus und https://metalab.at/wiki/Metaboard

Mein eigenes Board habe ich dem Metaboard angepasst, in dem ich USB D- an PD4 und den “Bootloader enable”-Schalter an PD7 angeschlossen habe.

Für das Metaboard mit Atmega328 @ 16Mhz fand ich sogar den USBaspLoader als fertiges HEX-File: http://sites.google.com/site/a52egv/metaboard

Das habe ich probiert und das hat auch funktioniert. Leider nur ein Mal. Danach war der Bootloader überschrieben. :-(

Ich glaube im Makefile von USBaspLoader ist ein Fehler:
hfuse: DA -> ergibt 1k Bootloader, aber der Bootloder ist knapp 2k groß.

Mit hfuse: D8 funktioniert es bei mir.
lfuse: f7
Lockbits habe ich nicht benötigt.

Möglicherweise noch ein Fehler im Makefile:
# BOOTLOADER_ADDRESS is 1800 for 8k devices, 3800 for 16k and 7800 for 32k.
Das ist IMHO auch falsch, denn 0×3800 x 2 = 0×7000 und nicht 7800

Jedenfalls bin ich froh, dass es nun endlich funktioniert.
Wenn ich PD7 per Schalter oder Jumper auf GND lege und anschließend reset drücke hält das laufende Programm an und der Bootloader wartet. Wenn der Bootloader das neue Programm empfangen hat, läuft dieses automatisch sofort los.

inspired by metaboard

240 LEDs

Thursday, April 12th, 2012

Vor einiger Zeit habe ich versehentlich eines meiner Conrad/Franzis Pong Spiele mit 12V gebraten. Nun habe ich den defekten Atmega8 von der Platine entfernt und dabei dort die Leiterbahnen etwas beschädigt. LEDs und Schieberegister sind aber noch o.k.
Statt dort irgendwie einen neuen Controller dran zu löten, habe ich die defekte Platine mit einer funktionierenden Platine verbunden: +5V, GND, Zeilen 1 bis 10, Strobe, Clock und Q4 vom zweiten Schieberegisters an Data des dritten Schieberegisters.
Momentan nutze ich es als Laufschrift, der Text ist fest in der Firmware, könnte aber in zukünftigen Software-Varianten auch per i2c , seriell oder Bluetooth empfangen werden.

2 pong platinen von hinten

noch mehr arduinos

Thursday, April 12th, 2012

Neulich brachte der Postbote 5 frische Atmega328 und 16MHz Quarze.
Einen davon habe ich hinter mein LCD keypad shield gesteckt, und ein andere wird mein Mini-Höhenlogger mit BMP085 Sensor.
Die beiden will ich über ein serielles Nullmodemkabel verbinden um nach einem Flug die gesammelten Daten ansehen zu können.

Fuses setzen und Bootloader flashen:
16MHz Quarz:
avrdude -c usbasp -p m328p -U hfuse:w:0xDA:m
avrdude -c usbasp -p m328p -U efuse:w:0x05:m
avrdude -c usbasp -p m328p -U lfuse:w:0xFF:m
avrdude -c usbasp -p m328p -U ATmegaBOOT_168_atmega328.hex

8MHz internal Oszillator*:
avrdude -c usbasp -p m328p -U hfuse:w:0xDA:m
avrdude -c usbasp -p m328p -U efuse:w:0x05:m
avrdude -c usbasp -p m328p -U lfuse:w:0xE2:m # bin mir nicht sicher
avrdude -c usbasp -p m328p -U ATmegaBOOT_168_atmega328_pro_8MHz.hex

*hat einmal funktioniert und einmal nicht. hmm..
Die Original arduinos haben offenbar alle einen externen Quarz oder Resonator,
sogar die Lilipads mit 8MHz

Lochraster arduino

Elektronik basteln

Tuesday, April 10th, 2012

Momentan macht es mir große Freude alten LED- und LC-Displays, die hier schon sehr lange ‘rumliegen, mit Hilfe von Atmega/arduino neues Leben einzuhauchen.

Zu Beginn etwas einfaches: TIL311 Hexadecimal Display With Logic original aus der 80ern.
Da ich nur ein einstelliges Display habe, habe ich “latch strob input”(Pin 5) mit GND verbunden. Mit Pin 8 – blanking input kann man das Display dunkel schalten, blinken lassen oder vielleicht sogar mit PWM dimmen.

Nächstes Versuchsobjekt: ein einzeiliges LCD aus einem Faxgerät. Für das 14-pol Flachbandkabel hatte ich keine Pinbelegung. Also habe ich mir eine Seite aus dem Datenblatt des Controller-Chips “LC7985A” ausgedruckt und die interessanten Anschlüsse durchgepiepst:

1 DB6
2 DB7
3 DB4
4 DB5
5 DB
6 DB
7 DB
8 DB
9 RW -> GND
10 E -> Atmega B3, arduino 11
11 V5 -> GND
12 RS -> Atmega B4, arduino 12
13 GND
14 VDD +5V

V5 ist vermutlich für Kontrast zuständig. Ich musste es mit GND verbinden, damit es funktioniert. Software-seitig kann man die übliche LiquidCrystal Library verwenden: 4 bit Daten + RS + E

Ausblick:
* 2-zeiliges LED Display aus 16 Stück DLO3416
* LCD aus einem Nokia 3310 (3,3V)
* LCD keypad shield

atmega/arduino Basteltag

Sunday, April 1st, 2012

Gestern bin ich bei den Projekten “serieller Datenlogger” und “Höhenlogger” ein bisschen weiter gekommen. BMP085_Example_Code.pde läuft auf einem Atmega8 mit 8MHz, internal Oscillator. Lesen & schreiben auf SD Karte läuft bis jetzt nicht mit Atmega8 oder Atmega32. Für den Atmega8 ist die SD-Library zu groß und beim Atmega32 ist die Pin-Zuordnung anders. Atmega168 oder 328 hatte ich gerade keinen zur Hand.

Funktion    | Atmega8  | Atmega32 | arduino
----------------------------------------------------
SS            PB2        PB4        digital 10
MOSI          PB3        PB5        digital 11
MISO          PB4        PB6        digital 12
SCK           PB5        PB7        digital 13

SCL           PC5        PC0        analog input 5
SDA           PC4        PC1        analog input 4
----------------------------------------------------

Fuses für Atmega8
* mit 16MHz Quarz, 512 words bootloader: lfuse=df hfuse=ca
* 8Mhz internal Oscillator: lfuse=e4 hfuse=d8

siehe auch: arduino-0023/hardware/arduino/boards.txt
http://www.engbedded.com/fusecalc

Festspannungsregler für 3,3V:
LM117DT
78M33
LM3940-3.3
LF33
MCP1700-3302E

arduino: SD-card success!

Tuesday, March 13th, 2012

Mein erstes Projekt, welches komplett mit 3,3V läuft. Ich habe keinen 3,3V Festspannungsregler auf Lager aber einen DC-DC Wandler den ich auf 3,30V einstellen konnte. Ein Atmega328 läuft mit 16MHz Quarz, daran angeschossen mein USB-serial Kabel und mein DIY micro-SD card slot: Ein handelsüblicher microSD nach SD Adapter steckt in einem alten ISA Steckplatz-Sockel. Vermutlich kann ich die 6 Kabel auch direkt an den Adapter anlöten und somit viel Platz sparen.
Die Brücke für GND von Pin 3 auf 6 ist übrigens in dem Adapter schon eingebaut.
In den Beispiel-Sketches “DumpFile” und “ReadWrite” musste ich jeweils
den ChipSelect Ausgang bei SD.begin() von 4 auf 10 ändern.

Binary sketch size: 11698 bytes (of a 30720 byte maximum)

Pinbelegung (ohne Gewähr)

micro-SD card
-------------
1 n.c.
2 CS
3 DI
4 +3,3V
5 CLK
6 GND
7 DO
8 n.c.

SD card
-------
9 n.c.
1 CS
2 DI
3 GND
4 +3,3V
5 CLK
6 GND
7 DO
8 n.c.

SD-Card    Arduino (Atmega)
---------------------------
+3,3V      +3,3V
GND        GND
CLK        Digital 13, SCK (PB5)
DO         Digital 12, MISO (PB4)
DI         Digital 11, MOSI (PB3)
CS         Digital 10,      (PB2)

http://www.dharmanitech.com/2009/01/sd-card-interfacing-with-atmega8-fat32.html

http://www.frank-zhao.com/cache/fat_sd.php

http://www.avrprojects.info/avr-interfacing/reading-and-writing-sd-card-using-atmega16/

http://elasticsheep.com/2010/01/reading-an-sd-card-with-an-atmega168/

atmega with SD card

Lipo-Alarm für MultiWiiCopter

Wednesday, March 7th, 2012

Damit ich die Lipo-Spannungs-Überwachungsfunktion der Software nutzen kann, habe ich aus 2 Stück 68kOhm Widerständen einen symmetrischen Spannungsteiler an + und – (GND) vom Akku angeschlossen. Bei 2S Akkus entspricht die gemessene Spannung (Arduino Eingang A3) in etwa der Spannung einer Zelle, also zwischen 3,0 und 4,2V. Am Ausgang D8 habe ich eine LED mit 150 Ohm Vorwiderstand nach GND angeschlossen.

Nun musste ich etwas rechnen und mit einem leeren & vollen Akku ausprobieren.
Hier das Ergebnis für config.h:


// vbat = [0;1023]*16/VBATSCALE
#define VBAT // comment this line to suppress the vbat code
//#define VBATSCALE 131 // change this value if readed Battery voltage is different than real voltage
#define VBATSCALE 333
#define VBATLEVEL1_3S 33 // 3,3V
#define VBATLEVEL2_3S 31 // 3,1V
#define VBATLEVEL3_3S 33 // 3,0V
#define NO_VBAT 16 // Avoid beeping without any battery

In der GUI wird nun korrekt die Hälfte der AKkuspannung und somit die durchschnittliche Zellenspannung angezeigt. Die LED fängt bei Spannungen unter 3,3V an zu blinken (z.B. pitch pumping) und geht auch wieder aus, wenn der Akku weniger belastet wird (z.B. schweben, Landung). Mit sinkender Akkuspannung blinkt die LED immer schneller und heller.

Barometer & Magnetometer Sensoren sind schon bestellt. Zum fliegen absolut nicht nötig, aber ich habe Lust damit zu experimentieren.

neue Kamera, neues Quadcopter Video

Wednesday, February 22nd, 2012

Dies ist jetzt meine fünfte mini-Kamera. Die ersten drei sind defekt, die noch funktionierende #3 verliert viele Frames – das nervt! Die neue ist eine HD Version #16. Sie lag gestern in meinem Briefkasten. Heute habe ich das erste Outdoor-Video gemacht und bin bisher sehr zufrieden.
www.chucklohr.com/808/