Der Arduino Uno R3 ist ein Open-Source Microcontroller aus der Arduino Familie.Er ist zwar kein Produkt der Raspberry Pi Foundation wie der Pico, aber es schadet nie, breiter aufgestellt zu sein, denn nicht jeder MCU ist für jeden Zweck gleich gut geeignet.
Die Arduino Plattform
Arduino ist nicht nur ein MCU sondern eine Plattform, die inzwischen ein ganzes Bündel an Boards hervorgebracht hat.Alles ist unter Open-Source Lizenz freigegeben, so dass es viele Clones des Referenz Designs gibt, ich benutze einen R3 von AZ-Delivery, bei dem der ATmega Prozessor nicht im DIL-Gehäuse gesockelt sondern als SMD Baustein verlötet ist. Dadurch ist die Platine etwas kleiner.
Arduino Uno R3
Die Platine des Arduino Uno R3 misst 68,6mm * 53,4mm . Die Stromversorgung wird durch einen Hohlstecker sichergestellt. Dort muss eine Spannung zwischen 7 bis 12V anliegen. Alternativ kann der MCU auch über die USB-B Buchse angetrieben werden, dann hat er allerdings weniger „Saft“ als spezifiziert. Während der Entwicklung ist dies aber die beste Möglichkeit. Mit insgesamt 20 GPIO Pins (analog und digital), ist er sehr gut für den Anschluss von Sensoren und Aktoren ausgestattet. Jeder Pin liefert max. 20mA Strom.
Ich finde es sehr praktisch, dass die Header nicht als Stiftleiste sondern als Buchsen ausgelegt sind, dadurch muss man den MCU nicht zwangsweise auf ein Breadboard stecken. Bei dem Format wäre das auch nicht möglich.
Shields
Wie beim Raspberry Pi gibt es Erweiterungsplatinen, die du auf den R3 stecken kannst, die heißen be Arduino Shields im Gegensatz zu HAT beim Raspi Ich weiß nicht, warum jeder Hersteller neue Namen für sowas erfindet.
Es gibt Shields, die den MCU um eine Ethernet Schnittstelle erweitern, Experimentier-Shields mit verschiedenen Bauelementen oder Prototype-Shields mit Minibreadboard bis hin zu Shields mit Motortreibern, die eine komplettes CNC Fräse steuern können.
Stromversorgung | 7-12V |
Betriebsspannung | 5V |
CPU | ATmega328P / ATmega16U2 für USB |
Speicher | 2 KB SRAM / 32 KB Flash / 1KB EEPROM |
Takt | 16 MHz |
GPIO | 6 Analog / 14 Digital |
I²C | 1 |
PWM | 6x |
USB | 1.1 (USB-B) |
SPI | 1 |
UART | Ja |
Besonderheiten | Reset-Button |
Arduino IDE
Für den Arduino gibt es ein dediziertes Integrated Desktop Environment (IDE), die dir die Programmierung erleichtert. Diese kannst du kostenfrei herunterladen.
Programmiert wird der Arduino üblicherweise in C / C++. Es aber wohl auch möglich, den MCU auf MicroPython umzuflashen. Darauf gehe ich vielleicht in einem anderen Beitrag noch ein. Auf dem Uno ist bereits von Werk ein Sketch aufgeflasht, der die Onboard LED zum Blinken bringt, damit weißt du sofort nach Herstellen der Stromversorgung, dass der MCU funktioniert.
Rechtsstreit
2015 entbrannte ein Rechtsstreit um die Marke Arduino, aufgrund dessen auch Boards unter dem Namen Genuino auf den Markt kamen, die aber völlig identisch zu den Arduino Boards sind.
Ampelschaltung
Von Waveshare gibt es komplett vorgefertigtes Breakoutboard mit drei LED und den dazugehörigen Widerständen zu kaufen. Dieses Modul kostet aktuell lediglich 3,29€. Damit möchte ich, auch bei weiteren MCU die Programmierung testen. Das Board wird einfach in Längsrichtung mit seinen vier Pins auf das Breakoutboard gesteckt und mit vier Jumperkabeln mit dem Uno verbunden. Beim Arduino Uno R3 schließe ich die vier Pins wie folgt an
- GND auf GND
- Rot an Pin 10
- Gelb an Pin 11
- und Grün an Pin 12.
Das Sketch (so heißen Programme bei Arduino), um eine Ampelschaltung zu simulieren sieht so aus:
int ledRot = 10;
int ledGelb = 11;
int ledGruen = 12;
boolean blinkmode = false;
int phase = 1;// Ampelphase
void setup() {
// put your setup code here, to run once:
pinMode(ledRot, OUTPUT);
pinMode(ledGelb, OUTPUT);
pinMode(ledGruen, OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
if(blinkmode) {
// Blinkmodus
digitalWrite(ledRot, HIGH);
digitalWrite(ledGelb, HIGH);
digitalWrite(ledGruen, HIGH);
delay(1500);
digitalWrite(ledRot, LOW);
digitalWrite(ledGelb, LOW);
digitalWrite(ledGruen, LOW);
delay(200);
}
else {
// Ampelmodus
printf("Phase: %d", phase);
switch(phase) {
case 1: // Phase rot
digitalWrite(ledRot, HIGH);
digitalWrite(ledGelb, LOW);
digitalWrite(ledGruen, LOW);
delay(1500);
phase = 2;
break;
case 2: // Phase Rot/Gelb
digitalWrite(ledRot, HIGH);
digitalWrite(ledGelb, HIGH);
digitalWrite(ledGruen, LOW);
delay(1000);
phase = 3;
break;
case 3: // Phase Grün
digitalWrite(ledRot, LOW);
digitalWrite(ledGelb, LOW);
digitalWrite(ledGruen, HIGH);
delay(2000);
phase = 4;
break;
case 4: // Phase Gelb
digitalWrite(ledRot, LOW);
digitalWrite(ledGelb, HIGH);
digitalWrite(ledGruen, LOW);
delay(1500);
phase = 1;
break;
}
}
}
Das Sketch hat zwei Betriebszustände, wenn blinkmode
true
ist, blinken alle LED zeitgleich. Damit teste ich die korrekte Verkabelung. Bei false
simuliert das Sketch die Zustände einer 4-Phasen Verkehrsampel. Den Code findest du auch im GIT Repository
Fazit
Im Arduino Uno R3 MCU steckt eine Menge Potential für kreative Bastler und liegt durch seinen Formfaktor gut in der Hand. Die Durchgänge Beschriftung aller Anschlüsse macht den Schaltungsaufbau sehr einfach und vermeidet Fehler.
Als Fan des Open-Source Gedanken, begeistert mich die freie Verfügbarkeit aller Ressourcen (Schaltpläne und Platinenlayout inbegriffen). Dadurch existieren viele Klone, was sich im Preis und der Verfügbarkeit bemerkbar macht.