Arduino Entfernungsmesser und Digitale Wasserwaage bauen – Einfache Schritt-für-Schritt-Anleitung
In diesem Tutorial lernen wir, wie man einen Arduino Entfernungsmesser und eine digitale Wasserwaage baut. Sie können das folgende Video ansehen oder die schriftliche Anleitung unten lesen. Das Gerät verfügt über einen Ultraschallsensor zur Messung der Entfernung zum nächsten Objekt, einen Beschleunigungssensor zur Messung des Winkels zum Boden, ein LCD-Display zur Anzeige der Ergebnisse und eine benutzerdefinierte PCB, auf der alle Komponenten verbunden sind. Wir können das Gerät mit nur einem einzigen Taster bedienen. Sobald wir das Gerät einschalten, müssen wir die Maßeinheit auswählen. Durch Drücken des Tasters können wir durch die Einheiten schalten, und wenn wir den Taster eine Weile gedrückt halten, gelangen wir in das erste Programm. Hier können wir die Entfernung messen und auch die letzten beiden Messungen speichern. Für den Eintritt in das zweite Programm müssen wir den Taster wieder eine Weile gedrückt halten. In diesem Programm können wir eine quadratische Fläche messen, indem wir zwei senkrechte Entfernungsmessungen durchführen. Das nächste Programm ist die digitale Wasserwaage, hier können wir den Winkel zum Boden messen. Mit dem Taster können wir zwischen den beiden Achsen umschalten oder entweder den Pitch- oder Roll-Winkel messen. Hier ist der Schaltplan dieses Arduino-Projekts. Beachten Sie, dass ich bereits detaillierte Tutorials zu jedem dieser Module habe, die Sie auf den folgenden Links überprüfen können: Ultraschallsensor Tutorial, LCD Tutorial, MEMS Beschleunigungssensor Tutorial. Sie erhalten die für dieses Projekt benötigten Komponenten über die Links unten: Gemäß dem Schaltplan müssen wir die benutzerdefinierte PCB entwerfen, was ich mit der kostenlosen Online-Schaltungsdesign-Software EasyEDA getan habe. Nach Abschluss des Designs können wir einfach die Gerber-Datei exportieren, die für die PCB-Fertigung verwendet wird. Sie können die EasyEDA-Projektdateien dieses Projekts hier überprüfen. Dann können wir unsere PCB bei JLCPCB bestellen, was tatsächlich der Sponsor dieses Projekts ist. Hier können wir einfach die Gerber-Datei per Drag & Drop hochladen. Nach dem Hochladen können wir unser PCB im Gerber-Viewer prüfen. Wenn alles in Ordnung ist, können wir fortfahren, die gewünschten Eigenschaften für unsere PCB auswählen und sie zu einem vernünftigen Preis bestellen. Beachten Sie, dass Sie bei Ihrer ersten Bestellung bei JLCPCB bis zu 10 PCBs für nur 2$ erhalten können. Nach einigen Tagen sind die PCBs angekommen. Die Qualität ist hervorragend und alles entspricht genau dem Design. Okay, jetzt können wir mit dem Zusammenbau der Elektronik für dieses Projekt beginnen. Ich begann damit, Pin-Header auf die PCB zu löten. So können wir die Komponenten bei Bedarf einfach anschließen und trennen. Dann lötete ich die drei Widerstände ein. Zwei davon sind für den Spannungsteiler für den Kontrast des LCD. Der 1k-Widerstand sollte an R1 und der 220-Ohm-Widerstand an R2 platziert werden. Der dritte ist ein Pull-Up-Widerstand für den Taster. Als Nächstes ging ich zum Bau des Gehäuses über. Ich entschied mich für transparentes Acryl, weil ich die Schönheit aller elektronischen Komponenten sichtbar machen wollte. Ich hatte noch 5mm dickes Acryl von einem alten Projekt und verwendete eine Kreissäge, um es zuzuschneiden. Dann musste ich eine Öffnung für das LCD auf der Oberseite des Gehäuses machen, die eigentlich 4mm dick ist, weil sie besser zum LCD passt. Zuerst bohrte ich zwei Löcher und führte dann eine Metallsäge hindurch. Mit der Metallsäge schnitt ich die Öffnung grob aus und feilte dann feine gerade Linien, damit das LCD fest sitzt. Dann bohrte ich mit einem Forstner-Bohrer die Öffnungen für den Netzschalter, den Steuerknopf und den Ultraschallsensor. Sobald alle Teile bereit waren, montierte ich das Gehäuse mit 5-Minuten-Epoxidharz. Für den Deckel steckte ich zwei Bolzen ein und klebte sie, durch die die obere Platte eingeschoben und mit Muttern oben gesichert werden kann. Das Gehäuse ist nun fertig, und so fuhr ich fort, Pin-Header an das LCD zu löten, damit ich es einfach an die PCB anschließen kann. Ich lötete auch Pin-Header oder Jumper-Kabel an den Netzschalter, den Taster und den Batterieanschluss. Schließlich hatte ich alles bereit, um das Gerät zusammenzubauen. Ich begann damit, den Ultraschallsensor auf der PCB einzusetzen und durch die Löcher in der Seitenwand. Als Nächstes kamen das Arduino-Board, das Beschleunigungsmesser-Modul sowie der Batterieanschluss. Auf der oberen Platte befestigte ich das LCD, den Netzschalter und den Taster und verband sie dann mit der PCB. Zuletzt steckte ich die 9V-Batterie in den Anschluss und sicherte die obere Platte mit den Muttern. Und das war's – das Arduino Entfernungsmesser-Projekt ist fertig, aber was in diesem Video noch bleibt, ist die Erklärung der Programmierung. Sehen wir uns also den Arduino-Code an. Da der Code etwas länger ist, werde ich ihn für ein besseres Verständnis in Abschnitten mit Beschreibung für jeden Abschnitt posten. Am Ende dieses Artikels poste ich den vollständigen Quellcode. Zuerst müssen wir die Wire.h-Bibliothek für die I2C-Kommunikation des Beschleunigungssensors sowie die LiquidCrystal.h-Bibliothek für die Steuerung des LCDs einbinden. Dann definieren wir das LCD, die I2C-Adresse des MPU6050-Beschleunigungsmesser-Moduls, die Pins des Ultraschallsensors sowie einige für das nachfolgende Programm benötigte Variablen. Im Setup initialisieren wir sowohl die I2C-Schnittstelle des Beschleunigungssensors als auch das Flüssigkristall-Display sowie die Pin-Modi für die Trigger- und Echo-Pins des Ultraschallsensors und den Taster-Pin. Im Haupt-Loop haben wir eine switch-Anweisung, mit der wir zwischen den verschiedenen Programmen unseres Geräts umschalten können. Im ersten Fall, Case 0, wählen wir die Maßeinheit. Mit der lcd.print()-Funktion geben wir den Text auf dem LCD aus und schalten mit if-Anweisungen durch die vier Maßeinheiten. Wir sollten hier beachten, dass die unitSelect-Variable in der getDistance()-Benutzerfunktion wirkt, wo sie tatsächlich angibt, in welche Einheit wir die grundlegende cm-Einheit umrechnen sollen, die wir vom Ultraschallsensor erhalten. Um die Maßeinheit auszuwählen und auch in das erste Programm des Geräts zu gelangen, müssen wir den Taster einfach länger als eine halbe Sekunde gedrückt halten. In Case 1, dem Entfernungsmessprogramm, erhalten wir zuerst die Entfernung zum nächsten Objekt mit der benutzerdefinierten getDistance()-Funktion. Sehen wir uns an, wie diese Funktion funktioniert. Hier sagen wir mit dem Trigger-Pin dem Sensor, eine Ultraschallwelle zu erzeugen. Dann messen wir mit dem Echo-Pin und der pulseIn()-Funktion die Dauer, die die Welle vom Sensor zum Objekt und zurück benötigt. Berücksichtigt man die Schallgeschwindigkeit und die Laufzeit, kann man die Entfernung leicht berechnen. So geben wir die gemessene Entfernung zusammen mit etwas Text auf dem LCD aus und verwenden „if“-Anweisungen: Wenn wir den Taster drücken, geben wir die letzten beiden Messungen aus oder speichern sie. Als Nächstes kommt das Programm zur Flächenberechnung, in dem wir ähnliche Methoden verwenden. Wir müssen zwei senkrechte Messungen durchführen und sie einfach multiplizieren, um die Fläche des Quadrats zu erhalten, das sie bilden. Der letzte Fall ist das Winkelmessprogramm. Hier müssen wir die Beschleunigungsmesser-Daten lesen, die eigentlich die Stärke des Erdgravitationsfeldes in drei verschiedenen Achsen X, Y und Z sind. Der Wert jeder Achse wird in 2 Registern gespeichert, daher müssen wir insgesamt 6 Register lesen und kombinieren, um den richtigen Wert zu erhalten. Sobald wir die X-, Y- und Z-Werte des Beschleunigungssensors haben, können wir den Pitch-Winkel (Rotation um die Y-Achse) sowie den Roll-Winkel (Rotation um die X-Achse) mit den beiden Gleichungen berechnen. Weitere Details zu diesen Gleichungen finden Sie in der Anwendungshinweis von Freescale Semiconductor, Tilt Sensing Using a Three-Axis Accelerometer. Danach geben wir die Werte zusammen mit etwas Text auf dem LCD aus, und durch Drücken des Tasters ändern wir, was auf dem LCD angezeigt wird – ob Pitch- oder Roll-Winkel. Hier ist der vollständige Quellcode für dieses Arduino Entfernungsmesser- und Wasserwaage-Projekt: Das war's für dieses Arduino-Projekt. Ich hoffe, es hat Ihnen gefallen und Sie haben etwas Neues gelernt. Stellen Sie gerne Fragen im Kommentarbereich unten.Überblick




Schaltplan des Arduino Entfernungsmessers

Custom Design PCB



Gerät zusammenbauen









Arduino Entfernungsmesser und Digitale Wasserwaage Quellcode
#include<Wire.h> // I2C communication library
#include <LiquidCrystal.h> // includes the LiquidCrystal Library
LiquidCrystal lcd(7, 6, 5, 4, 3, 2); // Creates an LCD object. Parameters: (rs, enable, d4, d5, d6, d7)
const int MPU = 0x68; // I2C address of the MPU6050 accelerometer
#define trigPin 8
#define echoPin 9
#define selectButton 10
int16_t AcX, AcY, AcZ;
long duration;
float distance;
int program = 0;
float d = 0;
float d1 = 0;
float d2 = 0;
float area = 0;
int axis = 0;
int angle = 0;
int unitSelect = 0;
String unit = "cm";void setup() {
// Initialize interface to the MPU6050
Wire.begin();
Wire.beginTransmission(MPU);
Wire.write(0x6B);
Wire.write(0);
Wire.endTransmission(true);
lcd.begin(16, 2); // Initializes the interface to the LCD screen
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(selectButton, INPUT_PULLUP);
}switch (program) {
// Switch between different programs
case 0: // Select unit of measurement
lcd.setCursor(0, 0); // Sets the location at which subsequent text written to the LCD will be displayed
lcd.print("Select Unit: ");
lcd.setCursor(13, 0);
lcd.print(unit);
lcd.print(" ");
delay(10);
// If button is pressed - change unit
if (digitalRead(selectButton) == 0) {
if (unitSelect == 0) { unit = "in"; unitSelect = 1; }
else if (unitSelect == 1) { unit = "m"; unitSelect = 2; }
else if (unitSelect == 2) { unit = "ft"; unitSelect = 3; }
else if (unitSelect == 3) { unit = "cm"; unitSelect = 0; }
// If button is held longer then half a second - change program
delay(500);
if (digitalRead(selectButton) == 0) {
program = 1;
lcd.clear();
delay(500);
}
}
break;// Converting the units
if (unitSelect == 1) { distance = distance; unit = "cm"; } // cm to cm
else if (unitSelect == 2) { distance = distance * 0.393701; unit = "in"; } // cm to in
else if (unitSelect == 3) { distance = distance * 0.01; unit = "m"; } // cm to m
else if (unitSelect == 0) { distance = distance * 0.0328; unit = "ft"; } // cm to ft// If button is held longer then half a second - change program
delay(500);
if (digitalRead(selectButton) == 0) {
program = 1;
lcd.clear();
delay(500);
}
break;case 1: // Distance measuring program
distance = getDistance(); // Distance to the nearest object
lcd.setCursor(0, 0);
lcd.print("Dist: ");
lcd.print(distance); // Prints the distance value from the sensor
lcd.print(" ");
lcd.setCursor(14, 0);
lcd.print(unit);
delay(10);
lcd.setCursor(0, 1);
lcd.print("d:");
lcd.setCursor(8, 1);
lcd.print("d:");
delay(200);
// Save distance 1
if (digitalRead(selectButton) == 0) {
if (d == 0) {
lcd.setCursor(0, 1);
lcd.print("d: ");
lcd.setCursor(2, 1);
lcd.print(distance);
d = 1;
delay(100);
}
// Save distance 2
else if (d == 1) {
lcd.setCursor(8, 1);
lcd.print("d: ");
lcd.setCursor(10, 1);
lcd.print(distance);
d = 0;
delay(100);
}
// If button is held longer then half second change program
delay(500);
if (digitalRead(selectButton) == 0) {
program = 2;
d = 0;
lcd.clear();
delay(500);
}
}
break;//===== getDistance - Custom Function
float getDistance() {
// Clears the trigPin
digitalWrite(trigPin, LOW);
// Sets the trigPin on HIGH state for 10 micro seconds
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Reads the echoPin, returns the sound wave travel time in microseconds
duration = pulseIn(echoPin, HIGH);
// Calculating the distance
distance = duration * 0.034 / 2; // distance in cm
// Converting the units
if (unitSelect == 1) { distance = distance; unit = "cm"; }
else if (unitSelect == 2) { distance = distance * 0.393701; unit = "in"; }
else if (unitSelect == 3) { distance = distance * 0.01; unit = "m"; }
else if (unitSelect == 0) { distance = distance * 0.0328; unit = "ft"; }
return distance;
}
case 2: // Area measuring program
distance = getDistance();
lcd.setCursor(0, 0);
lcd.print("Area: ");
lcd.print(area); // Prints the calculated area from the two measurements
lcd.setCursor(12, 0);
lcd.print(unit); // Prints the selected unit and the square sign below
lcd.print("^2");
delay(200);
if ( d == 0) {
lcd.setCursor(0, 1);
lcd.print("d1: ");
lcd.setCursor(3, 1);
lcd.print(distance);
delay(200);
}
else if (d == 1) {
lcd.setCursor(9, 1);
lcd.print("d2: ");
lcd.setCursor(12, 1);
lcd.print(distance);
delay(200);
}
else if (d == 2) {
lcd.setCursor(6, 0);
lcd.print(area);
delay(200);
}
// Save distance 1
if (digitalRead(selectButton) == 0) {
if (d == 0) {
lcd.setCursor(0, 1);
lcd.print("d1: ");
lcd.setCursor(3, 1);
lcd.print(distance);
d = 1;
d1 = distance;
delay(100);
}
// Save distance 2
else if (d == 1) {
lcd.setCursor(9, 1);
lcd.print("d2: ");
lcd.setCursor(12, 1);
lcd.print(distance);
d = 2;
d2 = distance;
area = d1 * d2; // Calculate the area
delay(100);
}
else if (d == 2) {
lcd.clear();
d = 0;
area = 0;
delay(100);
}
// If button is held longer then half second change program
delay(500);
if (digitalRead(selectButton) == 0) {
program = 3;
d = 0;
lcd.clear();
delay(500);
}
}
break;case 3: // Angle measuring program
// Read the accelerometer data
Wire.beginTransmission(MPU);
Wire.write(0x3B); // Start with register 0x3B (ACCEL_XOUT_H)
Wire.endTransmission(false);
Wire.requestFrom(MPU, 6, true); // Read 6 registers total, each axis value is stored in 2 registers
AcX = Wire.read() << 8 | Wire.read(); // X-axis value
AcY = Wire.read() << 8 | Wire.read(); // Y-axis value
AcZ = Wire.read() << 8 | Wire.read(); // Z-axis value
if ( axis == 0) {
// Calculating the Pitch angle (rotation around Y-axis)
angle = atan(-1 * AcX / sqrt(pow(AcY, 2) + pow(AcZ, 2))) * 180 / PI;
lcd.setCursor(0, 0);
lcd.print("Pitch");
}
else if (axis == 1) {
// Calculating the Roll angle (rotation around X-axis)
angle = atan(-1 * AcY / sqrt(pow(AcX, 2) + pow(AcZ, 2))) * 180 / PI;
lcd.setCursor(0, 0);
lcd.print("Roll ");
}
lcd.setCursor(0, 1);
lcd.print("Angle: ");
lcd.print(abs(angle));
lcd.print(" ");
lcd.setCursor(10, 1);
lcd.print("deg");
delay(200);
// Change axis
if (digitalRead(selectButton) == 0) {
if (axis == 0) { axis = 1; delay(100); }
else if (axis == 1) { axis = 0; delay(100); }
// If button is held longer then half second change program
delay(500);
if (digitalRead(selectButton) == 0) {
program = 0;
lcd.clear();
delay(500);
}
}
break;
}/* DIY Digital Range Measurer and Spirit Level by Dejan Nedelkovski, www.HowToMechatronics.com */
#include<Wire.h> // I2C communication library
#include <LiquidCrystal.h> // includes the LiquidCrystal Library
LiquidCrystal lcd(7, 6, 5, 4, 3, 2); // Creates an LCD object. Parameters: (rs, enable, d4, d5, d6, d7)
const int MPU = 0x68; // I2C address of the MPU6050 accelerometer
#define trigPin 8
#define echoPin 9
#define selectButton 10
int16_t AcX, AcY, AcZ;
long duration;
float distance;
int program = 0;
float d = 0;
float d1 = 0;
float d2 = 0;
float area = 0;
int axis = 0;
int angle = 0;
int unitSelect = 0;
String unit = "cm";
void setup() {
// Initialize interface to the MPU6050
Wire.begin();
Wire.beginTransmission(MPU);
Wire.write(0x6B);
Wire.write(0);
Wire.endTransmission(true);
lcd.begin(16, 2); // Initializes the interface to the LCD screen
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(selectButton, INPUT_PULLUP);
}
void loop() {
switch (program) {
// Switch between different programs
case 0: // Select unit of measurement
lcd.setCursor(0, 0);
lcd.print("Select Unit: ");
lcd.setCursor(13, 0);
lcd.print(unit);
lcd.print(" ");
delay(10);
// If button is pressed - change unit
if (digitalRead(selectButton) == 0) {
if (unitSelect == 0) { unit = "in"; unitSelect = 1; }
else if (unitSelect == 1) { unit = "m"; unitSelect = 2; }
else if (unitSelect == 2) { unit = "ft"; unitSelect = 3; }
else if (unitSelect == 3) { unit = "cm"; unitSelect = 0; }
// If button is held longer then half a second - change program
delay(500);
if (digitalRead(selectButton) == 0) {
program = 1;
lcd.clear();
delay(500);
}
}
break;
case 1: // Distance measuring program
distance = getDistance(); // Distance to the nearest object
lcd.setCursor(0, 0);
lcd.print("Dist: ");
lcd.print(distance);
lcd.print(" ");
lcd.setCursor(14, 0);
lcd.print(unit);
delay(10);
lcd.setCursor(0, 1);
lcd.print("d:");
lcd.setCursor(8, 1);
lcd.print("d:");
delay(200);
// Save distance 1
if (digitalRead(selectButton) == 0) {
if (d == 0) {
lcd.setCursor(0, 1);
lcd.print("d: ");
lcd.setCursor(2, 1);
lcd.print(distance);
d = 1;
delay(100);
}
// Save distance 2
else if (d == 1) {
lcd.setCursor(8, 1);
lcd.print("d: ");
lcd.setCursor(10, 1);
lcd.print(distance);
d = 0;
delay(100);
}
// If button is held longer then half second change program
delay(500);
if (digitalRead(selectButton) == 0) {
program = 2;
d = 0;
lcd.clear();
delay(500);
}
}
break;
case 2: // Area measuring program
distance = getDistance();
lcd.setCursor(0, 0);
lcd.print("Area: ");
lcd.print(area);
lcd.setCursor(12, 0);
lcd.print(unit);
lcd.print("^2");
delay(200);
if ( d == 0) {
lcd.setCursor(0, 1);
lcd.print("d1: ");
lcd.setCursor(3, 1);
lcd.print(distance);
delay(200);
}
else if (d == 1) {
lcd.setCursor(9, 1);
lcd.print("d2: ");
lcd.setCursor(12, 1);
lcd.print(distance);
delay(200);
}
else if (d == 2) {
lcd.setCursor(6, 0);
lcd.print(area);
delay(200);
}
// Save distance 1
if (digitalRead(selectButton) == 0) {
if (d == 0) {
lcd.setCursor(0, 1);
lcd.print("d1: ");
lcd.setCursor(3, 1);
lcd.print(distance);
d = 1;
d1 = distance;
delay(100);
}
// Save distance 2
else if (d == 1) {
lcd.setCursor(9, 1);
lcd.print("d2: ");
lcd.setCursor(12, 1);
lcd.print(distance);
d = 2;
d2 = distance;
area = d1 * d2; // Calculate the area
delay(100);
}
else if (d == 2) {
lcd.clear();
d = 0;
area = 0;
delay(100);
}
// If button is held longer then half second change program
delay(500);
if (digitalRead(selectButton) == 0) {
program = 3;
d = 0;
lcd.clear();
delay(500);
}
}
break;
case 3: // Angle measuring program
// Read the accelerometer data
Wire.beginTransmission(MPU);
Wire.write(0x3B); // Start with register 0x3B (ACCEL_XOUT_H)
Wire.endTransmission(false);
Wire.requestFrom(MPU, 6, true); // Read 6 registers total, each axis value is stored in 2 registers
AcX = Wire.read() << 8 | Wire.read(); // X-axis value
AcY = Wire.read() << 8 | Wire.read(); // Y-axis value
AcZ = Wire.read() << 8 | Wire.read(); // Z-axis value
if ( axis == 0) {
// Calculating the Pitch angle (rotation around Y-axis)
angle = atan(-1 * AcX / sqrt(pow(AcY, 2) + pow(AcZ, 2))) * 180 / PI;
lcd.setCursor(0, 0);
lcd.print("Pitch");
}
else if (axis == 1) {
// Calculating the Roll angle (rotation around X-axis)
angle = atan(-1 * AcY / sqrt(pow(AcX, 2) + pow(AcZ, 2))) * 180 / PI;
lcd.setCursor(0, 0);
lcd.print("Roll ");
}
lcd.setCursor(0, 1);
lcd.print("Angle: ");
lcd.print(abs(angle));
lcd.print(" ");
lcd.setCursor(10, 1);
lcd.print("deg");
delay(200);
// Change axis
if (digitalRead(selectButton) == 0) {
if (axis == 0) { axis = 1; delay(100); }
else if (axis == 1) { axis = 0; delay(100); }
// If button is held longer then half second change program
delay(500);
if (digitalRead(selectButton) == 0) {
program = 0;
lcd.clear();
delay(500);
}
}
break;
}
}
//===== getDistance - Custom Function
float getDistance() {
// Clears the trigPin
digitalWrite(trigPin, LOW);
// Sets the trigPin on HIGH state for 10 micro seconds
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Reads the echoPin, returns the sound wave travel time in microseconds
duration = pulseIn(echoPin, HIGH);
// Calculating the distance
distance = duration * 0.034 / 2; // distance in cm
// Converting the units
if (unitSelect == 1) { distance = distance; unit = "cm"; }
else if (unitSelect == 2) { distance = distance * 0.393701; unit = "in"; }
else if (unitSelect == 3) { distance = distance * 0.01; unit = "m"; }
else if (unitSelect == 0) { distance = distance * 0.0328; unit = "ft"; }
return distance;
}
Herstellungsprozess
- Modellbahn DCC-Zentrale selbst bauen mit Arduino – Kostenlose App inklusive
- Arduino Digitaler Würfel: LCD-Würfel mit Zufallszahlen (1–6)
- LCD-Animationen & Spiele mit Arduino UNO erstellen
- Arduino Audio-Frequenz-Detektor – Lauteste Schallpeaks mit hochsensiblem Modul messen
- Selbstbau-Tamagotchi: Digitales Haustier mit Arduino
- Arduino Tic Tac Toe mit MAX7219 LED-Matrix und Karton-Gehäuse
- DIY-Voltmeter mit Arduino und Nokia 5110 Display – Schritt-für-Schritt-Anleitung
- Zuverlässigen Arduino-Countdown-Timer mit SparkFun 7-Segment-Display bauen
- Python 3 zu Arduino UNO: Einfache Steuerung & LED-Demo
- Kompaktes FM-Radio mit Arduino Nano und RDA5807M selbst bauen