Projekt 54: Mission on Mars (Abschluss): Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
|||
Zeile 104: | Zeile 104: | ||
Die Pinbelegungen lassen sich in der Netzliste der Ultiboard Datei ablesen. | Die Pinbelegungen lassen sich in der Netzliste der Ultiboard Datei ablesen. | ||
= I²C Kommunikation = | |||
Die I²C Kommunikation folgt so ab, dass der Raspberry Pi die ausgewärteten Kameradaten als Master zum Arduino schickt. | |||
Der Arduino ist mit der Adresse 0x12 in den Bus eingebunden und ließt die Daten mithilfe einer S-Funktion aus. | |||
= HOW TO = | = HOW TO = |
Version vom 17. Juli 2019, 18:27 Uhr
Autor: Stefan Arndt
Einleitung
Dieser Artikel befasst sich mit dem Projekt 54: Mission on Mars und bringt es zum Abschluss. Das Projekt wurde in Teilen schon bearbeitet, sodass im Folgendem nicht weiter in Gänze auf die bereits bearbeiteten Themen eingeangen wird.
Ich verweiße auf die Artikel:
- Projekt 54: Mission on Mars
- 3D-Druck und Hardwareaufbau
- Projekt 54: Mission on Mars (Fortsetzung)
- Aufbau der Marsoberfläche und Hardwaredokumentation
Die Versorgungs-und Kommunikationsplatine (hier: Brückenplatine) wurde in diesem Teil erneut konzipiert, da die Platinen der Vorgänger fehlerbehaftet waren.
Zudem wurde eine überarbeitete Bill of Material (BOM) erstellt, da bestimmte Komponenten (z.B. der WLAN-Stick für den Raspberry PI) nicht benötigt wird.
Aufgaben
- Inbetriebnahme mit Simulink
- Realisierung des Versuchsaufbaus auf der Marsoberfläche
- Kalibrierung der Kamera des Rovers
- Inbetriebnahme des Computer-Schiedsrichter
- Erweiterung der Rover um die Sensorik zur Objekterkennung
- Anpassung der Versorgungs-und Kommunikationsplatine
Verwendete Software
Verwendete Software:
- Matlab R2019a und Simulink
- MATLAB Support Package for Arduino Hardware
- Simulink Support Package for Arduino Hardware
- MATLAB Support Package for Raspberry Pi Hardware
- Simulink Support Package for Raspberry Pi Hardware
- Ultiboard 14.1
- Multisim 14.1
Komponenten
Objekterkennung
Hardware
Die Objekterkennung erfolgt über einen Sharp Infrarotsensor (GP2Y0A21YK0F) mit einer Reichweite von 10 bis 80 cm.
Dieser Sensor wird über eine Montagehalterung an einen Micro Servomotor (JAMARA 033212) verschraubt um in einem 50° Kegel Objekte zu erkennen.
Im Bild 1 ist zu erkennen wie die jeweiligen Anschlüße zu verbinden sind. Hierbei wurde OUT6 für das PWM Signal des Micro Servomotors und IN2 für das Analog Singal des Infrarotsensors verwendet. Das Bild 2 zeigt die fertig montierte Komponente. Es ist darauf zu achten die Montagehalterung, falls zu groß, an der Seite abzufeilen.
Software
Die Softwareimplemtierung findet sich im Simulink Model unter: ArduinoModel -> RobotModel -> Scanner
Micro Servomotor
Der Servomotor soll drei Positionen einnehmen können: Links (25°), Geradeaus (0°) und Rechts (-25°). Diese Werte werden im Folgendem unsere Eingabegrößen sein.
Der Servomotor wird zuerst in Nullstellung gebracht sodass er sich mit genug Spiel zur Seite bewegen kann. Diese Position ist die Mittelstellung und wird zu den Eingabegrößen hinzuaddiert.
Weiterhin verwenden wir den "Standard Servo Write" Block der Arduino Toolbox für Simulink, der als Input einen Stellungswinkel von 0 bis 180 Grad verlangt. Um die drei Position in Simulink zu realisieren verwenden wir Stateflow und bilden die einzelnen Positionen als Zustand ab. Zwischen den Zuständen wird jeweils zwei Sekunden gewartet.
Infrarotsensor
Der Infrarotsensor gibt nicht direkt den gemessen Abstandswert in cm aus, sondern eine Spannung die abhängig von der Messung ist. Das Signal wird durch den Analog-Digital-Wandler (ADC) des Arduinos in ein digitales Signal umgewandelt mit dem gerechnet wird. Um den digitalen Wert (digital_value) in den eigentlichen Spannungswert () zurückzurechnen nutzt man folgende Formel.
In unserem Fall, besitzt der Arduino Due eine ADC Auflösung (resolution) von 12 bit, heißt es werden 4096 verschiedene Werte angenommen und eine Bezugsspannung (reference_voltage) von 3,3V. Die Formel lautet nun:
Im Datenblatt des Infrarotssensors ist der Graph angegeben, der den Zusammenhang zwischen gemessener Distanz und Spannung angibt (siehe Bild 3). Über das "Curve fitting tool" von Matlab lässt sich die folgende Approximation finden:
Aus dieser Rechnung erhalten wir die gemessene Distanz in cm.
Brückenplatine
Die Brückenplatine erfüllt folgende Aufgaben:
- Umwandeln der 7,4V Versorgungsspannung in 5V Betriebsspannung für den Raspberry Pi
- Verbindung der I²C Schnittstellen des Raspberry Pis und dem Arduino
- Verbindung der PWM-Signalleitungen des Motor Shields mit den Servo Motoren
- Verbindung der Servomotor Encoder Signalleitungen mit dem Arudino
Die Schaltung der Platine wurde in Multisim konzipiert. Das Layout wurde in Ultiboard erstellt und als Gerber-Dateien zur Fertigung übergeben. Im Verlauf des Praktikums kam es zur einer 2. Version des Layouts, welches den TI Spannungswandler (PTH08080W) auf der unteren Seite befestigt, sodass von oben angelötet werden kann.
Brückenplatine Version 1 als 3D Ansicht in Ultiboard:
Die Pinbelegungen lassen sich in der Netzliste der Ultiboard Datei ablesen.
I²C Kommunikation
Die I²C Kommunikation folgt so ab, dass der Raspberry Pi die ausgewärteten Kameradaten als Master zum Arduino schickt. Der Arduino ist mit der Adresse 0x12 in den Bus eingebunden und ließt die Daten mithilfe einer S-Funktion aus.
HOW TO
Unterabschnitt
- Nutzen Sie Aufzählungen
- mit verschiedenen Schachtelungen
- und so weiter
- zweite Ebene
- mit erneuter Unterebene
Bilder
Bauen Sie Bilder ein, am besten mit darin gekennzeichneten Stellen, die Sie dann im Text erklären.
Tabellen
Eine tolle Tabelle ist hier dargestellt.
Spalte 1 | Spalte 2 | Spalte 3 |
---|---|---|
blabla | sowieso | sowieso |
test | sowieso | test1 |
Formatierung
Nutzen Sie zur Formatierung Beispiele, z. B. aus dem weltbekannten Wikipedia selbst (das ist die gleiche Syntax!) oder anderer Hilfeseiten wie z. B. [4].
Quelltext
Details siehe: Quelltext_einbinden.
Bei lang= muss die richtige Sprache eingetragen werden (matlab, c,...).
for i=1:10
% try
% image = CAMERA_DumpFrame(s);
% catch err
% error('MATLAB:RWTHMindstormsNXT:Sensor:unknown', 'An unknown Error occured while fetching the image. Please check that the Camera is connected and try again');
% end
image = CAMERA_GetImage(com);
handle = imshow(image);
%pause(0.1)
currTime(i) = toc(startTime);
disp(['Aktuelle Zeit: ',num2str(currTime(i))])
%imwrite(image,sprintf('NXTCamImage%03d.png',i));
%imwrite(img,fullfile(workingDir,sprintf('HexBug%03d.png',n)));
% ca. alle 4.8 Sekunden ein Bild
end;
Zusammenfassung
Was ist das Ergbnis? Das Ergebnis dieses Artikels ist eine Vorlage, mit der Nutzer des Wikis schnell und leicht eigene Artikel verwirklichen können. Diese Vorlage ist Bestandteil der Anleitungen aus den How-To's.
Ausblick
Was kann/muss noch verbessert werden?
Literaturverzeichnis
- ↑ Eigene Fotos und Arduino Motor Shield
- ↑ GP2Y0A21YK0F Datenblatt
- ↑ Eigenes Foto
- ↑ Hilfeseite des Wikimedia-Projekts