Garage-Lab e.V.

Das FabLab in Düsseldorf

Benutzer-Werkzeuge

Webseiten-Werkzeuge


projekte:roboterarm

Achtung, diese Seite befindet sich im Aufbau!

Hier findet ihr in Zukunft das Skript für den Roboterarm-Workshop. Bei Fragen bitte eine PN an Felix

Workshopvorbereitung: Entwicklungsumgebung für den Microcontroller einrichten

Hier steht was du für den Workshopabend vorbereiten sollst. Das eigentliche Skript des Workshops beginnt mit dem Kapitel „Wissensvermittlung“.

Arduino IDE installieren:

Installation der ESP32-Treiber in die Arduino IDE:

Esp32 Treiber werden nach der Anleitung auf dieser Seite zu der Arduino IDE erst hinzugefügt, dann installiert. In aller Kürze:
1.Geh auf „Datei/Voreinstellungen“
2.Füge im neuen Fenster bei „Zusätzliche Boardverwalter-URLs“ folgende URL ein https://dl.espressif.com/dl/package_esp32_index.json
3.Öffne in der Arduino IDE Tools/Board/Boards Manager und wähle esp32 by Espressif Systems aus, die Treiber werden umgehend installiert.

Verbindet mit dem micro-USB-Kabel euren esp32 mit eurem PC.
Sobald der esp32 angeschlossen wird leuchtet seine einzige rote LED kontinuierlich auf.

Konfiguration des esp32 Boards ESP-32 Dev Kit C V4 in der Arduino IDE

Seht im Windows-Gerätemanager nach, auf welchem COM Port der esp32 eingehängt ist.
In der Arduino IDE wählt unter „Werkzeuge/Port“ den richtigen serial Port aus.
In der Arduino IDE geh auf „Werkzeuge/Board/ESP32Arduino/“ und wähle „ESP32 Dev Module“ aus.

Funktionstest der Arduino IDE und des esp32 Boards

Dieses esp32 Board hat keine LED für eine Blink-Demo auf dem Board verbaut. Stattdessen werden wir einen Funktionstest des Boards mit den kapazitiven Pins und dem seriellen Monitor ausführen.
Testet daher ob ihr erfolgreich Code hochladen könnt mit dem Sketch unter „Datei/Beispiele/esp32/touch“
Klickt auf dem Fenster der Arduino IDE auf „Hochladen“ (den runden Button mit dem Pfeil nach rechts) und haltet danach auf dem esp32 Board den BOOT Button gedrückt.
In der schwarzen Shell wird der upload dokumentiert, ansonsten kommt da eine Fehlermeldung. In dem Fenster der Arduino IDE wählt ihr jetzt „Werkzeuge/Serieller Plotter“ aus, ein weiteres Fenster erscheint und zeigt eine Verlaufskurve an. Im Plotter stellt ihr 115200 Baud ein bzw. den Wert, den ihr unter „Werkzeuge/Upload speed“ für euer esp32 board eingestellt habt.
Fasst jetzt den GPIO 4 an (weiter unten auf dieser Seite findet ihr eine Grafik mit der Bezeichnung der einzelnen Pins, es ist der 5. Pin vom Boot Button aus). Die Spannung auf eurer Haut wird von ihm als Eingabe registriert und die Kurve fällt von einem Wert nahe 100 auf einen Wert unter 10 ab.
Sofern die Kurve sich beim berühren des Pins nach unten bewegt –> der Chip funktioniert, Code wird hochgeladen und ausgeführt.
Serielle Kommunikation funktioiniert ebenfalls.

Wissensvermittlung

Ab hier beginnt der Workshopinhalt

Was ist ein Microcontroller?

Der esp32 benötigt wenig Strom, kann in Echtzeit Prozesse steuern und muss nicht heruntergefahren werden, wie z.B. ein Raspberry Pi. Die grafische Darstellung eines Menüs ist möglich, wird aus Performancegründen aber gerne ausgelagert. Dennoch sind die Fähigkeiten des chips was Bild- und Tonwidergabe angeht beeindruckend.
Für anspruchsvolle videodarstellung oder rechenintensive Aufgaben ist er nicht geeignet.

Was kann der esp32?

Wofür kann man einen Microcontroller verwenden? Überblick über einige Einsatzfelder:

Langweilige, sich wiederholende Aufgaben ausführen
(z.B. Eingangstor im Supermarkt, Mikrowelle, Gießautomat, Spülmaschine, Thermomix)
Langsame Prozesse mit geringem Stromverbrauch steuern oder messen
(z.B. Zeitraffer, Wetterstation, Gewächshauslüftung regeln, Mülltonnenblinklicht)
Kontinuierlich genau und schnell arbeiten
(z.B. CNC Fräse, 3D Drucker, Pick and Place Maschine,PCB Tintenplotter)
Schnelle Prozesse in Echtzeit steuern
(z.B. Einspritzanlage am Verbrennungsmotor, Kameraauslöser mit Sensor, Wackeln im Objektiv korrigieren)
Prozesse (oder mehrere Prozesse, also Szenarien) aus der Ferne schalten und steuern
(z.B. SmartHome:Briefkasten der bescheid sagt wenn er voll ist, dem Paketdienst die Tür aufmachen, die Waschmaschine eine E-Mail schicken lassen wenn sie fertig ist, ferngesteuerter Modellbau, 220V-Verbraucher mit Relais steuern, IR-Fernbedienungen simulieren, …)
Gefährliche Tätigkeiten ausführen

Technische Daten des esp32:

Im Workshop verwendet ihr dieses esp32 board, klickt mehrmals auf die Grafik um sie zu vergrößern.

Rechenleistung: 240 MHz Dual Core
RAM: 200 KB
Flash: 4 MB, bei Bedarf ist der Flash Speicher durch einbinden externer microSD Karten erweiterbar.
Kommunikation: Wifi, Bluetooth, BLE, kann als Server eine Webseite hosten, ist allerdings für https zu langsam.
Dieses Video geht im Detail auf die Features und technischen Details des Esp32 ein.

Was ist PWM und wofür wird sie verwendet?

Achtung: In der Arduino IDE liegen unter Dateien/Beispiele/Basics/ die PWM-Beispiele/fade. Dies verwendet Befehle die nur von Arduino Boards, nicht jedoch von esp32 Boards unterstützt werden.

Die LED library LEDCSoftwareFade aus den Beispieldateien des esp32 verwendet PWM.
So installiert man die library esp32Servo:

  1. In der Arduino IDE geh auf „Sketch/Bibliothek einbinden/Bibliotheken verwalten“.
  2. Im neuen Fenster wähle gib im Textfeld „ESP32Servo“ ein. Klick bei der Datei von Kevin Harrington und John K. Bennett auf „Installieren“
  3. Danach kannst Du das Fenster schließen
  4. In der Arduino IDE geh auf „Dateien/Beispiele/ESP32Servo/Sweep“
  5. Die Sketch wird geöffnet

Zurück zur Frage „Was ist PWM“:
Im Gegensatz zum esp32, der Gleichstrom von 0-3,3V kontinuierlich ausgeben kann hatte der Arduino nur die Möglichkeit, 5V auszugeben, er konnte also nur digital zwischen den Schaltzuständen aus (0V) und ein (5V) wählen. Um dennoch Verbraucher wie LEDs in unterschiedlichen Helligkeiten leuchten zu lassen bedient man sich dem Trick der Pulsweitenmodulation: Der Strom am IO Pin wird im schnellen Wechsel an- und ausgeschaltet. Da unsere Augen nicht den schnellen Wechsel sondern nur den Mittelwert wahrnehmen lässt sich so eine gedimmte LED simulieren.
Je nach Verhältnis von Zeitspanne mit 5V zu Zeitspanne ohne 5V nehmen wir als Nutzer so unterschiedliche Helligkeiten oder Motordrehzahlen war, je nach Verbraucher.
Anders ist es bei der Nutzung von PWM zur Steuerung von Servos:hier wird mithilfe der PWM ein numerischer Wert übermittelt, mit Hilfe dessen die Steuerelektronik des Servos dessen Stellwinkel reguliert.

Das PWM Signal zur Steuerung eines Servos ist folgendermaßen aufgebaut: Frequenz: 50 Hz, der „duty cycle“, also eine Einheit die aus den beiden Zeiteinheiten besteht, in denen der Strom an bzw. aus ist ist 20 Milisekunden lang.
Die Steuerelektromik empfängt über ein Pulsweitensignal zwischen 1 Milisekunden (0°) und 2 Milisekunden (180°) den gewünschten Stellwinkeldes Servoarms.
Ein kontinuierlich drehender Servo dreht bei 1 Milisekunde gegen, bei 2 Ms mit dem Uhrzeigersinn. Die Längen des pulsweitenssignals können im Sketchbefehl zur Feinjustierung an den Servo angepasst werden.

Hier das Skript der Arduino-Seite und vorerst ein Video https://youtu.be/GfkQ72R0emE?t=139

Wie ein Servo funktioniert

Servos werden durch Geschwindigkeit und Drehmoment (haltekraft bei 1cm langem Hebel) klassifiziert.

Interner Aufbau:
Analoge Servos verfügen über 4 Baugruppen

  • einen Elektromotor, der bauartbedingt nur hohe Drehzahl und geringes Drehmoment liefern kann
  • ein Getriebe um das Drehmoment zu steigern und Geschwindigkeit des Motors zu reduzieren
  • ein Potentiometer (Drehwiderstand) zum auslesen des aktuellen Stellwinkels
  • Eine Steuerelektronik mit integrierter H-Brücke die den Stellwinkel laut Befehl des Microcontrollers ausführt

Der Drehwiderstand gibt zeigt der Steuerelektronik den momentanen Stellwinkel des Servoarms.
Die Getriebe gibt es in Ausführungen mit 180°,270° oder unbeschränktem Stellwinkel.

Anschließen des Servos:

Servos haben 3 Anschlüsse:

  1. Masse (meist schwarz oder braun)
  2. Stromversorgung (meist rot)
  3. Steuerung (meist orange oder gelb)

Die Farbcodes variieren je nach Hersteller.
Servos benötigen eine separate Stromversorgung.
Die Masse des esp32 muss mit der Masse der Stromversorgung für den Servo verbunden werden! Wir können den „Sweep“ Sketch laufen lassen. In der Sketch hängt der läuft die Servo Steuerung über GPIO Pin 18.

Wenn viele Servos angesteuert werden müssen:

Der esp32 kann ohne weitere Komponenten 16 verschiedene Servos gleichzeitig steuern. Ein PCA9685 Board ermöglicht es, weitaus mehr Servos anzusteuern als ein Controller PWM Signale ausgeben kann, da es über den I2S Bus angesteuert wird. An einem Board lassen sich 16 Servos anschließen, mehrere Boards lassen sich in Reihe schalten, ihre Adressierung lässt sich mit einem Lötpunkt auf dem Board ändern und alle können mit nur 2 Kabeln (Clock & Data des I2C Bus) durch den Microcontroller ansprechen.

esp32 kontrolliert Servos via I²C, Steuerung via Web-Interface

Servosteuerung via Wlan und Webseite

Skript wird noch ergänzt

Exkurs: Was ist die Arduino IDE ?

IDE steht für integrated development environment, es ist eine Entwicklungsumgebung um Code zu erstellen.

Arduino ist eine italienische Firma, die erstmals Makern die Programmierung eines Microcontrollers über eine einfache Programmiersprache und ein kostengünstiges Board ermöglicht hat. Der Arduino Uno wurde begeistert von der Maker-community aufgenommen. Bis heute gibt es eine große community, die dieses Board mit libraries unterstützen (Libraries sind Sketches, die Funktionen ermöglichen oder die unterstützung von Hardware ermöglichen). Zusätzlich gibt es viele Foren, in denen Neulinge um Hilfe bitten können.

Auf den Arduino Uno folgten bald Entwicklerboards mit mehr IO Pins (Arduino Mega)

oder begehrten Zusatzfunktionen wie z.B. USB-Host-Funktion (Ardoino Nano)

Die chinesische Firma Espressif produzierte den Microcontroller esp8266, später den Microcontroller esp32, welche bei einem sehr günstigen Preis Bluetooth und Wlan verbaut hatten, ausserdem hatten sie neben vielen iO Pins eine reihe von Protokollen, mehr Speicher und eine leistungsfähige cpu verbaut. Mehr Details dazu auf der Pinout-Grafik oben auf dieser Seite, wo alle BUS-Systeme dieses esp32 Boards erwähnt sind oder hier mit einigen Code- und Anwendungsbeispielen.

Da die Maker community mit der Arduino IDE vertraut war, wurden Treiber für diese Entwicklungsumgebung entwickelt. Der Esp32 lässt sich aber auch mit einer Vielzahl anderer Sprachen programmieren (z.B. Micropython). Wir verwenden aber die Arduino IDE, dessen Programmiersprache an C++ angelehnt ist.
Hier findest du einen detaillierten Einstieg in die verwendete Programmiersprache.

Weitere Funktionen des esp32, die wir im Workshop nicht verwenden

Liste der verfügbaren Pins, einige Pins verhalten sich während des Bootens sonderbar, näheres im Link. Relevant sind die IO Connection Numbers, nicht die Pins, da im Artikel ein anderes Development Board verwendet wird.
steuern von Shields für 5V Controller mit dem ESP32 (der nur 3,3V über seine IO Pins schalten kann): Logic level shifters. Achtung: logic level shifters funktionierten nur bei digitalen Signalen, nicht bei Analogsignal.
Tip: müssen auf einem Breadboard Verbraucher mit 5V versorgt werden, kann dies über den USB Stecker passieren, der in den Esp32 eingesteckt ist. Der VIN Pin ist direkt mit dem 5V Kontakt am USB Stecker verbunden, 5V können von da also für das Breadboard abgegriffen werden.
PWM am Esp32 mit dem Befehl ledcAttachPin , da der analogWrite Befehl den wir vom Arduino kennen durch diesen mächtigeren Befehl ersetzt wurde. Hier ist eine 2. Erklärung dieses Befehls.
Digital 2 Analog Current (DAC Pins) können eine echte Analoge Spannung von 0-3,3V ausgeben.
deep sleep (RTC Pins) mit der 2. stromsparenden CPU des Esp32, hier läuft darüber stromsparend ein Timer.
kapazitive Sensorleitungen (10 Touch sensor Pins) ersetzen Taster indem sie Ladungsunterschiede von Haut messen.
Analoge Spannung zwischen 0 und 3,3V messen mit ADC Pins (Analog to digital Current) . ADC1 Pins können immer verwendet werden, ADC2 Pins können nur dann verwenden, wenn das Wifi nicht verwendet wird.
magnetische Felder in direkter Nähe des Esp32 Chips messen mit dem Hall Sensor. Er kann und zwischen Nord- oder Südpol ausrichtung des Magneten unterscheiden.
Tip: das BUS Interface I²S wird in vielen Projekten verwendet, von Ansteuerung von Bildschirmen bis zu Schrittmotoren, die sich damit exakt und schnell steuern lassen.

MicroSD Karte verwenden

Die Micro SD Karte verwendet das SPI Protokoll und verwendet die serielle Schnitstelle (SPI=SerialPinIn, SPO=SerialPinOut, etc.). Diese Webseite führt umfassend in das Thema ein.
Verbinden mit dem Chip. in diesem Programm sind die grundlgenden Befehle. Dateien auslesen und beschreiben wird hier gezeigt.

Esp32 Wlan Funktionalitäten

Für Wlan Anwendungen hat sich bewährt dass einer der beiden Prozessoren die Wlan Aufgaben übernimmt während der andere das Programm im Loop abarbeitet.
Drahtlose kommunikation ohne Router: im ESP-NOW Broadcast mode ist der ESP32 Access Point
ESP32 im Wlan
ESP8266 als Server im Wlan
Für eine komfortable Fernsteuerung mit Openstagecontrol lässt sich eine Bedienoberfläche für die Sensoren und Aktoren auf dem Smartphone oder Tablet erstellen.
Ein anderes freies und kostenloses Tool zur programmierung einer App ist http://appinventor.mit.edu/
Hier ein Praxisbeispiel, wo eine LED-Matrix über eine mit diesem Tool programmierte App gesteuert wird.
Und zum Spaß:
Esp32 mit Bildschirm und Tastatur als Terminal

ESP32 mit grafischem User Interface ausrüsten

Die hohe Rechenleistung und der im Vergleich mit anderen Prozessoren hohe Ramspeicher ermöglicht aufwändige grafische Schnittstellen, vergleichbar mit den Interfaces von Smartphones. Nexion bietet Touchscreens mit integriertem Prozessor, und asynchroner Kommunikation über serielle Schnittstelle. Das ist zwar sperrig und teuer, verhindert aber ruckelnde Menüs.
Falls alles auf dem Esp32 laufen soll:LittlevGL ist ein open source GUI Editor-Hier gibt es Demos zum ausprobieren. Mehr Infos dazu bietet dieser Elektor Artikel.
Eine kompakte Bauweise haben diese Esp32 Boards mit integrierten Displays.
Composite Video ist eine kuriose Variante, benötigt aber nur 2 Drähte und verwendet I²S und DAC, was eigentlich für die Audioausgabe konzipiert ist. Dafür wird ein regulärer Fernseher mit SCART oder Analog-in benötigt.

Audiodioausgabe

Audiowiedergabe mittels DAC, allerdings nur in 8 Bit. Wer guten Sound haben möchte kann mit zusätzlicher HardwareI²S mit 16 Bit verwenden. So oder so ist neben dem Lautsprecher auch ein (kleiner) Verstärker notwendig.

Videoverarbeitung via I²S

Dieses Video zeigt, was möglich ist und welche Framerate man erwarten kann.

projekte/roboterarm.txt · Zuletzt geändert: 16.11.2021 22:09 (Externe Bearbeitung)