C++Guns – RoboBlog blogging the bot

25.02.2011

Datenhandschuh: Die Verbindung mit dem PC steht

Filed under: Allgemein — Tags: , , , — Thomas @ 13:02

Heute habe ich den Operationsverstärker an einem Mikrocontroller angeschlossen, der das Signal an den PC schickt. Damit sind drei, einzel entwickelte Komponenten miteinander verbunden. Und es funktioniert zufriedenstellend :)

Der Mikrocontroller, ein alter ATmega8, besitzt ein 10bit ADC mit interner 2.56V Referenzspannung. Neuere Typen kommen auch bis auf 1.1V runter. Aber für den Prototyp lange das erstmal. Allerdings musste ich den Transimpedanzverstärker weiter aufbohren, damit er eine Ausgangsspannug von ca. 2.5V erreicht. Aber selbst mit 6MOhm im Gegenkopplungszweig habe ich eigentlich keine Probleme mit Rauschen. Als OP ist der CA3240 eingebaut.

datenhandschuh_verstaerker2

Das Programm für den Controller war schnell geschrieben. Da gibt es nicht viel zu sagen.

Den Logarithmus ziehe ich jetzt am PC. Mit den Operationsverstärker hat das nicht so richtig geklappt. Man bekommt ja nur 60mV/Dekate. Und auf noch einen dritten Verstärker in der Kette habe ich keine Lust.

22.02.2011

Transimpedanz Logarithmier Verstärker

Filed under: Allgemein — Tags: , — Thomas @ 22:02

Habe heute einen logarithmischen transimpedanz Verstärker gebaut. Damit kann ich nun recht gut das Signal der Biegesensoren messen. Vom max. Lichteinfall bis Dunkel gibt es eine Spannungsänderung von 2V + Offset. Damit bin ich auch ganz zufrieden. Noch den Offset weg machen und schon kann man das Signal digitalisieren.

Mein Problem: ist es dunkel, oder entferne ich den Fototransistor aus dem Aufbau, schwingt das Ausgangssignal bei 500mV 100kHz. Es muss wahrscheinlich irgendein Kondensator irgendwohin.

Aber für heute ist erstmal genug gebastelt worden

datenhandschuh_verstaerker1

Ultraschall Empfänger Verstärker

Filed under: Allgemein — Tags: — Thomas @ 18:02

Heute habe ich zur Übung einen Verstärker für Ultraschall Kapseln gebaut. Die Kapsel hat die Bezeichung R291 und hat eine Resonanzfrequenze von 40kHz. Da das eine Art Kristallmikrofone ist, und die sehr hochomig sind, braucht man einen Verstärker mit einem hohen Eingangswiderstand. Ein Operationsverstärker mit nicht-invertierender Beschaltung ist genau das Richtige.

Meine vorherigen Experimente mit dem invertierenden Verstärker brachten nur mangelhalfte Ergebnisse. Auch habe ich im Laufe des Tages einen Bandpass für 40kHz berechnet. Allerdings wird man ihn kaum brauchen.

Der Bandpass hat nur eine Verstärkung von 7. Zwar könnte man die Verstärkung vergrößern, dazu müsste man aber die Kondensatoren verkleinern. Und da ich schon bei 1nF bin... Habe die Schaltung auch nur schnell zusammen gesteckt. Und ich denke kleiner als 1nF sollte man da nicht gehen, wenn man keine komischen Probleme bekommen will.

Für den Impedanzwandler habe ich eine Verstärkung von 21 genommen. Damit kommt man auf eine Gesammtverstärkung von etwa 147. Ein 20mV schwaches Signal am Eingang würde also ein ca. 3V starkes Signal am Ausgang bewirken. In der Praxis funktioniert das auch wunderbar :) Als Operationsverstärker habe ich den Tl074 verwendet. Siehe Schaltplan.

ultraschallempfängerverstärker1

Besser wäre es, man könnte statt des Bandpass ein logarithmischen Verstärker nutzen um die Dynamik des Eingangs zu verbessern. Allerdings funktioniert der bei mir nie wirklich.

Sachen die mir heute noch aufgefallen sind:
Ultraschall Kapseln als Sender mögen nur ein Tastverhältnis von 50/50. Weicht man davon nur ein wenig ab, sendet er garnichts mehr.
Bei meinem Versuchen speise ich den Sender mit 5V. Und das ist wohl "ganz schön laut". Als der Verstärker fertig war, gab es immer ein Signal im Empfänger. Egal wie gut ich die Empfängerkapsel abgedeckt habe.

18.02.2011

Welcher OP AMP?

Filed under: Allgemein — Tags: , — Thomas @ 13:02

Bin auf der Suche nach einem aktuellen 4fach Operations Verstärker und habe Null Anhaltspunke, nach was ich mich da orientieren soll. Bei irgendso einem Schaltplan der mir in die Hände gefallen ist, wurde ein TL072 benutzt. Der TL074 ist dann die 4-fach Ausgabe. Dann giibt es aber auch noch den TL084. Wieder 4-fach. Aber wo ist der Unterschied?

Habe mir also die Datenblätter runtergeladen und muss nun ganz dumm fragen: wenn ein Wert größer ist, ist das besser oder schlechter? Lustigerweise gibt es darauf sogar Antworten: http://forum.mosfetkiller.de/viewtopic.php?f=2&t=5830&view=previous

Momentan tendiere ich zu dem TL074 / TL084 (4-fach) ca. 1Eur und dem wohl besseren CA3240E (2-fach) für 4Eur. Werde einfach beide kaufen und testen, welcher für mich besser ist.

Logarithmischer Verstärker

Filed under: Allgemein — Tags: , — Thomas @ 03:02

Es gibt logarithmische Verstärker (log amp) um ein lineares Signal aus einem logarithmischen zu erhalten. Leider sind einzelne ICs die das gut können sehr teuer, 15Eur-100Eur. Aber im Netz kursieren einige Beispiel, wie man einen selbst bauen kann.
Der Aufbau ist sehr einfach (siehe Bild). Und funktioniert auch irgendwo brauchbar. Die Ausgangsspannung ändert sich rech linear zur Eingangsspannung. Was in meinem Fall der Winke vom Biegesensor ist.

Amp-log

Allerdings schwankt bei mir die Ausgangsspannung nur um 200mV und hat noch einen Offset von 400mV. Das Signal muss also verstärkt werden. Nur bin ich zu geizig noch mehr OPs einzubauen. Die Atmel Mikrocontroller haben doch auch Verstärker vor dem ADC Eingang liegen. Das wird wohl das nächste Experiment werden :)

Demnächst muss ich aber mal neue OP AMPs kaufen. Der 741 ist doch etwas alt.

16.02.2011

Biegesensor

Filed under: Allgemein — Tags: , — Thomas @ 23:02

Demnächst will ich mal probieren, eine Art Datenhandschuh zu bauen. In erster Linie die Bewegung der Finger erkennen und am Rechner darstellen. Dazu habe ich heute eine Art Biegesensor gebaut.

Den Sensor besteht aus einer LED, einem Stück (Schrumpf-) Schlauch und einem Fototransistor. Ist der Schlauch gerade, kann das Licht ungehindert passieren und den Transistor voll durchschalten. Wird der Schlauch gebogen, gibt es Refelktionen, wodurch das Licht an Intensität verliert. Der Fototransistor schaltet nur noch weniger hindurch.

Misst man den Strom in Abhänigkeit des Verbiegewinkels, sollte eine e-Funktion herauskommen. Ohne Begründung. Die ersten Messungen scheinen das zu bestätigen.

Als Schrumpfschlauch habe ich durchsichtigen, sehr flexiblen benutzt. Werde noch den Mantel mehradriger Kabel ausprobieren. Aber es zeigen sich schon die ersten Probleme. Bei sehr kleinen Biegeradien, oder große Winkel, bekommt man pro Winkeländerung kaum noch eine Stromänderung. Ist also schlecht zu messen. Vorallem am Finger gibt es kleine Biegeradien und Winkel bis 90Grad etwa.

Aber ich freue mich, dass der erste Versuch so gut funktioniert. Mal sehen was die Zukunft bringt.

Auf dem Bild ist leider kaum etwas zu erkennen. Rechts die LED, dann der durchsichtige Schlauch und links der Fototransistor. Der Fototransistor empfängt auch (künstliches) Umgebungslicht und überlagert das eigentliche Signal mit einem 50Hz Störsignal. Entweder malt man den Schlauch mit einem Edding schnell schwarz an, oder macht eine Fouriertransformation des digitialisierten Signals und verwirft die 50Hz komponente :>

snap-20110216-222140-0

14.02.2011

OpenCV death (hot) Pixel im Bild entfernen

Filed under: Allgemein — Tags: , — Thomas @ 14:02

Da meine ca. 11 Jahre alte Webcam mitlerweile ein paar kaputte Pixel hat, die einfach nur weiß sind, habe ich mir überlegt was man dagegen tun kann. Eine Möglichkeit wäre, die Pixel zu erkennen und durch den Median der umliegenden Pixel zu ersetzten.

Um die Pixel zu erkennen macht man einfach ein paar Aufnahmen im dunkeln (oder hält die Hand vor die Kamera). Die kaputten Pixel heben sich deutlich vom Mittelwert ab. Anschliessend kann man das Bild binarisieren. Eine brauchbare Schwelle ist Mittelwert + 3 * Standardabweichung. Dann kommen wirklich nur Ausreisser durch. Anschliessend werden diese Pixel im original Bild durch ihren Median ersetzt.

Die Umsetzung in OpenCV ist etwas eklig. Es müssen mehrere Zwischenbilder erstellt werden. Und vorallem akzeptiert die Filterfunktion keine Masken. Es kann also nur auf das gesammte Bild der Median angewand werden. Wenn man aber anschliessend alle nicht-kaputten Pixel wieder zurück kopiert, ist das Resulatat das selbe.

hotPixelRemoval

Code gibts leider keinen, weil zu unschön von mir umgesetzt. Werde mich demnächst mal mit OpenCV Version 2 beschäftigen. In der Hoffnung, dass man dort das ganze schöner umsetzten kann.

250g Last

Filed under: Allgemein — Thomas @ 13:02

Nach einigen Reperaturarbeiten ist der Heli wieder startklar. Es musste "nur" ein Gewinde nachgeschnitten werden, welches ein Zahnrad an der Welle befestigt.

Meine Kamera wiegt 250g. Leider hebt er sie nicht mehr hoch. Wäre der Akku niht 80g schwerer als der original Akku, würde es bestimmt klappen.

Hier ein Video
http://www.dailymotion.com/video/xeisye_250g-last_tech

12.02.2011

CUDA

Filed under: Allgemein — Thomas @ 16:02

CUDA mini install HowTo
http://roboblog.fatal-fury.de/?p=477

Ein paar Fehlermeldungen die mir so begegnet sind

all CUDA-capable devices are busy or unavailable

KA. Einfach den Rechner oder X neustarten.

CUDA Install mini HowTo

Filed under: Allgemein — Tags: , — Thomas @ 16:02

CUDA Install mini HowTo

0.0 Lesenswertes

1.0 Installation
1.1 Download
1.2 SDK instalieren
1.3 Beispiele instalieren
1.4 Nvidia Treiber installieren

2.0 Installation testen

3.0 Fehler beim compilieren der Beispiele

0.1 Lesenswertes

Der "Linux getting started guide" auf der Nvidia download Seite ist sehr zu empfehlen!
http://developer.nvidia.com/object/cuda_3_2_downloads.html#Linux
http://developer.download.nvidia.com/compute/cuda/3_2_prod/docs/Getting_Started_Linux.pdf

Des weiteren arbeite ich gerade das Buch "Cuda By Example" was es aber leider nicht umsonst gibt.

1.0 Installation
1.1 Download

Ihr braucht die passenden Nvidia Treiber, das CUDA SDK und die Beispiele.

"CUDA Toolkit for Ubuntu Linux 10.04"
http://www.nvidia.com/object/thankyou.html?url=/compute/cuda/3_2_prod/toolkit/cudatoolkit_3.2.16_linux_64_ubuntu10.04.run

Beispiele "GPU Computing SDK code samples"
http://developer.download.nvidia.com/compute/cuda/3_2_prod/sdk/gpucomputingsdk_3.2.16_linux.run

Nvidia Developer Drivers for Linux (260.19.26)
http://developer.download.nvidia.com/compute/cuda/3_2_prod/docs/Getting_Started_Linux.pdf

1.2 SDK installieren

Die Dateien mit chmod +x ausfuehrbar.
Ich empfehle dringend jetzt schon den started guide zumindest ueberflogen zu haben. Man spart einfach eine Menge Zeit bei der Fehlersuche.

Installiert das SDK
./cudatoolkit_3.2.16_linux_64_ubuntu10.04.run

Beachtet die Meldungen bei der Installation. Am Ende kommt der Hinweis, dass ihr die PATH und LD_LIBRARY_PATH
Variable und richtig setzten muesst. Sonst wird der Compiler und die Libs nicht gefunden spaeter.

Bei mir ist das Installationsverzeichnis /usr/local/cuda also muesst ihr die PATH Variable nach /usr/local/cuda/bin setzen
export PATH=$PATH:/usr/local/cuda/bin
und
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH

1.3 Beispiele installieren

Das installieren der Beispiele ist unkritisch.

./gpucomputingsdk_3.2.16_linux.run

1.4 Nvidia Treiber installieren

Die nvidia Treiber installation ist meist immer mit etwas Aufwand verbunden wenn kein reines Debian System verwendet wird.
Folgende Seite gab mir wertvolle Tipps
http://www.ubuntugeek.com/howto-install-nvidia-drivers-manually-on-ubuntu-10-04-lucid-lynx.html

1)
Folgende Module

blacklist vga16fb
blacklist nouveau
blacklist rivafb
blacklist nvidiafb
blacklist rivatv

in die /etc/modprobe.d/blacklist.conf eintragen.

2)
Nvidia Kram deinstallieren
sudo apt-get --purge remove nvidia-*

3) Wenn die oben genannten Module noch geladen sind, schlaegt die Installation des Nvidia Treibers fehlt.
Also Module von Hand entfernen oder neustarten. Nach einem Neustart kann es sei, dass X nicht mehr funktioniert.
Aber das ist nicht schlimm, wir muessen eh auf die Konsole wechseln. Also den Knopf choose Exit to terminal (Exit to console) irgendwo finden oder klassisch mit STRG+ALT+F2 auf eine Konsole wechseln.

4) Sicherstellen dass kdm gdm etc (der Loginmanager) nicht mehr laeuft.
sudo service kdm stop
sudo servide gdm stop

Oder welchen Loginmanager ihr auch immer verwendet.

5) Nun kann der Nvidia Treiber installiert werden.
./devdriver_3.2_linux_64_260.19.26.run

Einmal beten dass alles gut laeuft, wenn nicht -> google.
Am Ende bietet uns der Installer an nvidia-xconfig auszufruehen, ja bitte.

6) Den Loginmanager wieder starten
sudo service kdm start
sudo service gdm start

Bei Fehler kann ich nur Raten den started guide einmal durchzulesen und nach der Fehlermeldung zu googlen.
Oft fehlen Compiler / Kernelsourcen um den Treiber zu komplilieren. Die muessen dann nachinstalliert werden.

2.0 Installation testen

Wie im started Guide beschrieben, nach ~/NVIDIA_GPU_Computing_SD/C wechseln und mit make die Beispiele compileren.

3.0 Fehler beim compilieren der Beispiele

1)
/usr/bin/ld: cannot find -lXi
Xorg lib fehlt
apt-get install xorg-dev

2)
/usr/bin/ld: cannot find -lglut
glut lib fehlt
apt-get install glutg3-dev

3)
/usr/bin/ld: cannot find -lcuda
Diese Fehlermeldung hat mich eine ganz weile lang aufgehalten. Erstmal ueberpruefen ob die Datei libcuda.so ueberhaupt exitiert. Sie wird bei der Nvidia Treiber installation erstellt. Bei mir befindet sie sich unter

kater@tesla:~$ find /usr/ -iname "*libcuda.so*"
/usr/lib/libcuda.so.260.19.26
/usr/lib/libcuda.so.1
/usr/lib/libcuda.so
/usr/lib32/libcuda.so.260.19.26
/usr/lib32/libcuda.so.1
/usr/lib32/libcuda.so

Bei der letzten Installation war es noch
/usr/lib/nvidia

Ist die Datei da, kommt der Linkerfehler aber immer noch, liegt die Datei in einem Verzeichnis welches nicht vom Compiler durchsucht wird. Es sollte unter /etc/ld.so.conf.d/ eigentlich eine Datei Namens GL.conf existieren, in welcher das entsprechende /usr/lib/nvidia Verzeichnis steht. Wenn nicht, tragt es dort ein und führt ldconfig aus.

Alternativ kann man dem Compiler mit -L/usr/lib/nvidia das Verzeichnis mit geben.

4) undefinded reference - Fehler
Die bekam ich, als die *buntu Nvidia Treiber Version noch installiert war. Sie war zu alt.
Nehmt wirklich die neuste die auf der Cuda Downloadseite auch angeboten wird.

« Newer PostsOlder Posts »

Powered by WordPress