J.A.R.V.I.S. – Slimme-huis virtuele assistent aangedreven door Arduino
Onderdelen en benodigdheden
| Onderdeel | Aantal |
|---|---|
| Arduino 101 | 1 |
| Arduino 4 Relays Shield | 1 |
| Arduino GSM Shield V2 | 1 |
Benodigde tools en machines
- Solderbout
- Lijmgun
Apps en online diensten
- Unity (voor AR)
- Android Studio (app-ontwikkeling)
- Vuforia SDK (augmented reality)
- Adobe Illustrator (UI-design)
- Arduino IDE
Over dit project
Waarom een slimme-huisoplossing?
Het project combineert spraakbesturing, energie monitoring, augmented reality en GSM-notificaties in één geïntegreerd systeem.
Wat is nieuw?
Integratie van meerdere interactiemodi: stem, AR, fysieke knoppen en SMS.
Werking
Digitale energiemeter
Een LDR in de energiemeter telt pulsen (via optocoupler LM358N) om verbruik te meten. De Arduino 101 berekent verbruik en kosten, en stuurt SMS-rapporten via de GSM-module.
AI Virtuele assistent
Signaalstroom:
- Spraakinvoer → Android-app
- Verwerking op Android (Google Speech API, CNN voor NLP)
- Versleutelde data via Bluetooth (HC-05) naar Arduino 101
- Verwerking op Arduino → digitale signalen naar relays
Pin-aansluitingen:
- Pin 8 → PulseIn (digitale input, energiemeter)
- Pin 6 → IN1 → Ventilator
- Pin 4 → IN2 → Verlichting
- Pin 5 → IN3 → Koffiezetapparaat
Energiemeter-aansluiting
- Meter aan voeding koppelen.
- LDR in meter afschermen met zwart tape tegen omgevingslicht.
- Nul-draad direct aan lasten; faasdraad via relays.
- LDR-draden naar tellercircuit (LM358N) → Pin 8.
- GSM TX/RX gekruist met Arduino 101 RX/TX.
Schakelschema

Hardwareoverzicht
- LDR in energiemeter
- GSM-module
- Tellercircuit: potentiometer, IC LM358N
- Arduino 101
- Bluetooth HC-05 module
- 4-kanaals 12V 10A relaybord met optocouplers
Implementatie
- Arduino leest sensoren, codeert data als karakters voor efficiënte seriële overdracht.
- Android-app (Java/XML) gebruikt Google Speech API voor spraakherkenning.
- AI-assistent gebruikt deep learning (CNN in Python) voor natuurlijke taalverwerking.
- AR-app: Unity + Vuforia SDK.
- Database: Google Firebase.
Code
Arduino: Energiemeter en kostenberekening
#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: JARVIS relay-besturing via Bluetooth
#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') { /* koffie uit */ }
else if(c=='c') { digitalWrite(CH4,LOW); delay(100); } // licht aan
else if(c=='d') { digitalWrite(CH6,LOW); delay(100); } // ventilator aan
else if(c=='k') { digitalWrite(CH5,LOW); delay(100); } // koffie aan
else if(c=='g') { digitalWrite(CH5,HIGH); delay(100); } // koffie uit
else if(c=='e') { digitalWrite(CH4,HIGH); delay(100); } // licht uit
else if(c=='f') { digitalWrite(CH6,HIGH); delay(100); } // ventilator uit
else if(c=='z') { // goodbye-sequentie
digitalWrite(CH6,HIGH); digitalWrite(CH4,HIGH);
digitalWrite(CH3,HIGH); digitalWrite(CH5,HIGH);
delay(500);
for(int i=0;i<3;i++) { digitalWrite(CH5,LOW); delay(500); digitalWrite(CH5,HIGH); delay(500); }
delay(10000);
}
}
}
Aangepaste onderdelen en behuizingen
Android APK-bestanden voor de AR-app en de hoofdbesturingsapp zijn beschikbaar als download. Instructies: app installeren, internetverbinding vereist, camera richten op Vuforia-marker op apparaat, virtuele knop op scherm bedienen.
Schema's
Let op: Actieve internetverbinding op telefoon vereist. HC-05 Bluetooth-module aanbevolen.
Productieproces
- Een Betaalbaar Draadloos Sensornetwerk Bouwen voor Uw Huis
- Bouw je eigen DIY huiswerk-schrijfmachine thuis
- Web-gestuurd DMX-verlichtingssysteem – Arduino Master Controller
- Bluetooth-gecontroleerde Arduino Spybot bouwen
- Bouw een DIY VR-skateboard met Arduino, Google Cardboard en Bluetooth
- Bouw een Autonome Thuisassistent Robot: Complete Onderdelenlijst & Opzetgids
- Alexa-ingeschakelde Arduino Thuiscontroller: Slimme Automatisering Made Simple
- Draadloze Arduino Programmeer Shield met HC-05 Bluetooth – Geen USB Nodig
- Hoogwaardige 2,8″ TFT Shield voor Arduino Nano – 320×240 SPI Display
- Nixie-buisschild NCS314 voor Arduino UNO/MEGA – Compatibel met IN‑14/IN‑12
- Geavanceerd thuismonitoringssysteem met Arduino Mega en IoT-sensoren