J.A.R.V.I.S. – Smarter Home-Virtual-Assistant mit Arduino
Komponenten und Zubehör
| Arduino 101 | × | 1 |
| Arduino 4-Relais-Shield | × | 1 |
| Arduino GSM Shield V2 | × | 1 |
Benötigte Werkzeuge und Maschinen
- Lötkolben (generisch)
- Heißklebepistole (generisch)
Apps und Onlinedienste
- Unity
- Android Studio
- Vuforia
- Adobe Illustrator
- Arduino IDE
Über dieses Projekt
Warum das Smart-Home-Problem angehen?
Was ist neu?

Warum haben wir uns entschieden, es zu bauen?





Funktionsweise
Der digitale Stromzähler



Der KI-Virtual-Assistant
Signalfluss:
- Spracheingabe in der Android-App
- Verarbeitung in der Android-App
- Versand verschlüsselter Daten an Arduino via Bluetooth
- Verarbeitung auf Arduino 101
- Digitale Signale an Relais
Pin-Belegung:
- Pin 8 → PulseIn [Digitaler Eingang]
- Pin 6 → IN1 → Lüfter-Ausgang
- Pin 4 → IN2 → Licht-Ausgang
- Pin 5 → IN3 → Kaffeemaschine







Stromzähler-Anschlüsse:
- Zähler an die Stromversorgung anschließen.
- Zähler mit schwarzem Klebeband abdecken, damit der interne LDR kein Außenlicht empfängt.
- Neutralleiter direkt an die Lasten, Phasenleiter an das Relais.
- LDR-Kabel aus dem Zähler zum Zählerkreis führen.
- Ausgang des Zählerkreises an Pin 8 (pulsePin) gemäß Code anschließen.
- TX/RX des Arduino 101 mit RX/TX des GSM-Moduls verbinden.
- Nach Code-Upload Boards mit Strom versorgen.
Schaltplan

Verwendete Hardware und Ausrüstung
- Im Stromzähler: LDR (lichtabhängiger Widerstand)
- GSM-Modul
- Zählerkreis: Potentiometer, IC LM358N
- Arduino 101
- Bluetooth-HC05-Modul
- 4-Kanal 12V 10A Relais-Modul mit Optokoppler für PIC AVR ARM
Programmierplattformen
- Arduino 101: Arduino IDE
- Android-App: Android Studio (Java & XML)
- Datenbank: Google Firebase
- Augmented Reality: Unity mit Vuforia SDK
Implementierung
- Alle Komponenten liefern Messwerte an den Arduino, die in Zeichencodes umgewandelt und effizient per Serial an den Computer gesendet werden. In einer Endlosschleife entspricht jeder Messwert einem Zeichen.
- Ein Programm auf dem Computer empfängt die Daten über serielle Schnittstellen.
- Android-App mit Android Studio; Spracherkennung via Google API.
- Spracherkennung nutzt akustisch-phonetische Parameter für sprecherunabhängige Erkennung.
- KI-Virtual-Assistant verwendet Deep Learning (CNN) mit Python für Natural Language Processing.
- AR-App mit Unity IDE und Vuforia SDK (AR-SDK für mobile Geräte).
Videos
(Platzhalter für Videos)
Nützliche Links
(Links werden ergänzt)
Code
Arduino-Code für digitales Energie-Monitoring und Kostenberechnung
Dieser Code erfasst die von einem angeschlossenen Gerät verbrauchten Energieeinheiten.
Anleitung:
1. Verbindungen herstellen und Handynummer im Code eintragen
2. Code auf Arduino 101 hochladen
3. Code ausführen
4. SMS von beliebigem Handy an die im Code angegebene Nummer senden: Format #irgendeintext*
5. Antwort mit verbrauchten Einheiten und Kosten wird empfangen
#include <LiquidCrystal.h>
LiquidCrystal lcd(7,6,5,4,3,2);
int led=13;
#define pulsein 8
unsigned int pusle_count=0;
float units=0;
unsigned int rupees=0;
unsigned int temp=0,i=0;
char str[70],flag1=0,flag2=0;
void setup() {
lcd.begin(16,2);
Serial.begin(9600);
pinMode(led, OUTPUT);
pinMode(pulsein, INPUT);
digitalWrite(pulsein, HIGH);
lcd.setCursor(0,0); lcd.print("Wireless Energy");
lcd.setCursor(0,1); lcd.print(" Meter ");
delay(2000); lcd.clear();
lcd.print("By "); delay(2000); lcd.clear();
lcd.print("GSM Initilizing..."); gsm_init(); lcd.clear();
lcd.print("System Ready");
Serial.println("AT+CNMI=2,2,0,0,0");
init_sms(); send_data("System Ready"); send_sms(); delay(1000);
digitalWrite(led, LOW); lcd.clear();
}
void loop() {
serialEvent();
units=rupees/5.0;
lcd.setCursor(0,0); lcd.print("Units:"); lcd.print(units); lcd.print(" ");
lcd.setCursor(0,1); lcd.print("Rupees:"); lcd.print(rupees); lcd.print(" ");
read_pulse();
if(temp==1) check();
}
void serialEvent() {
while(Serial.available()) {
if(Serial.find("#")) {
digitalWrite(led, HIGH); delay(1000); digitalWrite(led, LOW);
while (Serial.available()) {
char inChar=Serial.read(); str[i++]=inChar;
if(inChar=='*') { temp=1; return; }
}
}
}
}
void init_sms() {
Serial.println("AT+CMGF=1"); delay(200);
Serial.println("AT+CMGS=\"INSERT MOBILE NUMBER HERE\""); delay(200);
}
void send_data(String message) { Serial.println(message); delay(200); }
void send_sms() { Serial.write(26); }
void read_pulse() {
if(!digitalRead(pulsein)) {
digitalWrite(led, HIGH); units++; rupees=units*5;
while(!digitalRead(pulsein)); digitalWrite(led,LOW);
}
}
void check() {
if(!(strncmp(str,"units",5))) {
Serial.println("AT+CMGF=1"); delay(200);
Serial.println("AT+CMGS=\"INSERT MOBILE NUMBER HERE\""); delay(200);
lcd.setCursor(0,1);
send_data("Energy Meter Unit:"); Serial.println(units);
send_data("\nRupees:"); Serial.println(rupees); delay(200);
Serial.write(26); flag1=1; flag2=1; temp=0;
}
}
void message_sent() { lcd.clear(); lcd.print("Message Sent."); delay(1000); }
void gsm_init() {
lcd.clear(); lcd.print("Finding Module..");
boolean at_flag=1;
while(at_flag) { Serial.println("AT"); while(Serial.available()>0) { if(Serial.find("OK")) at_flag=0; } delay(1000); }
lcd.clear(); lcd.print("Module Connected.."); delay(1000);
lcd.clear(); lcd.print("Disabling ECHO");
boolean echo_flag=1;
while(echo_flag) { Serial.println("ATE0"); while(Serial.available()>0) { if(Serial.find("OK")) echo_flag=0; } delay(1000); }
lcd.clear(); lcd.print("Echo OFF"); delay(1000);
lcd.clear(); lcd.print("Finding Network..");
boolean net_flag=1;
while(net_flag) { Serial.println("AT+CPIN?"); while(Serial.available()>0) { if(Serial.find("+CPIN: READY")) net_flag=0; } delay(1000); }
lcd.clear(); lcd.print("Network Found.."); delay(1000); lcd.clear();
}
Arduino-Code für JARVIS-Relais-Steuerung via Bluetooth
Serielle Bluetooth-Übertragung von Zeichen zwischen Android-App und Arduino.
#define CH3 7
#define CH4 4
#define CH5 5
#define CH6 6
void setup() {
Serial.begin(9600);
pinMode(CH3, OUTPUT); pinMode(CH4, OUTPUT); pinMode(CH5, OUTPUT); pinMode(CH6, OUTPUT);
digitalWrite(CH3, HIGH); digitalWrite(CH4, HIGH); digitalWrite(CH5, HIGH); digitalWrite(CH6, HIGH);
delay(2000);
}
void loop() {
delay(100);
if(Serial.available()) {
char c = Serial.read(); Serial.print(c);
if(c=='b') { /* coffee off */ }
else if(c=='c') { digitalWrite(CH4,LOW); delay(100); } // light on
else if(c=='d') { digitalWrite(CH6,LOW); delay(100); } // fan on
else if(c=='k') { digitalWrite(CH5,LOW); delay(100); } // coffee on
else if(c=='g') { digitalWrite(CH5,HIGH); delay(100); } // coffee off
else if(c=='e') { digitalWrite(CH4,HIGH); delay(100); } // light off
else if(c=='f') { digitalWrite(CH6,HIGH); delay(100); } // fan off
else if(c=='z') { // goodbye
digitalWrite(CH6,HIGH); digitalWrite(CH4,HIGH); digitalWrite(CH3,HIGH); digitalWrite(CH5,HIGH);
delay(500); digitalWrite(CH5,LOW); delay(500); digitalWrite(CH5,HIGH); delay(500);
digitalWrite(CH5,LOW); delay(500); digitalWrite(CH5,HIGH); delay(10000);
}
}
}
Benutzerdefinierte Teile und Gehäuse
Anleitung:
1. App herunterladen und installieren
2. Internetverbindung sicherstellen
3. App starten und auf ein mit Vuforia konfiguriertes Gerät richten (Standard-Vuforia-Marker)
4. Gerät startet
5. Zum Ausschalten den virtuellen Button auf dem Bildschirm drücken, wenn das Handy auf das Gerät zeigt
jarvisaugmented_I2zWAu2jGG.apk
Schaltpläne

Hinweis: Aktive Internetverbindung auf dem Handy ist jederzeit erforderlich.
Anleitung:
1. App auf Android-Handy installieren
2. Hardware aufbauen und erfolgreich starten, dann App starten
3. Für Virtual Assistant (Sprache): Schlüsselwort Listen Up JARVIS
sagen → Agent aktiviert
3.1 Befehl klar aussprechen
3.2 Agent antwortet
4. Für Augmented Reality: Augment-Button drücken → leerer Bildschirm
4.1 Jarvis Augmented App auf zweitem Handy öffnen (JARVIS-App muss auf anderem Handy sein)
4.2 Anweisungen in JarvisAugmented befolgen
Hinweise:
1. Bei Hängenbleiben App neu starten
2. Bei Could not open Microphone
App neu starten
3. HC05 Bluetooth-Modul wird für größeren Umfang empfohlen
app-release_eo3LK2AsLV.apk
Herstellungsprozess
- Günstiges drahtloses Sensornetzwerk für Zuhause selbst bauen
- DIY Hausaufgaben-Schreibmaschine zu Hause bauen
- Web-gesteuertes DMX-Lichtsystem – Arduino Master Controller
- Bluetooth-gesteuerter Arduino-Spybot bauen – Überwachungsroboter mit IP-Kamera
- DIY VR-Skateboard mit Arduino, Google Cardboard und Bluetooth bauen
- Autonomer Hausassistent-Roboter bauen: Komplette Teileliste & Setup-Anleitung
- Alexa-fähiger Arduino Home Controller: Smarte Automatisierung leicht gemacht
- Drahtloses Arduino-Programmier-Shield mit HC-05 Bluetooth – Kein USB-Kabel nötig
- 2,8″ TFT-Shield für Arduino Nano – 320×240 SPI-Display mit Touch
- Nixie-Röhren-Uhr-Shield NCS314 für Arduino UNO/MEGA – Kompatibilität mit IN‑14/IN‑12