Upload
phamminh
View
222
Download
0
Embed Size (px)
Citation preview
Hovercraft
H o c h s c h u l e R u h r W e s t
E m b e d d e d S y s t e m s
P r o f . M i c h a e l S c h ä f e r
W i n t e r s e m e s t e r 2 0 1 1 / 1 2
Jan Eberwein - Matrikelnummer: 10000198
Thorsten Tatarek – Matrikelnr.:10000179
Die Lehrveranstaltung „Embedded Systems“ wird in Form
von Vorlesungen und Praktika abgehalten. In den
Vorlesungen werden Theorien zur Microcontroller
Programmierung, elektronischen Bauteilen und ähnliches
erläutert. Im Praktikum werden diese Themen vertieft,
indem an verschiedenen „Projekten“ gearbeitet wird. Bei
dem Hovercraft handelt es sich um ein Semesterprojekt.
Diese Ausarbeitung beschäftigt sich primär mit der
Entwicklung des Hovercrafts und sekundär mit anderen
Themengebieten die mit in das Projekt eingeflossen sind.
Projektdokumentation - Hovercraft
1 | S e i t e
Inhaltsverzeichnis
Inhaltsverzeichnis ___________________________________________________________ 1
Vorwort ___________________________________________________________________ 2
Danksagung ____________________________________________________________________ 2
Hinweise ______________________________________________________________________ 2
Einführung Hovercraft _______________________________________________________ 3
Projektthema: Hovercraft ________________________________________________________ 3
Hovercraft Bauteile ______________________________________________________________ 3
Arduino Entwicklerumgebung _____________________________________________________ 8
Ablauf des Praktikums ___________________________________________________________ 9
Schaltungsaufbau _______________________________________________________________ 9
Steuerung des Hovercrafts _______________________________________________________ 11
Einführung der Programmierung __________________________________________________ 12
Optimierung: Zwei PWM Signale parallel senden_________________________________ 14
Hovercraft Erweiterung – Ultraschall __________________________________________ 15
Was ist Ultraschall / Theorie _____________________________________________________ 15
Sensormechanik und Schaltungsaufbau ____________________________________________ 17
Programmierung _______________________________________________________________ 18
Anwendung der Sensorinformation ________________________________________________ 19
Programmablauf___________________________________________________________ 20
Projektergebnis ____________________________________________________________ 21
Bilderverzeichnis ___________________________________________________________ 22
Literaturverzeichnis ________________________________________________________ 22
Genutzte Programme _______________________________________________________ 22
Anhang __________________________________________________________________ 23
Aufgabenteilung ___________________________________________________________ 23
Projektdokumentation - Hovercraft
2 | S e i t e
Vorwort
Danksagung Hiermit möchten wir uns dafür bedanken, dass Herr Professor Michael Schäfer, Leiter der Vorträge
und des Praktikums im Fach Eingebettet Systems (engl.:embedded Systems), dieses interessante
Praktikum mit uns Studierenden durchgeführt hat.
Des Weiteren möchten wir uns bei Robert Reichert bedanken, der viele Stunden damit verbracht hat
Bastelmaterialien und Elektronik zu sammeln um daraus für jede Studierendengruppe ein Hovercraft
zu bauen (das „Verkabeln“ war aber noch unsere Aufgabe).
Prof. Schäfer, Herr Reichert sowie die Hochschule Ruhr West haben alles was im Praktikum
verwendet wurde für uns ohne Kosten bereitgestellt. Es ist nicht selbstverständlich das Hardware von
über 70 Euro an jede Studentengruppe ausgehändigt wird. Natürlich werden alle Materialien
zurückgegeben.
Eine weitere Danksagung geht an Stefan Janssen von der Fachhochschule Südwestfalen, einen
Studenten, der zu der Zeit des Praktikums an seiner Masterarbeit gearbeitet hat. Er ist jeden Montag
über 50 Kilometer gefahren um uns das Programmieren von Microcontrollern und das Verwenden
des Programmes EAGLE zur Erstellung von Leiterplatinen und Schaltbildern beizubringen.
Hinweise Alle in diesem Dokument angebenden Daten und Internetadressen waren gültig vor dem
19.3.2012. Änderungen der Quellen sind nicht ausgeschlossen.
In dieser Dokumentation werden Theorien zu verschiedenen Themen sowie Bauelementen
beschrieben, dabei betrachten wir die Bauteile als ideale Bauelemente.
Projektdokumentation - Hovercraft
3 | S e i t e
Einführung Hovercraft
Projektthema: Hovercraft Das Projekt fand während des ganzen Wintersemesters 2011/12 in Form eines Praktikums statt. Ziel
des Praktikums war es ein Hovercraft zu bauen und die Steuerung über ein Arduinoboard zu
realisieren.
Innerhalb des Praktikums wurde wöchentlich an dem Hovercraft gebastelt und programmiert. Uns
wurde das Hovercraft, welches eigentlich ein Schwimmbrett ist, mit dem vormontierten Rotor für
den Auftrieb gestellt. Außerdem war der Schwenkarm + Rotor bereits vorinstalliert. Das
Arduinoboard stand durch die Aufgabenstellung von vornerein zur Verfügung. Die weiteren
Komponenten (Fahrtenregler, Akku, Steuerung) wurden während des Praktikums zusammen mit
einer „Erweiterung“ installiert und programmiert.
Unsere Hovercraft Erweiterung ist ein Ultraschallsensor, damit eine Frontalkollision automatisch
vermieden wird.
Hovercraft Bauteile Das Hovercraft wurde wie oben beschrieben aus vielen verschiedenen Teilen zusammengebaut und
sieht im Ganzen wie folgt aus.
Akku
Fahrtenregler
Ultraschallsensor
Schaltplatine
Arduinoboard
Schwenkarm + Rotor
Steuerung Analogstick
Rotor für Auftrieb
Abbildung 1 - Hovercraft
Projektdokumentation - Hovercraft
4 | S e i t e
Das Herz des Hovercrafts ist das Arduinoboard auf dem sich der Microcontroller mit der
Programmierung befindet. Der Rotor in der Mitte des Schwimmbrettes sorgt für den benötigten
Auftrieb. Die Bewegung in die gewünschte Richtung übernimmt der Rotor mit dem Servomotor im
Hintergrund. Das ganze System wird über den Akku mit Strom versorgt. Nun werden die einzelnen
Bauteile genauer beleuchtet.
Akku
Kenndaten:
7,2 Volt
1300 mAmpere
Abbildung 2 - Akku
Rotor / Motor
Auf dem folgenden Bild ist der Rotor zu erkennen. Dieser saugt die Luft von oben ein und drückt sie
nach unten. Dadurch entsteht ein Luftkegel der das Hovercraft hochdrückt. Die Geschwindigkeit mit
der sich der Rotor dreht ist fix eingestellt um für einen gleichmäßigen Luftstrom zu sorgen. Der
Motor wird direkt vom Akku mit 7,2V betrieben.
Abbildung 3 - Motor
Projektdokumentation - Hovercraft
5 | S e i t e
Unterseite
Hier ist die Unterseite des Luftbootes zu sehen. Es wurde etwas herausgeschnitten, damit Platz für
die eingesogene Luft verfügbar ist. Es entsteht das sogenannte „Luftkissen“ auf dem das Boot
„schwebt“. Diese Aussparung ist vorhanden, damit der „Luftkisseneffekt“ besser auftreten kann.
Abbildung 4 - Unterseite
Fahrtenregler
Der Fahrtenregler ist für die Ansteuerung des Motors zuständig, er übersetzt ihm gesendete Befehle,
die in Form von Spannungen an den Motor des Schwenkarms anlegt werden. Der Fahrtenregler hat
ein Standard Output für einen Motor und ist außerdem mit dem Akku direkt verbunden.
Kenndaten:
Modelcraft B4230 – Carbon Series (Deutsches Datenblatt im Anhang)
Negatives:
Verfügt über eine Selbstjustierfunktion, führte zu Problemen in der Programmierung
Sperre von Vorwärtsgang in den Rückwärtsgang (erzwingt eine Pause vom Anwender)
Abbildung 5 - Fahrtenregler
Projektdokumentation - Hovercraft
6 | S e i t e
Schwenkarm und Rotor
Dieses Bauteil ist für den Antrieb und für die Lenkung zuständig. Der Rotor sorgt für Schub und drückt
das schwebende Hovercraft nach vorne bzw. nach hinten. Die Schubmenge ist regelbar über einen
Steueranalogstick und ermöglicht eine Dosierung der Geschwindigkeit (genauer Vorgang wird in
dieser Dokumentation folgen). Unter dem Schwenkarm ist ein Servomotor verbaut der das Gestell
dreht und somit die Lenkung ermöglicht. Der Servo wird im nachfolgenden Bild genauer gezeigt.
Kenndaten:
Design des Schwenkarms von Robert Reichert
Hergestellt mit einem 3D-Drucker
Abbildung 6 - Schwenkarm und Rotor
Servomotor
Hier handelt es sich um den oben erwähnten Servomotor. Dieser kippt den Rotor für den Antrieb
nach Links oder Rechts. Wird der Rotor nach Rechts gekippt dreht sich das Hovercraft nach Links und
umgekehrt. Er arbeiten mit der Pulse Weiten Modulation (PWM) welche im Bereich Programmierung
genauer beschrieben wird.
Abbildung 7 - Servomotor
Projektdokumentation - Hovercraft
7 | S e i t e
Analogstick
Im Bild zu sehen ist der Analogstick (beim grauen Kasten handelt es sich nur um ein Gehäuse damit
der Stick besser verwendet werden kann) mit dem sich das Hovercraft bewegen lässt. Er ermöglicht
die Vorwärts- bzw. Rückwärtsbewegung und steuert außerdem den Schwenkarm nach Links und
Rechts mithilfe des Servomotors. Der Analogsticks verfügt über zwei Potentionmeter welche die
Bewegung in X- und Y-Achse erkennen und über die Signalleitung an den Fahrtenregler weitergeben.
Abbildung 8 - Analogstick
Arduinoboard, Schaltplatine, Ultraschallsensor
Nun kommen wir zum Herz des Hovercrafts, das Arduinoboard. Auf diesem befindet sich der
Microcontroller ATMEGA328P-PU. Es verfügt über eine USB-Schnittstelle zur Programmierung die
zudem als Spannungsquelle mit 5 Volt genutzt werden kann (Maximalleistung ist durch die USB-
Schnittstelle begrenzt). Des Weiteren kann das Ardoinuoboard mit einer externen Spannungquelle
über einen Anschlusspin oder Klemme versorgt werden. Die Arduinotechnik ist mittlerweile sehr
beliebt, weil das Gesamtboard so gestaltet wurde, dass sogennante „Shields“ (Erweitungen aus der
Industrie oder privaten Hobbybastlern) sich aufstecken lassen. Ein Shield wäre z.B. das WLAN-Shield
welches genutzt wird um Funkverbindungen einzugehen.
Bei der Arduino-Platform handelt es um ein OpenSource System/Projekt welches somit für jeden
zugänglich ist. Jeder kann eigene Shields entwickeln und kann diese für jedermann zugänglich
machen. Das Board verfügt über 14 digitale I/O-Pins und weitere 6 Pins die direkt an einen Analog-
/Digitalwandler gekoppelt sind.
Wir verwenden ein Shield um unsere spätere Erweiterung nutzen zu können. Dieses Shield ist eine
Schaltplatine und wird auf das Arduinoboard aufgesteckt. Jedes Shield ist so designt das es alle Pins
über mehrere Layer verbindet. Das gute an dem Shield ist, dass man eigene Kabelverbindungen bzw.
eigene Schaltungen erstellen kann. Dies ist genau der Grund weswegen wir dieses Shield für unsere
Erweiterung mit dem Ultraschallsensor verwenden.
Im linken Bild unten ist der Ultraschallsensor zu erkennen. Dieser hat drei Pins
(5V/Ground(GND)/Signal) über die der Sensor betrieben wird. Die Theorie des Ultraschallsensors
wird später noch genauer erläutert.
Projektdokumentation - Hovercraft
8 | S e i t e
Abbildung 9 - Arduino UNO
Ardunioboard Kenndaten:
Board: Ardunio Uno R3
ATMEGA328P-PU
5V Operating Voltage
7-12V Input Voltage
USB-Port
Takt: 16MHz
weiteres Details siehe unter: arduino.cc/en/Main/ArduinoBoardUno
Abbildung 10 - Arduinoboard, Schaltplatine, Ultraschallsensor
Arduino Entwicklerumgebung Die Entwicklerumgebung besteht grundlegend aus einem Texteditor für Quellcode und einer Toolbar
mit einzelnen Buttons für die Konnektivität mit dem Board. Des Weiteren gibt es einige Menüpunkte
mit Extrafunktionen wie z.B. einen Serialmonitor der die Ergebnisse der Variablen anzeigt.
Zu den eben erwähnten Tools zählen unter anderem Verify, Upload, New, Open, Save. „Verify“
überprüft ob der Code irgendwelche Fehler beinhaltet. „Upload“ ist eines der wichtigsten Tools. Der
Quellcode wird für das Arduinoboard kompiliert und auf das Board via USB-Kabel übertragen. „New“
erstellt ein neues Projekt für ein Programm und „Open“ öffnet ein bereits bestehendes Dokument.
„Save“ speichert das aktuell ausgewählte Projekt.
Die Arduinoumgebung besitzt eine Bibliothek für eine Reihe von Befehlen welche mit „#include“ in
das Programm eingebunden wird. Zudem stehen Beispielquellcodes zur für diverse Shields
Verfügung.
Projektdokumentation - Hovercraft
9 | S e i t e
Ablauf des Praktikums Zu Beginn des Praktikums wurde uns das Hovercraft gezeigt und das Arduinoboard erklärt. Wie der
Microcontroller programmiert wird erlernten wir ebenfalls im Laufe des Praktikums durch das Bauen
von Schaltungen wie z.B. einen A/D-Wandler oder eine funktionsfähige Lichterkennung mit LEDs und
Fototransistoren. Begleitet und geholfen hat uns dabei Herr Janssen. Die Elektronik, bestehend aus
Akku, Fahrtenregler und Analogstick, des Hovercrafts mussten wir selbständig mit einem Lötkolben
verlöten. Der Schwenkarm und die Rotoren waren von Herr Reichert vormontiert worden und so
mussten wir nur noch die Leitungen verbinden bzw. an die andere Elektronik löten. Es war ein grobes
Schema der Gesamtschaltung vorgegeben, jedoch war die Programmierung des Arduinoboards eine
vollständige Eigenleistung der Praktikumsgruppe.
Als Zusatz sollte sich jede Gruppe eine Erweiterung für das Hovercraft ausdenken und umsetzen. Ein
Team hat z.B. die Steuerung über ein Smartphone und WLAN ermöglicht. Wir haben uns für eine
Ultraschallsensorik entschieden, damit das Hovercraft ein Hindernis erkennt und darauf reagieren
kann. Die dazugekommenen Bauteile waren das Schaltplatinen-Shield und der Ultraschallsensor.
Im Praktikum haben wir für das Arduinoboard mit aufgestecktem Shield und Sensor Programme
angefertigt und auf das Arduino Uno überspielt. Uns war es frei gestellt das Praktikum Zuhause
fortzuführen um das Projekt fertigzustellen oder eventuelle Verbesserungen vorzunehmen.
Schaltungsaufbau Das nachfolgenden Schaltbild, welches mit EAGLE erstellt wurde, zeigt den Basis-Schaltungsaufbau
(ohne Ultraschallsensorik, denn diese folgt im späteren Verlauf der Dokumentation) des Hovercrafts,
welcher auch in Zusammenhang mit einem funktionstüchtigen Quellcode des Hovercrafts steht.
Anmerkung: Alle Schaltbilder und Programmcodesegmente kommen von unserer Gruppe und sind
das Ergebnis unseres Projektes. Werden Änderungen an den Angaben aus dieser
Projektbeschreibung vorgenommen so ist nicht dieselbe Funktion gewährleistet.
Abbildung 11 – Schaltplan des Hovercrafts
Projektdokumentation - Hovercraft
10 | S e i t e
Erläuterung der PIN-Belegung
Aufgrund dessen, dass keine Schaltsymbole für unseren Fahrtenregler, Servomotor und Motoren in
der EAGLE Bibliothek gefunden wurden, haben wir diese mit PINHEADER Symbolen dargestellt.
2-mal 1x2 PINHEADER für Motoren/Rotoren (MOTORHUB und MOTORACC) 1-mal 1x3 PINHEADER für Servomotor (SERVO) 1-mal 2x5 PINHEADER für Fahrtenregler (MOTORCONTROLLER)
Erläuterung des PINHEADER 2x5: MOTORCONTROLLER
PIN Funktion
10 Vin / Spannungsversorgung des Fahrtenregler von bis zu +8,4V
8 GND
9 Spannungsversorgung: Beschleunigungsmotor
7 GND: Beschleunigungsmotor
5 Spannungsversorgung für den Servomotor
1 GND für den Servomotor
3 Input: Ansteuerung des Fahrtenreglers mit Pulse Weiten Modulation(PWM)
6,4,2 Physisch nicht verfügbar
Pin 9 und 7 können je nach Einsetzen des Motors oder Quellcode getauscht sein.
Erläuterung des PINHEADER 1x2: MOTORACC und MOTORHUB
Der MOTORACC steht für den Motor/Rotor der das Hovercraft beschleunigt und der MOTORHUB für den Motor/Rotor der das Luftkissen erzeugt. Die Anschlussbelegung ist bei beiden Motoren identisch.
PIN Funktion
1 Vin / Spannungsversorgung von bis zu 7,2V
2 GND
Je nach Einsetzen des Motors könnte Vin und GND getauscht werden müssen, damit die Betriebsrichtung mit dieser Dokumentation übereinstimmt.
Erläuterung des PINHEADER 1x3: SERVO
PIN Funktion
1 Vin / Spannungsversorgung von bis zu 7,2V
2 Input: Ansteuerung des Servomotors mit PWM
3 GND
Je nach Position und Typ des Servomotors muss der Quellcode angepasst werden.
Projektdokumentation - Hovercraft
11 | S e i t e
Steuerung des Hovercrafts Eine analoge Fernbedienung steuert das Hovercraft, indem der Analogstick, welcher über zwei
Potentiometer verfügt, analoge Spannungen an zwei Analog-/Digitalwandler (A/D-Wandler) des
ATMEGA328P-PU legt. Der A/D-Wandler wandelt diese in einen digitalen Wert um die dann weiter
verwendet werden.
Die vorgenommen Einstellungen des A/D-Wandlers und Kenndaten:
Reference Spannung: 5V
10 Bit Auflösung (1024 Werte von 0 bis 1023)
Durch die 10 Bit Auflösung liegt die Quantisierung des A/D-Wandler bei
Der Analogstick und somit die Potentiometer befinden sich auf dem obigen Bild in der Null-Position
(keine Kraftauswirkung auf den Stick). Ein Potentiometer funktioniert nach dem Prinzip eines
Spannungsteilers.
Beispiel: Würde man an den Spannungsteiler 5V anlegen (am Ende ist GND)
so müsste nach dem Reihenschaltungsgesetz die Spannung sich
verhältnismäßig aufteilen. In der Null-Position sollte idealerweise das
Verhältnis auf 50-50 sein. Zwischen den Widerständen 1 und 2 wird die
Teilspannung von 2,5V an den A/D-Wandler gelegt/abgegriffen.
Diese 2,5V werden vom A/D-Wandler mit einer 10 Bit Auflösung in den
Digitalwert von 512 umgewandelt.
Berechnungsformel:
Dieses Prinzip gilt für die horizontale- und vertikale Achse bzw.
Potentiometer.
Die Vertikale Achse (Y-Achse) des Analogsticks bestimmt die Beschleunigung des Hovercrafts und die
horizontale Achse (X-Achse) die Bewegungsrichtung.
Die Digitalwerte 512 stehen dafür, dass sich das Hovercraft in Ruhe befindet und die
Bewegungsrichtung Gerade aus ist.
Abbildung 12 - Fernsteuerung
Abbildung 13 - Spannungsteiler
Projektdokumentation - Hovercraft
12 | S e i t e
Unsere eigenen daraus resultierenden Definitionen lauten:
Vertikale Werte:
Wert > 512 : Beschleunigung nach vorne /Vorwärts fahren
Wert = 512 : keine Beschleunigung
Wert < 512 : Beschleunigung nach hinten /Rückwärts fahren
Vertikale Werte:
Wert > 512 : nach rechts fahren
Wert = 512 : kein lenken
Wert < 512 : nach links fahren
Achtung: Das Prinzip des Lenkens bzw. das Fahren in eine bestimmte Richtung folgt dem
Abstoßungsprinzip.
Einführung der Programmierung Der Servo und der Fahrtenregler arbeiten mit der Pulse Weiten Modulation (engl.: pulse width
modulation, PWM). Das PWM Signal ist ein Zeitsignal welches eine Maximallänge von 20 ms besitzt.
Die Information, die über die PWM versendet wird, versteckt sich in Länge der High/Low Pegel des
Zeitsignals.
Der nachfolgende Quellcode ist die PWM-Basisfunktion mit dem das Hovercraft betrieben wird:
Der Funktion werden ein Wert, welcher die PWM verlängert, und ein Empfänger-Port übergeben.
void pulseWidthModulationFunction(int value, int port){ digitalWrite(port, HIGH); delayMicroseconds (value + 1000); digitalWrite(port, LOW); delayMicroseconds(10000);
}
Abbildung 14 - Lenkprinzip
Projektdokumentation - Hovercraft
13 | S e i t e
Beim Hovercraft verwenden wir den Port 13 (gleichzusetzten mit PIN 13) für den Servomotor des
Schwenkarms, welche die Bewegungsrichtung steuert und Port 11 für den Fahrtenregler vom
Arduinoboard.
Aus dem Quellcode ist ersichtlich, dass die Länge des PWM-Signals über die „delayMicroseconds“-
Funktion erzeugt wird. Die Minimallänge beträgt 1ms bzw. 1000µs und wird über eine Addition mit
der Variable „value“ verlängert. Bei einem „value“ Wert von 512 erfolgt keine Beschleunigung und
der Servo richtet sich in einen 90° Winkel aus.
Ziel ist es über die PWM das Hovercraft positiv/negativ zu beschleunigen und die „Lenkung“ zu
realisieren.
Beispiel Servomotor:
Hovercraft soll stark nach rechts fahren:
o Wert vom A/D-Wandler 1023
o Highpegel aktiv für 2023µs
o => Einstellung eines 180° Winkel
Hovercraft soll geradeaus fahren:
o Wert vom A/D-Wandler 512
o Highpegel aktiv für 1512µs
o => Einstellung eines 90° Winkel
Hovercraft soll stark nach links fahren:
o Wert vom A/D-Wandler 0
o Highpegel aktiv für 1000µs
o => Einstellung eines 0° Winkel
Funktionsart des Fahrtenreglers: je nach PWM legt der Fahrtenregler an der Stromleitungen für den
Motor eine Spannung an.
Gewünschte A/D-Wandler Werte:
Beispiel
Hovercraft soll maximal beschleunigen:
o Wert vom A/D-Wandler 1023
o Highpegel aktiv für 2023µs
o => Einstellung am Fahrtenregler von +5V (Vermutung da die Fahrtenregler Anleitung
keine Angaben liefert)
Hovercraft soll nicht beschleunigen:
o Wert vom A/D-Wandler 512
o Highpegel aktiv für 1512µs
o => Einstellung am Fahrtenregler von +0V
Hovercraft soll maximal negativ beschleunigen:
o Wert vom A/D-Wandler 0
o Highpegel aktiv für 1000µs
o => Einstellung am Fahrtenregler von -5V
Abbildung 15 - Servo PWM
Projektdokumentation - Hovercraft
14 | S e i t e
Optimierung: Zwei PWM Signale parallel senden Der ATMEGA328P-PU Microcontroller kann nur sequentiell das aufgespielte Programm verarbeiten,
was in manchen Situationen uneffektiv ist.
Man kann die pulseWidthModulationFunction zweimal hintereinander Ausführen um den
Fahrtenregler und den Servomotor mit neusten Werten/Einstellungen zu versorgen. Dabei würde der
Microcontroller maximal (( ) ( ) )
brauchen um den Code auszuführen.
Durch eine Optimierung kann das Senden der PWM-Signale aussehen als würden zwei PWM-Signale
parallel ausgeführt. Dadurch lässt sich ca. die Hälfte der oben angegebenen Zeit einsparen.
Das Prinzip hinter dem Quellcode ist, dass beide PWM-Signale zeitgleich gestartet werden und der
kleinere von beiden zu generierenden Highpegel als erstes auf Low gesetzt wird. Bevor das größere
Highsignal auf Low gesetzt wird führt eine Pausefunktion, mit der Differenz der beiden Werte in µs,
den Highpegel fort.
Hier liegt die maximale Zeit bei: ( )
Vorteil: ca. 2x bessere Aktualisierungsrate
Nachteil: Bei anderer Hardware könnte die Funktion zu falscher Hardwareinterpretationen führen
void optimizedPWMFunction(int biggestSensorValue, int smallestSensorValue, int outputPortOfBiggestSensorValue, int outputPortOfSmallestSensorValue) {
int pulseDiff = biggestSensorValue - smallestSensorValue;
digitalWrite(outputPortOfBiggestSensorValue, HIGH); digitalWrite(outputPortOfSmallestSensorValue, HIGH); delayMicroseconds (smallestSensorValue + 1000); digitalWrite(outputPortOfSmallestSensorValue, LOW);
if(pulseDiff != 0) {
delayMicroseconds (pulseDiff); }
digitalWrite(outputPortOfBiggestSensorValue, LOW); delayMicroseconds(10000);
}
Anmerkung: Das Potentiometer für die Beschleunigung in Zusammenarbeit mit dem A/D-Wandler
arbeitet genau anders herum als wie im obigen Beispiel aufgeführt. Deswegen Rechnen wir:
𝑊𝑒𝑟𝑡 −𝑊𝑒𝑟𝑡𝐴𝐷 und so erhalten wir unser gewünschtes Schema aus dem Beispiel.
Projektdokumentation - Hovercraft
15 | S e i t e
Hovercraft Erweiterung – Ultraschall Kenndaten:
Von Parallax INC.
Model: PING)))
3 Pins: 5V Versorgungsspannung, GND und Signal-Pin
Frequenz: 40kHz
Rückgabewert in µs
Abbildung 16 - Ping))) Sensor
Was ist Ultraschall / Theorie
Allgemein
Der Ultraschall ist normaler Schall nur das dieser eine Frequenz von 20kHz bis 10MHz besitzt.
Ultraschall kann nicht vom menschlichen Gehör wahrgenommen werden, da Menschen nur Schall
bzw. Töne in einer Frequenz von ca. 20Hz bis 20 kHz hören. Es gibt jedoch Tiere, wie z.B.
Fledermäuse, die Ultraschall wahrnehmen und sogar verwenden/nutzen können.
Fledermäuse nutzen den Ultraschall um sich zu orientieren, indem sie ein Ultraschallsignal
(theoretisch könnte dies auch ein Ton sein den Menschen wahrnehmen können) aussenden und
dann Echosignale (reflektiert von z.B. festen Stoffen) auffangen. Empfängt die Fledermaus ein Echo,
so erhält sie die Information, dass sich etwas in der Richtung befindet in der sie das Signal geschickt
hat. Was die Fledermaus macht ist gleichzustellen mit einem Sonar eines U-Bootes.
Funktionsweise des Ultraschallsensors
Der Ultraschallsensor sendet in einem bestimmten Takt immer wieder ein Signal und wartet auf ein
Echo, jedoch wartet der Sensor nur eine gewisse Zeit auf das Echo. Wenn das Signal reflektiert wird
und den Ultraschallempfänger des Sensors erreicht, kann der Sensor eine Zeit ermitteln die zwischen
Senden und Empfangen vergangen ist.
Grobes Beispiel des Sensorablaufs:
1. Sende Ultraschall Signal -> Timer(Zeit) auf 0 setzen -> starte Timer
2. Warte auf Echo, inkrementiere Timer jeder µs um 1
3. Echo angekommen -> Timer stoppen
4. Timer Wert durch 2 teilen -> senden an die genutzte Hardware zu Weiterverarbeitung
Bei Schritt 4 wird die Teilung des Timers vorgenommen, da dieser die Zeit für Hin- und Rückweg
aufgezeichnet hat aber uns nur der Rückweg interessiert. Diese Zeit kann in eine Abstandsmessung
umgewandelt werden, weil der Schall ca. 340m/s schnell ist bzw. 29µs/cm braucht.
Projektdokumentation - Hovercraft
16 | S e i t e
Abbildung 17 - Echo-Laufzeit-Verfahren
Probleme
Umweltfaktoren wie z.B. Temperatur haben sehr großen Einfluss auf die Messung mit Ultraschall.
Außerdem ist die Erkennung eines Echos erschwert, wenn die Welle schräg auf das Hindernis
aufkommt. Die Lage des Hindernisses ist somit auch ein Faktor. Prinzipiell ist die Erkennung von
Gegenständen nicht ideal für große Entfernungen jedoch reicht sie aus für die Nutzung in kleinem
Maßstab bis zu 2-4 Meter. Der Arbeitsbereich unseres Sensors ist von 2cm bis 3m.
Anwendungsgebiete
Ein mittlerweile weitverbreitetes Anwendungsgebiet von Ultraschallsensoren ist die Parkhilfe beim
Auto hinten und/oder vorne. Es fängt an zu piepen wenn ein Hindernis sich dem Auto nähert und
erleichtert somit das Einparken. Außerdem wird Ultraschall im Modellbau verwendet, wie in
unserem Beispiel, um einem Fahrzeug die Erkennung von Hindernissen zu ermöglichen und somit
eine automatische Reaktion auszulösen.
Projektdokumentation - Hovercraft
17 | S e i t e
Sensormechanik und Schaltungsaufbau
Abbildung 18 - Sensor Schemata
Abbildung 19 - Schaltplan mit Ultraschallsensor
Erläuterung des PINHEADER 1x3: PING)))
PIN Funktion
1 GND
2 Versorgungsspannung 5V
3 Signalleitung/Datenleitung verbunden mit dem PIN7 vom Ardiunoboard
Wie der Sensor angesprochen wird, um einen Wert zu erhalten, folgt im nächsten Kapitel.
Empfänger
Sender
Projektdokumentation - Hovercraft
18 | S e i t e
Programmierung Wir haben den Beispielcode zu PING))) aus der Programmierumgebung, die auf „ardunio.cc“ für
Arduinoboards bereitgestellt wird, genutzt.
Als erstes muss der Ultraschallsensor PING))) initialisiert werden und dies geschieht mit folgendem
Programmcode:
An dem Signal Pin des Sensors wird ein 5µs langes Highsignal von PIN7 des Arduinoboards gesendet
um den Sensor zu signalisieren das ein Wert von ihm verlangt wird. Daraufhin sendet PING))) einen
Ultraschallimpuls. Danach wird PIN7 in ein INPUT PIN umdeklariert, da der Sensor über dieselbe
Datenleitung nun zum Programm kommuniziert.
Der Sensor ist so definiert das er nun einen PWM sendet. Der nächste Codeabschnitt gibt nun an wie
man dieses PWM nutzt.
Die „pulseIn(PIN, HIGH/LOW)” wartet und zählt die Zeit (in µs) beim angegebenen PIN bis das
angegebene HIGH oder LOW Signal auftritt.
Hier wartet die Funktion an PIN7 das ein Wechsel von LOW auf HIGH auftritt. Während das LOW
Signal anliegt inkrementiert die Funktion eine Interne Variable um 1 (Angaben in µs). Liegt ein HIGH
Signal an PIN7, so stoppt die Funktion das Zählen, gibt die interne Variable zurück und beendet die
Funktion.
Die „microsecondsToCentimeters(duration)” Funktion wandelt die Zeit in eine Strecke um.
und z.B. mit einer „duration = 300µs“ :
pinMode(7, OUTPUT); digitalWrite(7, LOW); delayMicroseconds(2); digitalWrite(7, HIGH); delayMicroseconds(5); digitalWrite(7, LOW); pinMode(7, INPUT);
int duration = pulseIn(7, HIGH); int cm = microsecondsToCentimeters(duration); long microsecondsToCentimeters(long microseconds) {
return microseconds / 29 / 2; }
Projektdokumentation - Hovercraft
19 | S e i t e
Anwendung der Sensorinformation Nachdem wir nun eine Strecke als Information gewonnen haben, können wir nun unser Szenario und
die Reaktion des Systems definieren. Alles was nun folgt kann nach persönlichen Vorlieben oder
Aufgabenstellung geändert werden.
Szenario 1:
Den Wert zum Beschleunigen abschwächen sobald ein Hindernis zwischen 150cm bis 30 cm auftritt.
Bedeutet: wenn das Hovercraft auf eine Wand zu fährt und der Anwender „Vollgas“ gibt, wird der
Output am Beschleunigungsrotor immer weiter gedrosselt.
Szenario 2:
Kommt das Hovercraft einem Hindernis zu nah, so soll das Hovercraft mit voller Kraft
rückwärtsfahren um eine Kollision zu vermeiden.
Es folgt nun ein Auszug (etwas verändert, Original im Anhang) des genutzten Programmes:
Die Variable „softenPulse“ ist eine Beispielhafte Funktion wie man über den Abstand zum Hindernis
einen „Verlangsamungsfaktor“ (Angabe in %) berechnen kann.
Danach wird der mit „softenPulse“ multipliziert wenn das Hovercraft zwischen 30cm und
150cm vom Hindernis befindet. Ist das Hovercraft unter 30 cm so wird der auf null gesetzt.
Zum Schluss wird das PWM Signal zur Lenkung und Beschleunigung an den Servomotor bzw. Fahrtenregler gesendet. Hierfür nutzen wir die schon weit oben aufgeführte optimierte PWM-Funktion „optimizedPWMFunction(int biggestSensorValue, int smallestSensorValue, int outputPortOfBiggestSensorValue, int outputPortOfSmallestSensorValue)“ Damit das längste PWM Signal und die dazugehörige Pin Zuweisung an den richtigen Stellen
übergeben wird müssen wir dies im Hauptprogrammcode über eine If-Funktion unterscheiden.
softenPulse = ((float)cm/3)/100; if (cm < 150 && cm >= 30) {
inputAcceleration = defaultAccelerationValue + (inputAcceleration -defaultAccelerationValue) * softenPulse; } else if (cm < 30) {
inputAcceleration = 0; }
Projektdokumentation - Hovercraft
20 | S e i t e
Siehe unteren Codeauszug:
Programmablauf Im Anhang befindet sich der vollständige Quellcode zu diesem Projekt und nun folgt ein kurzer
Ablaufplan:
1. Bekomme Werte vom Analogstick
2. Werte mit A/D-Wandler umwandeln
3. Ultraschallsensor initialisieren
4. Warten auf Echo -> bekomme PWM
5. PWM in Strecke umwandeln
6. Szenario 1 bis n und dazugehörige Werte/Funktionen berechnen
7. Sende PWM an Servomotor und Fahrtenregler
8. Gehe wieder zu Punkt 1
Das Programm läuft in einem LOOP (Endlosschleife) und sollte ohne Probleme funktionieren. Das
Hovercraft ist jetzt mit dem Analogstick steuerbar.
if (inputAcceleration < inputDirection) {
optimizedPWMFunction(inputDirection, inputAcceleration, 13, 11); } else {
optimizedPWMFunction(inputAcceleration, inputDirection, 11, 13); }
Projektdokumentation - Hovercraft
21 | S e i t e
Projektergebnis Das Projekt war in jeglicher Hinsicht erfolgreich. Das Hovercraft wurde zusammengebaut und alle
Komponenten sind funktionstüchtig. Die Steuerung über den Analogstick ist ein wenig
gewöhnungsbedürftig, weil das Hovercraft schwebt und somit nicht einfach zu stoppen ist, jedoch
mit ein wenig Fahrtraining zu bezwingen.
Die Erweiterung von dem Ultraschallsensor wurde erfolgreich eingebunden und tätigt die
gewünschten Reaktionen bei den jeweiligen Szenarien. Beispielsweise fährt man absichtlich in
Richtung einer Wand, dann fährt das Hovercraft automatisch vor der Kollision Rückwärts.
Die Art des Praktikums sich Stück für Stück an die Programmierung heran zu arbeiten und während
dessen das Hovercraft zusammen zubauen hat einen guten Lernerfolg gehabt und sehr viel Spaß
gemacht.
Das praktische Arbeiten mit Lötkolben und konkreten Bauteilen war eine gute Erfahrung und eine
Abwechslung zu dem üblichen Lernmethoden und Projekten.
Die Arduinotechnik mit den einzelnen Shields ist sehr interessant und birgt viele
Anwendungsmöglichkeiten. Es gibt mittlerweile viele verschiedene, von Hobbybastlern erstellte,
Shields und durch die Arduinoboards und Zusatzkomponenten ist es eine gute Möglichkeit sich auch
privat mit Schaltungen, Microcontrollern und Programmierungen zu beschäftigen.
Projektdokumentation - Hovercraft
22 | S e i t e
Bilderverzeichnis Abbildung 1 - Hovercraft ......................................................................................................................... 3
Abbildung 2 - Akku .................................................................................................................................. 4
Abbildung 3 - Motor ................................................................................................................................ 4
Abbildung 4 - Unterseite ......................................................................................................................... 5
Abbildung 5 - Fahrtenregler .................................................................................................................... 5
Abbildung 6 - Schwenkarm und Rotor .................................................................................................... 6
Abbildung 7 - Servomotor ....................................................................................................................... 6
Abbildung 8 - Analogstick ........................................................................................................................ 7
Abbildung 9 - Arduino UNO ..................................................................................................................... 8
Abbildung 10 - Arduinoboard, Schaltplatine, Ultraschallsensor ............................................................. 8
Abbildung 11 – Schaltplan des Hovercrafts ............................................................................................. 9
Abbildung 12 - Fernsteuerung ............................................................................................................... 11
Abbildung 13 - Spannungsteiler ............................................................................................................ 11
Abbildung 14 - Lenkprinzip .................................................................................................................... 12
Abbildung 15 - Servo PWM ................................................................................................................... 13
Abbildung 16 - Ping))) Sensor ................................................................................................................ 15
Abbildung 17 - Echo-Laufzeit-Verfahren ............................................................................................... 16
Abbildung 18 - Sensor Schemata ........................................................................................................... 17
Abbildung 19 - Schaltplan mit Ultraschallsensor................................................................................... 17
Abbildung 7 - http://www.conrad.de/ce/de/product/205760/ET-SERVO-17G-205236/SHOP_AREA_19773&promotionareaSearchDetail=005 Abbildung 15 - http://wiki.rc-network.de/Servo Abbildung 17 - http://de.wikipedia.org/wiki/Ultraschall Abbildung 18 - http://www.parallax.com/Portals/0/Downloads/docs/prod/acc/28015-PING-v1.6.pdf
Literaturverzeichnis http://arduino.cc/ http://www.parallax.com/Portals/0/Downloads/docs/prod/acc/28015-PING-v1.6.pdf http://wiki.rc-network.de/Servo http://de.wikipedia.org/wiki/Ultraschall http://de.wikipedia.org/wiki/Arduino-Plattform http://de.wikipedia.org/wiki/H%C3%B6rfl%C3%A4che http://www.prolab.tu-berlin.de/projekte/roboter/downloads/referate/ultraschall/referat.pdf http://www.pulsotronic.de/shop/pdf-all-de/normen/Ultraschall_Sensoren.pdf
Genutzte Programme EAGLE - Version: 5.10.0
Library für EAGLE o http://www.opencircuits.com/SFE_Footprint_Library_Eagle
Arduino 1.0 Programmierumgebung von http://arduino.cc/ Microsoft Word 2010 Windows 7 – Paint
Projektdokumentation - Hovercraft
23 | S e i t e
Anhang Arduino Hovercraft Quellcode mit Kommentaren Modelcraft B4230: Motorcontroller
Aufgabenteilung
Vorwort – Jan Eberwein ______________________________________________________ 2
Danksagung ____________________________________________________________________ 2
Hinweise ______________________________________________________________________ 2
Einführung Hovercraft _______________________________________________________ 3
Projektthema: Hovercraft – Thorsten Tatarek ________________________________________ 3
Hovercraft Bauteile – Thorsten Tatarek______________________________________________ 3
Arduino Entwicklerumgebung – Thorsten Tatarek _____________________________________ 8
Ablauf des Praktikums – Thorsten Tatarek ___________________________________________ 9
Schaltungsaufbau – Jan Eberwein __________________________________________________ 9
Steuerung des Hovercrafts – Jan Eberwein __________________________________________ 11
Einführung der Programmierung – Jan Eberwein _____________________________________ 12
Optimierung: Zwei PWM Signale parallel senden – Jan Eberwein ____________________ 14
Hovercraft Erweiterung – Ultraschall __________________________________________ 15
Was ist Ultraschall / Theorie – Thorsten Tatarek _____________________________________ 15
Sensormechanik und Schaltungsaufbau – Jan Eberwein _______________________________ 17
Programmierung – Jan Eberwein __________________________________________________ 18
Anwendung der Sensorinformation – Jan Eberwein ___________________________________ 19
Programmablauf – Jan Eberwein _____________________________________________ 20
Projektergebnis – Thorsten Tatarek ___________________________________________ 21