Neuigkeiten    Das Projekt    Technik    RoboSpatium    Unterstützung    Stichwortverzeichnis    Download    Reaktionen    Spiele    Gadgets    Kontakt   




<<< Meine Computerhistorie         WM8650 >>>

Arduino Uno

Das Video zum Mikrocontroller


Allgemeines

Hauptplatine Arduino Uno
Abbildung 1:
Beim Arduino Uno handelt es sich um eine Mikrocontroller-Platine mit einem ATmega 328P Chip. Dieser Mikrocontroller läuft mit einer Taktrate von 16MHz, besitzt 32 Kilobyte Programmspeicher, 2 Kilobyte Arbeitsspeicher und ein Kilobyte an nichtflüchtigem Speicher.
Auf dem Board ist eine USB-Schnittstelle angebracht, über welche der Mikrocontroller programmiert werden kann und worüber im laufenden Betrieb Daten von einem anderen Computer gesendet und empfangen werden können.
Der ATmega 328P verfügt über 20 Pins, die als digitale Ein- oder Ausgänge programmiert werden können. 6 dieser Pins können als analoge Eingänge geschaltet werden. Ebenfalls 6 Pins können ein Pulsweitensignal ausgeben. Somit kann der Arduino Sensordaten aus seiner Umgebung erfassen und Peripheriegeräte wie Lichter, Servos oder Motoren ansteuern.
Mit elektrischer Energie wird die Platine über die USB-Schnittstelle (5V) oder über eine zweite auf dem Board verbaute Buchse für eine Eingangsspannung zwischen 6 und 24V versorgt.
Sowohl die Soft- als auch die Hardware der Arduino-Plattform sind Quelloffen und dürfen den eigenen Bedürfnissen entsprechend angepasst werden.
Zur Programmierung wird eine eigene, auf Java basierende und somit plattformübergreifende Entwicklungsumgebung bereitgestellt. Der Code-Editor bindet gcc als Compiler ein. Mit Arduino-spezifischen Bibliotheken (Librarys) wird die Codeentwicklung in C und C++ stark vereinfacht.

Vorteile

+ Geringer Energieverbrauch.
+ Schnelle Bootzeit.
+ Große Community.
+ Dokumentation in vielen Sprachen verfügbar.
+ Einfach zu programmieren, dank vieler Bibliotheken.
+ Gute Erweiterung von Computern mit USB-Schnittstelle (physical Computing).

Tastatur

Arduino Uno Digitale Pins Der Arduino Uno verfügt über keinen Anschluss für herkömmliche Tastaturen oder Bildschirme. Die Interaktion mit Menschen erfolgt daher über die 20 Eingabe-/ Ausgabe-Pins. Anstelle von Tastaturen können Schalter angeschlossen werden, wodurch an einen Eingabe-Pin eine Spannung von 5V (HIGH-Signal, Taster offen) oder von 0V (LOW-Signal, Taster geschlossen) gelegt wird. Die Spannung wird dabei im Zustand "offen" über einen pullup-Widerstand auf 5V gezogen.

Arduino Uno Schalter/Taster
Abbildung 2:

Bildschirm

Arduino Uno Digitale Pins
Abbildung 3:
Als "Bildschirm" fungieren im einfachsten Fall mehrere LEDs. Durch Drücken der Tasten können unterschiedliche Ereignisse ausgelöst und angezeigt werden. Variablenwerte können als Binärzahl ausgegeben werden.
Etwas komfortabler ist die Ausgabe per LCD Bildschirm. Verwendet wird eine Anzeige mit 16x2 Zeichen vom Typ Hitachi HD44780. Über das Potentiometer wird der Kontrast eingestellt. Ist dieser zu hoch oder zu niedrig eingestellt, ist auf dem Display nichts zu sehen.
Arduino Uno LCD Bildschirm
Abbildung 4:


Quellcode zum Zähler mit LCD für Arduino Uno Mikrocontroller

Sensorscheibe

Arduino Uno Digitale Pins
Abbildung 5:
Mittels einer gezahnten Scheibe und zweier Lichtschranken erhält man einen digitalen Sensor für Drehbewegungen.
Die Lichtschranken werden über die digitalen Eingänge 0 und 1 eingelesen. Der LCD wird wie oben beschrieben angeschlossen.
Arduino Uno Digital sensor disk
Abbildung 6:


Quellcode optische Sensorscheibe mit LCD für Arduino Uno Mikrocontroller

PID Regler

Im Kapitel zu Servos habe ich eine Eigenbau-Servo aus einem Scheibenwischermotor gezeigt. Mit einem Mikrocontroller kann die Steuerung deutlich verbessert werden. Per Software wird ein PID Regelkreis aufgebaut. PID steht dabei für Proportional-Integral-Derivative Regler.
Bei einem Proportional-Regler wird die Spannung am Servomotor per Pulsweitenmodulation erhöht, je weiter der Sollwert vom Istwert abweicht. Es besteht dabei ein linearer Zusammenhang zwischen der Differenz der Eingangsspannungen und der daraus errechneten Motorspannung:


Dabei bedeutet:
U - An den Motor abgegebene Effektivspannung
KP - Proportionalitätsfaktor
e - Differenz zwischen Soll- und Istwert

Die Differenz zwischen Soll und Istwert (USoll - USensor) bezeichnet man auch als den momentanen Fehler am Eingang des Regelkreises.

Proportionalcontroller
Abbildung 7:

Nähert sich umgekehrt der Istwert dem Sollwert an, so verlangsamt sich die Rotation des Servos, da der Fehler und somit die an den Motor abgegebene Spannung immer kleiner wird.
Proportionalcontroller
Abbildung 8:



Bei einem Integrierenden-Regler wird die Spannung am Servomotor erhöht, je länger der Soll- vom Istwert abweicht:


Dabei bedeutet:
U - An den Motor abgegebene Effektivspannung
Ki - Proportionalitätsfaktor
e - Fehler

Integral controller
Abbildung 9:

Ein rein differenzierender Regler sorgt dafür, dass der Motor mit einer höheren Spannung angesteuert wird, je schneller sich der Fehler ändert:


Dabei bedeutet:
U - An den Motor abgegebene Effektivspannung
KD - Proportionalitätsfaktor
e - Fehler

Derivative controller
Abbildung 10:


Der Motor wird bei einem rein differenzierenden Regler gestoppt, sobald sich der Sollwert nicht mehr ändert, also sobald das Potentiometer für den Sollwert nicht mehr bewegt wird. Der Servoarm erreicht daher nie den vorgegebenen Sollwert.

Servo

Eine Kombination aus proportional, integrierendem und differenzierendem Regelkreis bezeichnet man als PID-Regler. In der Software für das Servo ist zusätzlich ein Softstart und eine Sicherung gegen Blockierung der Mechanik programmiert.

Beim Anschließen der folgenden Schaltung ist die Drehrichtung des Scheibenwischermotors von Bedeutung. Vor dem ersten Probelauf sollte der Wert für MAX_DUTYCYCLE im Quellcode auf etwa 75 gesetzt werden, um das Drehmoment zu begrenzen für den Fall, dass die Schaltung nicht korrekt arbeitet. Das Potentiometer für den Sollwert muss vor Anschließen der Versorgungsspannung in Mittelstellung gebracht werden. Dreht sich das Servo nach Anschließen der Versorgungsspannung ebenfalls in Mittelstellung, so stimmt die Polung des Servo-Sensors. Dreht das Servo bis zum Anschlag in eine Richtung, so muss die Polung des Servo Sensors (+ und -) vertauscht werden.
Die Leistungstransistoren der hier gezeigten H-Brücke sind für maximal 13A ausgelegt. Zieht euer Scheibenwischermotor schon im Leerlauf einen Strom von 4-5A, so ist davon auszugehen, dass dieser unter Last den Grenzwert erreicht oder gar überschreitet. Für die Arduino-Plattform sind kommerzielle H-Brücken erhältlich, die deutlich höhere Ströme verkraften. Diese Schaltkreise sind auch gegen Kurzschluss und Überhitzung geschützt. Wer wenig Erfahrung im Aufbau elektronischer Schaltkreise hat, sollte zu diesen fertig aufgebauten H-Brücken greifen.
Eigenbau Servo Arduino Uno
Abbildung 11:


Quellcode zum Scheibenwischer Servo für Arduino Uno Mikrocontroller

Hier ist meine (alles andere als perfekte) Befestigungsmethode für das Potentiometer am Scheibenwischermotor zu sehen:
Eigenbau Servo Arduino Uno
Abbildung 12:


Eigenbau Servo Arduino Uno mit BTS7960 Chipsatz
Abbildung 13:
Aufgrund vieler Nachfragen gibt's hier den Schaltplan mit einer BTS7960 H-Brücke für Ströme bis zu 42A. Ein leicht abgeänderter Sketch ist ebenfalls im Download-Paket enthalten.

Digitales Linearservo

Eine von Lichtschranken abgetastete gezahnte Scheibe kann anstelle eines Potentiometers als digitaler Rotationssensor verwendet werden. Im Video habe ich daraus einen Linearantrieb erstellt:

Digitales Servo Arduino Uno
Abbildung 14:


Quellcode zum Linearservo für Arduino Uno Mikrocontroller



<<< Meine Computerhistorie         WM8650 >>>


Neuigkeiten    Das Projekt    Technik    RoboSpatium    Unterstützung    Stichwortverzeichnis    Archiv    Download    Reaktionen    Spiele    Verweise    Gadgets    Kontakt    Impressum   





Twitter YouTube Hackaday Patreon TPO