Anleitung
Nutzerhandbuch
Der Smartacus wurde für Bildungszwecke entworfen. Eine Anbindung des Mikrocontrollers an einen Computer kann mittels Micro-USB Kabel hergestellt werden.
Informationen für den sicheren Umgang
Das Fahrzeug ist nicht für Kinder unter zehn Jahren geeignet.
Akkus getrennt lagern
Akkus nicht überladen oder unter 20% Kapazität betreiben
Akkus in richtiger Polung einbauen
Akkus sind entflammbar
Beschädigte Akkus und Fahrzeug nicht nutzen
Entfernen Sie keine Kabel ohne technische Unterweisung oder Kenntnisse
Fahrzeug im Betrieb nicht in die Nähe von Haaren bringen
Fahrzeug nur von 5-40° Celcius Umgebungstemperatur betreiben
Stürze können das Fahrzeug permanent beschädigen
Lithium-Zellen nicht fallen lassen
Nur für sachgemässe Handhabung bestimmt
Anleitung
In dieser Anleitung werden die Klassen und Funktionen erklärt. Zusätzlich wird hier auch der Aufbau des Fahrzeugs mit allen dazugehörigen Bauteilen beschrieben. Diese sind in der [Bauteilliste] zu finden. Zu Beginn jeder Funktion werden die grundlegenden Übergabeparameter und Abläufe erklärt. Daraufhin kommt eine genauere Erklärung, welche Grundlegende Kenntnisse in C++ erfordern. In jeder Klasse wurde bereits eine Instanz erstellt, welche für alle Funktionen und Abläufe mit dem Fahrzeug funktioniert. Weitere Videos zur Installation und Nutzung einer Entwicklungsumgebung findest du auf unserem YouTube Kanal. Die gesamte Software befindet sich auf diesem GitLab Repository.
Einführung - Software
Hier sind die Funktionen aufgelistet, die du für das Lösen der Aufgaben benötigst.
motor.h
Die Motoren Header-Datei beinhaltet alle Funktionen für die Ansteuerung von den Gleichstrommotoren für den Antrieb und den Servomotor für die Lenkung.
Die Bibliothek enthält eine stop()
Funktion, welche die Motoren direkt zum stehen bringt. Ergänzend wird eine Art Torquevectoring genutzt, dies ist auf die Differenz des Radius beim Fahren einer Kurve zurückzuführen. Deshalb dreht der innere Motor langsamer als der äußere, da der Weg den der weiter entfernte Motor zurücklegen muss länger ist als der des inneren.
Die unten genannten Funktionen stehen dir zur Verfügung, wenn du motor
als Klassenname nutzt.
Für die setup()
- Hauptfunktion:
init()
Für die loop()
- Hauptfunktion:
move(motor_direction direction, int velocity)
steer(int steering_angle)
steerAndMove(int steering_angle, motor_direction direction, int velocity)
getMotorDirection()
getSteerDirection()
getVelocity1()
getVelocity2()
reflection_sensor.h
Die Reflektionssensor Bibliothek stellt Funktionen zu Verfügung, welche am Fahrzeugboden befestigt sind. Mit diesen Funktionen ist es möglich, Farbveränderungen am Boden zu erkennen. Dies ist besonders für das Verfolgen von Linien hilfreich.
Für die setup()
- Hauptfunktion:
init()
Für die loop()
- Hauptfunktion:
getValues(uint16_t* value)
printValues()
compass.h
In der Bibliothek für das Kompassmodul stehen folgende Funktionen zur Verfügung, wenn die Klasse compass
genutzt wird.
Für die setup()
- Hauptfunktion:
init()
Für die loop()
- Hauptfunktion:
getAngle()
getAngleDifference(int startingAngle)
getStartAngle()
config.h
Die config.h
definiert alle Schnittstellen mit dem Microcontroller.
headlights.h
Hier werden die Scheinwerfer des Fahrzeugs angesteuert.
oled.h
Die OLED Bibliothek stellt Funktionen für die Displays zur Verfügung. Auch hier wird eine Klasse oled_back
benötigt.
Für die setup()
- Hauptfunktion:
init()
Für die loop()
- Hauptfunktion:
changeFont(int font)
drawStringLeft(String text, int font, int clearanceToLeft, bool send)
drawStringCentered(String text, int font, bool send)
drawStringRight(String text, int font, int clearanceToRight, bool send)
displayDistance(int distance0, int distance1, int distance2, int distance3)
displayCompass(int angle)
displayIPAdress()
setScrollText(String text, int font, int speed)
scrollingLeft()
scrollingRight()
whiteScreen(bool brightness)
blackScreen()
displayIR(uint16_t left, uint16_t middle_left, uint16_t middle, uint16_t middle_right, uint16_t right)
displayAllFonts()
displayCharge()
getScrollingLength()
displayDirection()
port_expander.h
Der port_expander stellt dem Microcontroller weitere GPIO Pins zur Verfügung.
Für die setup()
- Hauptfunktion:
mcpInit()
solution.h
In der Solution Headerdatei sind alle Lösungen und funktionierenden Programmabschnitte bereitgestellt. Die Funktionen sind mit ihrem Namen bereits sortiert und können in der jeweiligen setup()
oder loop()
Hauptfunktion aufgerufen werden.
headlightSetup()
headlightLoop()
headLightBlinkSetup()
headLightBlinkLoop()
rgbSetup()
rgbLoop()
tof.h
Um nur eine begrenzte Anzahl der Time of Flight Sensoren zu nutzen, kann in der config.h die Anzahl der genutzen Sensoren angegeben werden.
Die Time of Flight Bibliothek stellt die folgenden Funktionen zur Verfügung, wenn die Klasse time_of_flight
vor der Funktion genutzt wird:
Für die setup()
- Hauptfunktion:
init()
Für die loop()
- Hauptfunktion:
getInterruptFlag()
clearInterruptFlag()
setInterruptThresholds()
getVelocity()
automaticThresholds()
rgb_led.h
Nutze für die RGB LEDs die Klasse rgb_led
um die unteren Funktionen nutzen zu können.
Für die loop()
- Hauptfunktion:
begin()
setPixelColor(rgb_led_blinker led_id, uint8_t red, uint8_t green, uint8_t blue)
show()
clear()
Aufbau der Hardware
In der Bauteilliste sind alle benötigten Bauteile vorhanden. Zusätzlich stehen die entworfenen 3D CAD Dateien zum Download zur Verfügung. Somit kann der Smartacus problemlos Zuhause nachgebaut werden. Im Folgenden wird der Aufbau Schritt für Schritt gezeigt.
# |
Bezeichnung |
Größe |
Material |
Menge |
Bauteilnummer |
Link |
Datenblatt |
---|---|---|---|---|---|---|---|
B1 |
Propellernabe 2.3mm |
2,3mm/8mm |
AlCuBiPb |
2x |
Famotec CN-2,3/8 |
||
B2 |
RC-CAR KUGELLAGER |
5mm x 10mm x 4mm |
Chromstahl |
4x |
Reely BB051004 |
||
B3 |
Zylinderkopfschraube M2 |
M2 x 12mm |
Stahl |
4x |
/ |
/ |
/ |
B4 |
Mutter M2 |
M2 |
Stahl |
4x |
/ |
/ |
/ |
B5 |
Zylinderkopfschraube M2.5 |
M2.5 x 6mm |
Stahl |
4x |
/ |
/ |
/ |
B6 |
Zylinderkopfschraube M3 |
M3 x 10mm |
Stahl |
11x |
/ |
/ |
/ |
B7 |
Zylinderkopfschraube M3 |
M3 x 12mm |
Stahl |
1x |
/ |
/ |
/ |
B8 |
Mutter M3 |
M3 |
Stahl |
7x |
/ |
/ |
/ |
B9 |
Beilagscheibe M3 |
M3 x Ø 7mm x 0,5mm |
Stahl |
12x |
/ |
/ |
/ |
B10 |
Zylinderkopfschraube M4 |
M4 x 10mm |
Stahl |
2x |
/ |
/ |
/ |
B11 |
Beilagscheibe M4 |
M4 x Ø 9mm x 1mm |
Stahl |
2x |
/ |
/ |
/ |
B12 |
Senkkopfschrauben M5 |
M5 x 50mm |
Stahl |
2x |
/ |
/ |
/ |
B13 |
Mutter M5 |
M5 |
Stahl |
2x |
/ |
/ |
none |
Als Parameter für die Drucke aus PLA empfehlen wir ein Infill von 20-25% mit dem Pattern Cubic. Bei einer Linienbreite von 0,4mm reicht eine Wandanzahl von 2. Für Unten und Oben reichen 5 Schichten.
# |
Bezeichnung |
Material |
Menge |
Download Link |
Support |
Brim |
---|---|---|---|---|---|---|
D1 |
Adapter Servo |
PLA |
1x |
☐ |
☐ |
|
D2 |
Akkudeckel |
PLA |
1x |
☐ |
☐ |
|
D3 |
Akkuhalter |
PLA |
1x |
☑ |
☐ |
|
D4 |
Aufhängung vorne links |
PLA |
1x |
☐ |
☐ |
|
D5 |
Aufhängung vorne rechts |
PLA |
1x |
☐ |
☐ |
|
D6 |
Bodenplatte |
PLA |
1x |
☑ |
☑ |
|
D7 |
Bumper |
PLA |
1x |
☑ |
☐ |
|
D8 |
Bumper hinten |
PLA |
1x |
☑ |
☐ |
|
D9 |
Bumper Halter links |
PLA |
1x |
☑ |
☑ |
|
D10 |
Bumper Halter links hinten |
PLA |
1x |
☑ |
☑ |
|
D11 |
Bumper Halter rechts |
PLA |
1x |
☑ |
☑ |
|
D12 |
Bumper Halter rechts |
PLA |
1x |
☑ |
☑ |
|
D13 |
Felge Hinten |
PLA |
2x |
☑ |
☐ |
|
D14 |
Felge Vorne |
PLA |
2x |
☑ |
☐ |
|
D15 |
Hinterreifen |
TPU A95 |
2x |
☐ |
☐ |
|
D16 |
Motorhalter |
PLA |
2x |
☐ |
☐ |
|
D17 |
Turbofans |
PLA |
2x |
☐ |
☐ |
|
D18 |
Vorderreifen |
TPU |
2x |
☐ |
☐ |
Bezeichnung |
Bauteilnummer |
Größe |
Kenngrößen |
Menge |
Produktlink |
Datenblatt |
---|---|---|---|---|---|---|
Gleichstrommotor |
Johnson 30037 |
L 44 mm x Ø 27,5 mm |
12V @ 8000 rpm |
2x |
||
Servomotor |
MG996R - Towerpro |
54 x 20 x 45 mm |
5V 180° |
1x |
||
ESP32S |
NodeMCU-ESP-32S-Kit |
54,5 x 26,5 x 11,8 mm |
5V USB, 3,3V Logik |
1x |
||
18650 LiIon-Akku |
INR18650-M29 -LG |
L 65mm x Ø 18,4 mm |
3,67V, 2,85Ah |
3x |
||
Summer aktiv |
/ |
1x |
/ |
/ |
/ |
/ |
OLED Display |
0,91“ OLED I2C Display 128 x 32 Pixel |
39 x 11,5 x 11mm |
3,3V/5V |
2x |
||
Kompassmodul |
GY-271 Kompassmodul |
13,0 x12,0x2,5mm |
3,3V/5V |
1x |
||
ToF Abstandssensor |
VL53L0X |
23,5 x 10,0 x 3,5mm |
3,3V |
4x |
||
IR Sensor |
V69 CNY 70 222 |
3,3V |
5x |
|||
SMD RGB LED |
WS2812B SMD LED 120° 4 Pin |
5 mm x 5 mm x 2 mm |
5V |
4x |
/ |
Bezeichnung |
Größe |
---|---|
Torx |
/ |
Schraubenzieher |
/ |
Schraubenschlüssel |
/ |
Schraubenschlüssel |
/ |
Schraubstock |
/ |
Pinbelegung Microcontroller
- Pinbelegung
Die hier aufgeführten Pin-Nummern können mit allen Funktionen genutzt werden, welche einen Pin als Übergabeparameter benötigen. Hierfür können die Pin-Namen genutzt werden, denn diese ermöglichen einen leichter lesbaren Code.
Bezeichnung |
Pin-Name |
Pin-Nummer |
---|---|---|
Motor Pin a |
pin_esp_motor_a |
26 |
Motor Pin b |
pin_esp_motor_b |
27 |
Motor a Geschwindigkeitssteuerung |
pin_esp_motor_left_velocity |
2 |
Motor b Geschwindigkeitssteuerung |
pin_esp_motor_right_velocity |
0 |
Servo Motor Lenkung |
pin_esp_servo |
12 |
Time of Flight Interrupt Pin |
pin_esp_tof_interrupt |
17 |
RGB LED Datenausgabe |
pin_esp_ws2812b |
14 |
Reflektionssensor Boden 1 |
pin_esp_reflection_sensor_1 |
36 |
Reflektionssensor Boden 2 |
pin_esp_reflection_sensor_2 |
39 |
Reflektionssensor Boden 3 |
pin_esp_reflection_sensor_3 |
34 |
Reflektionssensor Boden 4 |
pin_esp_reflection_sensor_4 |
35 |
Reflektionssensor Boden 5 |
pin_esp_reflection_sensor_5 |
32 |
Buzzer Steuerung |
pin_esp_buzzer |
16 |
Port Expander Interrupt Pin |
pin_esp_interrupt_port_expander |
4 |
Scheinwerfer vorne links |
pin_port_expander_led_front_left |
12 |
Scheinwerfer vorne rechts |
pin_port_expander_led_front_right |
13 |
Scheinwerfer hinten links |
pin_port_expander_led_back_left |
14 |
Scheinwerfer hinten rechts |
pin_port_expander_led_back_right |
15 |
RGB Blinker vorne links |
rgb_blinker_front_left |
3 |
RGB Blinker vorne rechts |
rgb_blinker_front_right |
2 |
RGB Blinker hinten links |
rgb_blinker_back_left |
0 |
RGB Blinker hinten rechts |
rgb_blinker_back_right |
1 |
Spannungsversorgung abschalten |
pin_esp_shutdown_voltage |
15 |
Monostabile Kippstufe |
pin_esp_trigger_74HCT123 |
13 |
Schaltplan und Platinenlayout
Bezeichnung |
Bauteil |
Montageart |
Anuahl |
---|---|---|---|
Und Gatter |
4081 |
SMD |
1 |
Elko 680uf |
FT-V 680U 16 |
SMD |
1 |
Status LEDs |
LED EL 0603 GR1 |
SMD |
4 |
Polyfuse |
PTC FSMD26016R |
SMD |
2 |
N-CH Mosfet |
IRFR3410PBF |
SMD |
1 |
P-CH Mosfet |
IRFR 5305 |
SMD |
1 |
Nand Gatter |
4012 |
SMD |
1 |
N-CH Mosfet |
BSS138 |
SMD |
5 |
Induktivität |
L-PISR 47µ |
SMD |
2 |
Schottkydiode |
1N5824 |
SMD |
4 |
Gleichrichterdiode |
1N4007 |
SMd |
6 |
Elko 470uf |
SUNC 16CE470KX |
SMD |
4 |
Step-Down 5V |
TS2596CM550 |
SMD |
1 |
Step-Down 3.3V |
TS2596CM53 |
SMD |
1 |
Reflektinskoppler |
CNY 70 |
THT |
5 |
Monostabile Kippstufe |
74HTC123 |
THT |
1 |
Motortreiber |
L298N |
THT |
1 |
Portexpander |
MCP23017 |
THT |
1 |
RGB-LEDs |
WS2812b |
SMD |
4 |
Der Schaltplan und die Platine wurde eigens für das Projekt und speziell für das Fahrzeug entworfen. Dabei wurde gesonders darauf geachtet, dass beides übersicht und leicht verständlich ist. Außderdem wurde großer Wert daraf gelegt, dass nicht benutzte Pins des ESPs und des Portexpanders sowie nicht benutzte Funktionen von Bauteilen über eine Steckerleiste nach außen geführt werden. Außerdem sind auch die Spannungen von 5V und 3,3V sowie die Bussysteme I2C und SPI über eine Steckerleiste verfügbar. Es wurde auch ein Lochrasterfeld direkt auf der Platine realisiert. Somit ergibt sich eine hohe Erweiterbarkeit für nachfolgende individuelle Anwendungen. Zusätzlich sind Messpins für die unterschiedlichen Spannungen verfügbar.
Transistor LEDs vorne und Hinten
Wären die LEDs direkt an den ESP angeschlossen, müsste dieser zu viel Strom bereitstellen. Da er nur den Transistor schalten muss, ist die Strombelastung geringer. Der Transistor funktioniert wie ein Schalter.
Watchdog
Ein Eingang wird in regelmäßigen Abständen durch den ESP durch ein kurztes HIGH Signal getriggert. So lange hält er seinen Ausgang auf HIGH. Wenn das Trigger-Signal ausbleibt, schält der Ausgang nach einer bestimmten Zeit auf LOW. Durch das Und Gatter wird dadurch der Eingang des Motortreibers auf LOW gezogen. Der Watchdog wie im Schaltplan realisiert ist nicht Funktionstüchtig, da zwei Pins vertauscht wurden. Die Modoren können ganz normal über den ESP gesteuert werden, jedoch werden sie bei einem Ausbleibenden triggersignal nicht abgeschaltet. Das IC muss jedoch trotzdem eingebaut werden.
Motortreiber
Mit seiner Hilfe werden die Motoren angesteuert. Über die Eingänge kann die Drehrichtung mithilfe des ESPs angegeben werden. An die Eingänge wird ein PWM Signal mittls analogWirte(pin, wert); angelegt . Über das PWM-Signal wird die Drehgeschwindigkeit gesteuert.
Rückstellbare Sicherung
Dieses Bauteil erhöht seinen Widerstand sehr schnell und sehr stark, wenn ein bestimmter Temperaturwert überschritten wurde. Da ein erhöhter Stromfluss das Bauteil erwärmt, kann dieses als Sicherung verwendet werden.
Port Expander
Mithilfe von I2C können an den ESP 16 Ein/Ausgänge mehr Angeschlossen werden.
Nand Gate
Die Interrupt Ausänge der Timt Of Flight Sensoren können dadruch auf einen Pin am ESP gelegt werden. Mein weiß dadurch zwar nicht, welcher Sensor den Interrupt ausgelößt hat und muss den Abstand von allen abfragen, spart dadurch jedoch drei Pins am ESP ein.
Step Down Regler
Die beiden Regler stellen aus der Batterieversorgungsspannung die Spannungen von 5V und 3.3V für die restlichen Bauteile bereit.
Verpolungsschutz
Dieser besteht hauptsächlich aus dem P-Kanal-Mosfet IRF5305S. Ausschlaggebend ist jedoch auch die umliegende Beschaltung dieses Transistors. Wenn die Eingangsspannung falschherum gepolt sind, sperrt dieser und an den nachfolgenden Bauteilen liegt keine Spannung an.
Selbsthaltung
Sie besteht aus zwei Mosfets, ein paar Widerständen, einem Taster und zusätzlich wird der ESP benötigt. Zu beginn wird über den Taster der Transistor überbrückt und somit der Strom für die restlichen Bauteile eingeschaltet. Der ESP bootet und gibt ein HIGH Signal an das Gate des Transistors aus. Dieser wird dadurch leitend. Der Taster kann dann losgelassen werden und die Schaltung hält sich selbst im eingeschaltenen Zustand. Der ESP kann sich dadurch selbst ausschalten, indem er den entsprechenden Pin auf LOW schält. Die LED dient dabei als Indikator, wann die Spannung am Gate anliegt. Alternativ kann die komplette Schaltung natürlich auch über den Schalter abgeschaltet werden. Danach muss sie wieder mit dem Taster gestartet werden.
Die Selbsthalteschaltung, die in dem Schaltplan realsiert ist ist nicht Funtionstüchtig, kann aber z.B. über das Lochrasterfeld nachgerüstet werden. Wenn die Schaltung wie im Schaltplan aufgebaut wird, ist die Spannung immer verfügbar.
Time Of Flight Sensoren
Über diese kann der Abstand zu einem Objekt abgefragt werden. Soll die Interruptfunktion genutzt werden, muss an nicht benutzten Sensorplätzten der GPIO1 Pin auf 3.3V gebrückt werden. Als Konfiguration kann man entweder keinen Sensor benutzten, nur den forderen, den forderen und hinteren oder alle Sensoren.
Referenzen
- Gefahrenhinweise
BGHM (besucht am 03.01.2022) https://www.bghm.de/arbeitsschuetzer/praxishilfen/sicherheitszeichen/kennzeichnung-von-gefahrstoffen