Eigene Android-App für Arduino-Steuerung mit MIT App Inventor erstellen
In diesem Arduino-Tutorial lernen Sie, wie Sie mit dem MIT App Inventor (Online-Anwendung) benutzerdefinierte Android-Apps zur Arduino-Steuerung erstellen. Sie können das folgende Video ansehen oder die schriftliche Anleitung unten lesen. Wir haben zwei Beispiele: 1) Einfache LED-Steuerung, 2) Schrittmotorsteuerung per Smartphone. Im vorherigen Tutorial haben wir bereits die Bluetooth-Kommunikation (HC-05) und den Arduino-Code für Beispiel 1 erklärt. Über den seriellen Port empfangen wir Daten vom Smartphone und speichern sie in Variable ‚state‘. Empfangen wir ‚0‘ (gesendet beim Drücken von „LED: OFF“), schalten wir die LED aus und senden den String „LED: OFF“ zurück. Bei ‚1‘ schalten wir die LED ein und senden „LED: ON“ zurück. Nun bauen wir die Android-App, die ‚0‘ und ‚1‘ sendet und die Rückmeldestrings empfängt. Auf der MIT App Inventor Website melden Sie sich über „Create apps!“ an (Gmail-Konto erforderlich). Nach dem Login erstellen Sie ein neues Projekt. So sieht das Design-Fenster aus – jetzt können wir unsere App bauen. Verbinden Sie Ihr Smartphone für Live-Test: Laden Sie „MIT AI2 Companion“ aus dem Play Store, installieren Sie es. Im Online-Editor: „Connect“ → „AI Companion“ → Barcode scannen oder Code eingeben → Verbindung steht. Jetzt erscheint z. B. ein im Editor eingefügter Button sofort auf dem Smartphone. Alternativ kann man den Android Emulator am PC nutzen (Details auf der Website). Layout: HorizontalArrangements aus Palette „Layout“ hinzufügen, Eigenschaften (Höhe, Breite, Ausrichtung) anpassen. Aus „UserInterface“ einen ListPicker hinzufügen und ein Bild zuweisen – er dient zur Bluetooth-Geräteauswahl. Weitere HorizontalArrangements: Label für Verbindungsstatus (Initialtext „Not Connected“), Label für LED-Status (Initial „LED: OFF“), Buttons „Turn On“ und „Turn Off“. Komponenten umbenennen für leichteren Zugriff im Blocks-Editor. Nicht-sichtbare Komponenten: BluetoothClient und Clock (für Echtzeit-Verbindungsanzeige). Im Blocks-Editor verleihen wir der App Leben. Links alle Blöcke/Funktionen der hinzugefügten Komponenten. Start mit BluetoothList (ListPicker): „BeforePicking“-Block + „set Bluetooth Elements“-Block. Dazu „BluetoothClient AddressesAndNames“ – setzt Liste der gekoppelten Geräte, die beim Klick auf „Connect Button“ erscheint. Nach Auswahl: „call BluetoothClient.Connect address“ + „BluetoothList Selection“ → Handy verbindet sich mit gewählter Bluetooth-Adresse. Clock: „.Timer“-Block → Echtzeit-Anzeige ob verbunden (Label „Connected“ per „set Text“). Buttons: Bei „TurnOn_Button“.Click → BluetoothClient „Send1ByteNumber“ → Zahl 49 (ASCII ‚1‘) → LED an. Dann „ReceiveText“ → empfangener String („LED: ON“) in Label „LED_Status“ schreiben. „TurnOff_Button“ analog mit Zahl 48 (ASCII ‚0‘). Fertig: Über „Build“ Menü als APK speichern oder QR-Code scannen für direkten Download. Demo folgt. Download der MIT App Inventor Projektdatei: Oben dieselben Bluetooth-Komponenten wie zuvor. Ein Canvas-Komponente für Zeichnung/Bilder: zwei transparente Bilder (Skala fix, Zeiger drehbar). Checkbox für Manual/Auto-Modus, Button für Drehrichtungsumkehr, Slider für Drehgeschwindigkeit. Blocks & Arduino-Code: Bluetooth-Blöcke wie Beispiel 1. Zeiger drehen: ImageSprite „.PointInDirection“ dreht Bild von 0° zur berührten Canvas-Koordinate. Drehwinkel in Label anzeigen. Eigene Prozedur (10 ms Delay) aufrufen. Winkel als Text per „SendText“ an Arduino senden → Arduino positioniert Schrittmotor entsprechend. Checkbox: Gecheckt → „Auto“ an Arduino senden (Dauerlauf). In diesem Modus: „Reverse“-Button sendet „Reverse“ (Richtungswechsel). Slider-Änderung sendet aktuellen Wert → Arduino ändert Geschwindigkeit. Uncheck → zurück in Manual-Modus. Demo folgt. Download der Projektdatei & Bilder: Arduino-Code für Beispiel 2:Überblick
Arduino-Code (Kurzübersicht)
/* Arduino and HC-05 Bluetooth Module Tutorial
* by Dejan Nedelkovski, www.HowToMechatronics.com */
#define ledPin 7
int state = 0;
void setup() {
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, LOW);
Serial.begin(38400);
}
void loop() {
if (Serial.available() > 0) {
state = Serial.read();
}
if (state == '0') {
digitalWrite(ledPin, LOW);
Serial.println("LED: OFF");
state = 0;
} else if (state == '1') {
digitalWrite(ledPin, HIGH);
Serial.println("LED: ON");
state = 0;
}
}Code language: Arduino (arduino)MIT App Inventor


App bauen – Beispiel 1

Blocks Editor





BluetoothTest.aia
1 file(s) 5.16 KB Download
Schrittmotor-Steuerung – Beispiel 2




StepperMotorTest.aia
1 file(s) 60.96 KB Download
Stepper Motor Gauge and Pointer Images
1 file(s) 27.34 KB Download
/* Stepper Motor Control via HC-05 Bluetooth Module
* by Dejan Nedelkovski, www.HowToMechatronics.com */
const int stepPin = 7;
const int dirPin = 6;
String state = "";
int currentHeading = 0;
int currentAngle = 0;
int lastAngle = 0;
int angle = 0;
int rotate = 0;
int runContinuously = 0;
String mode = "Manual";
boolean dirRotation = HIGH;
int rotSpeed = 1500;
void setup() {
pinMode(stepPin, OUTPUT);
pinMode(dirPin, OUTPUT);
Serial.begin(38400);
}
void loop() {
delayMicroseconds(1);
if (Serial.available() > 0) {
state = Serial.readString();
}
// Auto-Modus
if (mode == "Auto") {
if (state == "Reverse") {
delay(10);
dirRotation = (dirRotation == HIGH) ? LOW : HIGH;
digitalWrite(dirPin, dirRotation);
delay(10);
state = "";
}
rotSpeed = state.toInt();
if (rotSpeed >= 300 && rotSpeed <= 3000) {
digitalWrite(stepPin, HIGH);
delayMicroseconds(rotSpeed);
digitalWrite(stepPin, LOW);
delayMicroseconds(rotSpeed);
} else {
digitalWrite(stepPin, HIGH);
delayMicroseconds(1500);
digitalWrite(stepPin, LOW);
delayMicroseconds(1500);
}
if (state == "Manual") mode = state;
}
// Manual-Modus
else if (mode == "Manual") {
currentHeading = state.toInt();
if (currentHeading < 0) currentHeading = 360 + currentHeading;
currentAngle = map(currentHeading, 0, 359, 0, 200);
digitalWrite(dirPin, HIGH);
if (currentAngle != lastAngle) {
if (currentAngle > lastAngle) {
rotate = currentAngle - lastAngle;
for (int x = 0; x < rotate; x++) {
digitalWrite(stepPin, HIGH);
delayMicroseconds(500);
digitalWrite(stepPin, LOW);
delayMicroseconds(500);
}
}
if (currentAngle < lastAngle) {
rotate = lastAngle - currentAngle;
digitalWrite(dirPin, LOW);
for (int x = 0; x < rotate; x++) {
digitalWrite(stepPin, HIGH);
delayMicroseconds(500);
digitalWrite(stepPin, LOW);
delayMicroseconds(500);
}
}
}
lastAngle = currentAngle;
if (state == "Auto") mode = state;
}
}Code language: Arduino (arduino)
Herstellungsprozess
- Ballistisches Fallschirm-Rückführungssystem für UAVs designen
- Das richtige Material für Ihr Projekt wählen: Praktischer Leitfaden
- Monitor-Ambilight selbst bauen mit Arduino Nano & WS2812B LEDs
- Universelle Android-Fernbedienung mit Arduino, 1Sheeld & IR-Steuerung
- 7 Schritte zum erfolgreichen Automatisierungs-Fahrplan
- Die richtige Legierung wählen: Magnesium vs. Aluminium für individuelle Gussprojekte
- Den passenden Kran fürs Bauprojekt wählen: Praxisleitfaden
- So bereiten Sie Ihr Custom-Machining-Projekt für ein wettbewerbsfähiges Angebot vor
- Präzise Stahlkalkulation: Schritt-für-Schritt-Anleitung für Ihr Projekt
- Warum Sandstrahlen Custom-Metallfertigungsprojekte verbessert