Zum Inhalt springen

www.hotcar.de

Modellbau, Robotik, Mikrocontroller

Archiv

Tag: Mikrocontroller

Gefunden bei Golem. Unter lirec.eu findet ihr mehr Infos zum Thema "vermenschlichte" Roboter :-)

Wie schon im letzten Beitrag erwähnt wollte/habe ich mir den RA-1 Pro zugelegt. Roboterarme faszinieren mich schon lange und die Gelegenheit einen fertigen, noch dazu aus Alu zu bekommen war verlockend.

Geliefert wird er Teilmontiert in drei großen Baugruppen, Einmal der Sockel, einmal der Arm und einmal der Greifer.

Schon auf den ersten Blick konnte man sehen wie schlampig er verarbeitet ist. Keine Schraube war vernünftig angezogen und die ganze Konstruktion scheint irgendwie nicht zu passen.  Dazu kommt das die Servos schon deutliches Spiel haben, auch nicht sehr vertrauenswürdig aussehen und das gesamte Gewicht des Arms auf der Achse des Drehservos lastet. Das kann auch die Dauer nicht funktionieren.

Ich habe ihn dann doch weiter zusammengebaut, als die Mechanik soweit fertig war und es ans anschließen der Servos ging, stellte ich fest das die nicht in die entsprechenden Buchsen auf der Platine passten. Mit etwas Gewalt ging es dann doch, jedoch ist nirgendwo beschreiben wie herum sie angeschlossen werden. Das Durchmessen der Masseleitung zeigte mir zumindest mal wie sie angeschlossen werden.

Soweit sah das nun also gut aus und ich legte Spannung an. Die nächste Hürde war der Einschalter, der diesen Namen nicht verdient, ein wackeliges etwas das man am besten gleich austauscht. Spannung lag nun also an, es blinkt etwas und von den Servos ist nichts zu hören. Aus meiner Modellbauerfahrung weiß ich das die Servos nach einschalten der Spannung ein klein wenig bewegen. Hier kam aber nichts. Ein genauer Blick auf die Platine zeigte das wohl dem Transistor der die Servospannung einschaltet ein Bein fehlt. Kann also nicht funktionieren.

Das könnte man auch noch beheben also weiter, die Software installiert, den Programmieradapter angeschlossen, der auch gleich erkannt wird. Das nun angeschlossene Board aber nicht. Hier war meine Geduld dann auch am Ende. Ich habe das ganze wieder zerlegt und es ging am nächsten Tag zurück. Wie ich im Nachhinein im Arexx Forum gelesen habe bin ich wohl auch nicht der erste der sehr enttäuscht vom RA1-Pro ist.

Meine letzten versuche ein eigenes einfaches  Message Protokoll zur Datenübertragung PC <> Arduino zu schreiben waren nicht besonders erfolgreich. Diverse Probleme mit der Fehlererkennung brachten mich dazu doch lieber im Netz nach einer fertigen Lösung zu suchen.

Gefunden habe ich Firmata, ein auf MIDI basierendes Protokoll, für das es auch fertige Libraries für Arduino und Processing gibt.

Processing basiert auf Java und da ich lieber in Eclipse programmiere, habe ich die Processing libraries dort eingebunden und verzichte so auf die mitgelieferte  IDE.

Arduino Firmware

Als ersten Schritt habe ich das Arduino Board mit der Firmata Firmware bestückt. Die findet man im Examples Ordner der Arduino IDE.

Eclipse Projekt

Die nächsten Schritte betreffen die Vorbereitung des Eclipse Projekts:

  1. Erstellen eines Java Projekts
  2. Den Java Buildpath um die benötigten Libs erweitern
    1. Prozessing Core  (\processing-1.0.9\lib\core.jar)
    2. Serial  (\processing-1.0.9\libraries\serial\library\serial.jar)
    3. RXTXcomm (\processing-1.0.9\libraries\serial\library\RXTXcomm.jar)
    4. Arduino  (download von http://www.arduino.cc/playground/uploads/Interfacing/processing-arduino-0017.zip )
    5. Die reichen erst einmal für anfängliche Tests, vermutlich braucht man später noch mehr.
  3. Die eigene Klasse erweitert processing.core.PApplet und überschreibt die setup() und die draw() Methode.  So ist es schon lauffähig  und man bekommt ein kleines Applet Fenster.
import processing.core.*;
import cc.arduino.*;
 
public class arduino_blink extends PApplet
{
	public void setup()
	{
	   //TODO
	}
 
	public void draw()
	{
	   //TODO
	}
}

Blink App

Jetzt eine einfache kleine Blink Applikation in Eclipse.

import processing.core.*;
import cc.arduino.*;
 
public class arduino_blink extends PApplet
{
	private Arduino arduino = null;
	private int ledPin = 13;
	private int state = Arduino.LOW;
 
	public void setup()
	{
		arduino = new Arduino(this, Arduino.list()[1], 57600);
		arduino.pinMode(ledPin, Arduino.OUTPUT);
	}
 
	public void draw()
	{
		try
		{
			if (state==Arduino.LOW)	state = Arduino.HIGH;
			else state = Arduino.LOW;
 
			arduino.digitalWrite(ledPin, state);
			Thread.sleep(1000);
		}
		catch (InterruptedException e)
		{
			e.printStackTrace();
		}
	}
}

Eigentlich schon selbsterklärend. In der setup Methode wird ein Arduino Objekt erzeugt. Dem wird über this eine Instanz von PApplet, der Serielle Port und die Bautrate übergeben.

Über das Arduino Objekt kann man dann den LED Pin 13 auf Ausgang stellen.

Weiter geht es in der draw Methode, die kontinuierlich durchlaufen wird. In einer if/else abfrage wird der "state" zwischen High und Low  gewechselt und im Arduino gesetzt. Zuletzt wird noch eine Sekunde in einem Thread.sleep gewartet. Da dieser auch eine Exception werfen kann muss noch ein try/catch drumherum und fertig ist die Blink Applikation.

SWT Applikation

Zuletzt dann noch eine SWT Anwendung. Die SWT Lib (swt-win32-3139.jar) muss noch zum Buildpath hinzugefügt werden. Im Beispiel schaltet ein Toggle Button die LED des Arduino an und aus.

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
 
import processing.core.*;
import cc.arduino.*;
 
public class Arduino_test2
{
	private Arduino mArduino = null;
	private int mLedPin = 13;
	private PApplet mPApplet=null;
	private int mState=Arduino.LOW;
	private Button mButton= null;
 
	public static void main(String[] args)
	{
		Arduino_test2 a= new Arduino_test2();
	}
 
	private Arduino_test2()
	{
		Display display = new Display();
	    Shell shell = new Shell(display);
	    shell.setText("Arduino_test2");
	    shell.setSize(200, 150);
	    initArduino();
	    initGui(shell);
	    shell.open();
	    while(! shell.isDisposed()) {
	      if(! display.readAndDispatch())
	      {
	        display.sleep();
	      }
	    }
	    mPApplet.exit();
	    display.dispose();
	}
 
	private void initGui(Shell shell) {
		shell.setLayout(new RowLayout());
	    mButton = new Button(shell, SWT.TOGGLE);
	    mButton.setText("on");
	    mButton.addSelectionListener(new SelectionAdapter() {
	          public void widgetSelected(SelectionEvent e) {
	        	  if (mButton.getSelection())
	        		  mState=Arduino.HIGH;
	        	  else
	        		  mState=Arduino.LOW;
 
	        	  updateArduino();
	            };
	          });
	}
 
	private void updateArduino() {
		mArduino.digitalWrite(mLedPin, mState);
	}
 
	private void initArduino()
	{
		mPApplet = new PApplet();
		mPApplet.init();
		mArduino = new Arduino(mPApplet, Arduino.list()[1], 57600);
		mArduino.pinMode(mLedPin, Arduino.OUTPUT);
	}
}
 

...

IMG_3871Da ich die Arduino Shields komplett ohne Dokumentation bekommen habe, musste ich mal wieder Google bemühen und fand hier zumindest eine grobe Übersicht mit einigen Beispielprogrammen. Wie man dort auf Seite 12 sieht ist es doch nicht so einfach alle Shields zusammen zu stecken und davon auszugehen das alles läuft. Das Arduino Board hat "nur" 13 digitale Pins die sich alle Shields teilen müssen.

Probleme bekam ich aber auch noch von anderer Seite. Für Roboter "Daisy" verwende ich das Motor und das I/O Shield um mit letzterem ein paar Servos anzusteuern. Sobald ich aber ein Servo.attach(x) aufrief, lief einer der Motoren nur noch in eine Richtung.
Nachdem ich mir den Schaltplan der Schaltung aufgemalt hatte sah ich auch warum. Für enable1 des L293 wird Pin 9 verwendet. Die Pins 9 und 10 kann man zusammen mit der Servo Lib aber nicht verwenden.

Hier ein Auszug aus der Doku:

"This library uses a 16 bit timer for each group of 12 servos so PWM output with analogWrite() for pins associated with these timers are disabled when the first servo is attached to the timer. For example on a standard Arduino board, Timer1 is used, so once you attach a servo, analogWrite on pins 9 and 10 are disabled."

IMG_3881Da ja noch einige PWM Ausgänge übrig sind verwende ich statt Pin9 nun Pin3. So arbeiten Servos und Motor Shield zusammen, nur nach einem Reset läuft der Motor gleich los bis ich ihn ausschalte. Aber damit kann ich ersteinmal leben.

Jetzt kommt das nächste Problem, zwei Servos mit dem Spannungsregler des Arduno Boards versorgen funktioniert nicht. Es gibt sporadische Resets weil die Spannung zusammenbricht. Ist aber auch kein großes Problem,  ich muss nur eine extra Spannungsversorgung in Form eines weiteren 7805/2940 einbauen oder sie einfach nacheinander ansteuern.


Hier noch ein preview auf "Daisy", mehr in kürze.

IMG_3873



bluetoothIn meinem zuletzt gekauften Arduino Paket war auch ein auf ds I/O shield passenendes Bluetooth Modul von DF-Robot nebst einem USB-Bluetooth Modul für den PC.

Zeit es zu testen. Als erstes mal das USB Modul in den PC. Am Vista Laptop lief es erst nicht. Der Hersteller Toshiba hatte irgendwelche wilden Bluetooth Stacks installiert.Nachdem ich mir hier Updates geholt hatte lies sich aber Problemlos eine Verbindung zum Handy aufbauen.

Weiter zum PC, hier lief es besser.  XP hat alles selbst konfiguriert und nach kurzer Zeit hatte ich ein Bluetooth Symbol in der Taskleiste und konnte mich auf der suche nach Geräten machen.

Also das Arduino Board mitsamt dem Bluetooth Modul unter Spannung gesetzt und kurze Zeit später zeigt der PC das neue Gerät und verlangt den Hauptschlüssel.  Ähhh Schlüssel... wo ist die Doku... war keine dabei... also ab ins www... Google weiß ja einfach alles, auch den Hauptschlüssel  "0000".  Hätte ich auch selbst drauf kommen können :-)

Noch schnell ein kleines Hello World auf das Board geflasht und los geht es. Das Bluetooth Fensterchen zeigt mir zwei COM Ports, einmal "eingehend" und einmal "ausgehend", wo da der Unterschied ist muss ich noch heraus finden, auf jeden Fall bekam ich auf dem zweiten "ausgehenden" Port die Daten vom Arduino.

bluetooth_sharpSoweit zum ersten Bluetooth Test, natürlich habe ich das Board gleich in die entlegenste Ecke der Wohnung getragen, Empfang war aber immer gegeben.

Wo ich jetzt schon Kabellos Daten übertragen kann, muss der Arduino natürlich auch beweglich werden. Ein wenig Makrolon, ein paar Schrauben und zwei gehackte Servos später stand ein neues Fahrgestell auf zwei alten 1/10 Rädern.

Für den Arduino habe ich eine Art Grundplatine gebaut, mit der ich jetzt auch noch zwei Shield nebeneinader aufbauen kann. Hier noch ein Bild der ersten Datenübertragung eines Sharp Infrarotsensors mit Anzeige auf dem LCD und im Hyperterminal.
Zum komfortablen Datenaustausch habe ich noch eine kleine JAVA Applikation geschrieben, mit RXTX , einfacher SWT GUI und einem simplen Message Protokol. Dazu mehr in einem späteren Artikel.


IMG_3835

IMG_3838


IMG_3828Die Tage werden Kürzer, die Autos werden in den Winterschlaf geschickt, zeit für mein zweites Hobby "Mikrocontroller".

Und zu dem Thema habe ich habe wieder etwas neues gefunden: Die Arduino Plattform.

Die Idee dahinter ist es einen einfache Hardware mit sehr gutem Framework und einfacher erweiterbarkeit zu schaffen. Hier ein Auszug aus Wikipedia

Die Arduino-Plattform ist eine aus Soft- und Hardware bestehende Physical-Computing-Plattform. Beide Komponenten sind im Sinne von Open Source quelloffen. Die Hardware besteht aus einem einfachen I/O-Board mit einem Mikrocontroller und analogen und digitalen Ein- und Ausgängen. Die Entwicklungsumgebung beruht auf Processing und Wiring, (Java-Dialekten), die insbesondere Künstlern, Designern, Hobbyisten und anderen Interessierten den Zugang zur Programmierung und zu Mikrocontrollern erleichtern soll. Arduino kann benutzt werden, um eigenständige interaktive Objekte zu steuern oder um mit Softwareanwendungen auf Computern zu interagieren (z. B. Adobe Flash, Processing, Max/MSP, Pure Data, SuperCollider, diversen Skriptsprachen, Terminal, vvvv etc.). Arduino wird intensiv an Kunsthochschulen genutzt, um interaktive Installationen aufzubauen.

Dazu dann noch die Erklärung zu Physical Computing

Physical Computing bedeutet im weitesten Sinne, interaktive, physikalische Systeme durch die Verwendung von Hardware und Software zu erstellen. Diese Systeme reagieren auf Ereignisse in der realen, analogen Welt und/oder wirken auf sie ein. Obwohl diese Definition auch auf automatische Verkehrskontrollsysteme zutrifft, wird sie in diesem Zusammenhang nicht verwendet. Unter Physical Computing werden Systeme verstanden, die sich mit der Beziehung zwischen dem Mensch und der digitalen Welt befassen. Der Begriff wird meistens für Projekte mit einem künstlerischen oder Designhintergrund oder für Do it yourself Hobbyprojekte verwendet. Dabei werden Sensoren und Mikrocontroller verwendet, um analoge Eingaben Software-Anwendungen verfügbar zu machen und/oder elektromechanische Geräte, wie Motoren, Servos, Leuchtdioden oder andere Hardware steuern.

 

IMG_3825Soviel zur Theorie, nachdem ich dann noch diverse Webseiten zu dem Thema besucht habe stand Fest so ein Arduino muss ins Haus.

Nach einigem Suchen bin ich bei Ebay UK (wo auch sonst) auf einen Händler (jzhaoket) gestoßen der ein für mich passendes Paket geschnürt hat.

Mit dabei waren:

  • 2x Arduino Duemilanove kompatible Boards

und die Shields (Shields sind die Zusatzboards die sich einfach auf das Hauptmodul stecken lassen)

  • Bluetooth Module
  • Keypad
  • I/O Expansion
  • Motor Drive Shield
  • Ethernet Shield

Ich bin also für alle Eventualitäten gerüstet. Angefangen vom einlesen aller möglichen Sensoren (1wire, I2c,digital,analog) über das Steuern von Motoren, Servos (6xPWM, digital), das Anbinden an den PC (usb, Ethernet,Bluetooth), bis hin zum Userinterface bestehend aus 2x16 Zeichen Display mit einer einfachen Tastatur.

Auf einem Donnerstag gekauft und per PayPal bezahlt, noch am gleichen Tag in UK aufgegeben, mit der gleichzeitigen  Entschuldigung das es wohl länger dauert weil royal mail's zwei Tage streikt, wurde es am Mittwoch der nächsten Woche durch die Post geliefert. Besser geht es fast gar nicht.

Doch, es geht noch besser, der Verkäufer schickt mir, ungefragt, auch noch ein paar Kabel hinterher. Weil man das Keypad Modul sonst nicht mit den anderen Buards nutzen kann.

Ich bin mehr als zufrieden.

Jetzt geht es daran die IDE und alles drumherum zu installieren. Ich werde weiter berichten.

Hier noch ein paar Links zum Thema:

Projekte:

Ich habe mich mal wieder ein wenig im Netz herumgetrieben und die eine oder andere interessante Seite gefunden.

Eine Seite zum Thema US-Cars:

http://www.AmeriCar.deAmericar

- das aktuelle Online-Magazin für alle US-Car-Enthusiasten!

Eine kostenlose  Seite rund um amerikanische Autos. Mit Community, Bildergalerie, Berichte von deutschen Treffen und natürlich auch Auto Vorstellungen.

In das 33er Ford Coupe oder den 36er Chevy PickUp habe ich mich gleich verliebt.



Dann noch eine Seite zum Thema RC-Crawler/Scaler:

RC-Maniac.de

ich hoffe mal nicht das "DISCONTINUED" heißt das die seite geschlossen wird. Es wäre schade um die wirklich lesenswerten Berichte und Bilder der verschiedenen Crawler Treffen.

Sei es die Erstbesteigung des Drachenfels oder die Berichte der verschiedenen Super Crawls.

http://www.rc-maniac.de



Und zuletzt noch eine zum Thema Elektronik:

HackaDayHack A Day

Was kann man alles mit ein wenig Elektronik und anderer Hardware anstellen. Den Begriff "Hack" muß man hier einfach mit "verändern" oder "umbauen" übersetzen. Die Seite hat nichts mit den bösen Computerhackern zu tun, eher wirken die meisten Sachen ein wenig verrückt. z.b. der "Bristle Bot" oder was mache ich mit der alten Zahnbürste :)

websiteNachdem ich lange mit dem alten Template gekämpft und versucht habe es auf schnelle Ladezeit zu tunen, gebe ich mich nun geschlagen und verwende ein anderes Theme. Zum Glück ist das in WordPress ja mit einigen Handgriffen erledigt. Basis ist das Theme "Fusion 3.0.3" von digitalnatur, allerdings habe ich das eine oder andere verändert.

Diese Fein Tuning dauert noch ein wenig an. Wenn es also in den nächsten Tagen mal zu Fehlern und ausfällen auf der Seite kommt schaut später noch einmal rein. Dann bin ich wahrscheinlich wieder am basteln.

Übrigens habe ich kürzlich ein nettes Video von einer Mikrocontroller gesteuerten Maschine gefunden. Ist schon erstaunlich auf was für Ideen man kommt wenn man Langeweile hat :-)



Ein ganz anders Kaliber ist da schon (der übrigens nicht ferngesteuere) Hexapod von Matt Denton.

Mehr gibt es bei youtube .

Die Firma micromagicsystems hat auch diverse Charactere und Animatronics für die Filmindustrie und auch für die Harry Potter Filme gebaut.