J.A.R.V.I.S. – Assistant Virtuel Domotique Intelligent Piloté par Arduino
Composants et fournitures
| Composant | Quantité |
|---|---|
| Arduino 101 | 1 |
| Shield 4 Relais Arduino | 1 |
| Shield GSM Arduino V2 | 1 |
Outils et machines nécessaires
- Fer à souder (générique)
- Pistolet à colle chaude (générique)
Applications et services en ligne
- Unity
- Android Studio
- Vuforia
- Adobe Illustrator
- Arduino IDE
À propos de ce projet
Pourquoi s'attaquer au problème de la maison connectée ?
Quelles sont les nouveautés ?

Pourquoi avons-nous décidé de le faire ?





Fonctionnement
Le Compteur d'Énergie Numérique



L'Assistant Virtuel IA
Le flux des signaux est le suivant :
- Entrée vocale vers l'application Android
- Traitement sur l'application Android
- Envoi de données chiffrées vers Arduino via Bluetooth
- Traitement sur Arduino 101
- Signaux numériques vers les relais
Connexions des broches :
- Broche 8 → PulseIn [Entrée Numérique]
- Broche 6 → IN1 → Sortie Ventilateur
- Broche 4 → IN2 → Sortie Lumière
- Broche 5 → IN3 → Machine à café







Connexions du compteur d'énergie :
- Connectez le compteur à l'alimentation.
- Recouvrez le compteur d'un ruban noir opaque, empêchant la LDR interne de recevoir la lumière extérieure.
- Connectez le fil neutre directement aux charges et le fil de phase au relais.
- Sortez les fils de la LDR hors du compteur vers le circuit de comptage.
- Connectez la sortie du circuit de comptage à la broche 8 (pulsepin) comme dans le code.
- Connectez les broches TX, RX de l'Arduino 101 aux broches RX, TX du module GSM.
- Alimentez les cartes après avoir téléversé le code.
Schéma de circuit

Matériel et équipement utilisés
- Dans le compteur d'énergie : LDR (photorésistance)
- Module GSM
- Circuit de comptage : potentiomètre, CI LM358N
- Arduino 101
- Module Bluetooth HC-05
- Module relais 4 canaux 12V 10A avec optocoupleur pour PIC AVR ARM
Plateformes de programmation
- Arduino IDE pour programmer l'Arduino 101
- Android Studio (Java et XML) pour l'application Android
- Google Firebase pour la connectivité base de données
- Unity avec le SDK Vuforia pour la réalité augmentée
Implémentation
- Tous les composants envoient des lectures à l'Arduino, qui les convertit en codes caractères pour un envoi efficace et rapide vers l'ordinateur. Dans une boucle infinie, chaque lecture correspond à un caractère.
- Un code doit s'exécuter sur l'ordinateur pour recevoir les données envoyées par l'Arduino via les ports série.
- Pour l'application Android, nous utilisons Android Studio et l'API Google standard pour la conversion voix-texte.
- Pour la reconnaissance vocale, nous utilisons des paramètres acoustico-phonétiques pour la reconnaissance de parole indépendante du locuteur dans l'application Android.
- L'assistant virtuel IA utilise des techniques d'apprentissage profond comme les CNN (Réseaux de Neurones Convolutifs) en Python pour le traitement du langage naturel.
- Pour l'application de réalité augmentée, nous utilisons Unity IDE et VuforiaSDK (kit de développement logiciel de réalité augmentée pour appareils mobiles permettant la création d'applications AR).
Vidéos
Vidéos disponibles sur la page du projet original.
Liens utiles
Liens disponibles sur la page du projet original.
Code
Code Arduino pour lecture énergie numérique et calcul coût Arduino
Ce code implémente les unités d'énergie consommées par un appareil connecté à l'Arduino.
Instructions :
- Réalisez les connexions et insérez un numéro de mobile dans le code Arduino
- Téléversez le code sur un Arduino 101
- Exécutez le code
- Envoyez un SMS depuis n'importe quel mobile au numéro spécifié dans le code au format
#texte* - Une réponse contenant les unités consommées et le coût sera reçue
#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 Initializing...");
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 implémentant la connexion JARVIS au relais Arduino
Ce code implémente le transfert série Bluetooth de caractères entre l'application Android et l'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') { /* café off */ }
else if(c=='c') { digitalWrite(CH4,LOW); delay(100); } // lumière on
else if(c=='d') { digitalWrite(CH6,LOW); delay(100); } // ventilateur on
else if(c=='k') { digitalWrite(CH5,LOW); delay(100); } // café on
else if(c=='g') { digitalWrite(CH5,HIGH); delay(100); } // café off
else if(c=='e') { digitalWrite(CH4,HIGH); delay(100); } // lumière off
else if(c=='f') { digitalWrite(CH6,HIGH); delay(100); } // ventilateur 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);
}
}
}
Pièces personnalisées et boîtiers
Instructions :
- Téléchargez et installez l'application
- Assurez-vous que le téléphone est connecté à Internet
- Lancez l'application et pointez-la vers un appareil configuré avec Vuforia (le marqueur Vuforia par défaut est utilisé ici)
- L'appareil devrait démarrer
- Pour éteindre l'appareil, cliquez sur le bouton virtuel qui apparaît à l'écran lorsque le téléphone est pointé vers l'appareil
jarvisaugmented_I2zWAu2jGG.apk
Schémas

Note importante : Une connexion Internet active sur le téléphone est requise en permanence.
Instructions :
- Installez l'application sur un téléphone Android
- Après avoir configuré le matériel et l'avoir fait fonctionner, lancez l'application
- Pour utiliser l'Assistant Virtuel (Voix), dites le mot-clé « Listen Up JARVIS ». Cela devrait activer l'agent
- 3.1 Parlez clairement votre commande
- 3.2 L'agent devrait répondre
- Pour démarrer l'application de réalité augmentée, cliquez sur le bouton « Augmenter » ; un écran vide devrait apparaître
- 4.1 Ouvrez l'application Jarvis Augmented sur un autre téléphone (NOTE : l'application J.A.R.V.I.S. Android doit être sur un téléphone différent)
- 4.2 Suivez les instructions de JarvisAugmented pour implémenter la réalité augmentée
NOTES :
- Si l'application bloque, essayez de la redémarrer
- Si un message « Could not open Microphone » apparaît, redémarrez l'application
- Cette application utilise le module Bluetooth HC05 pour étendre la portée du projet. Le module HC05 est recommandé
app-release_eo3LK2AsLV.apk
Processus de fabrication
- Construire un réseau de capteurs sans fil abordable pour votre maison
- Construire sa propre machine à écrire les devoirs à la maison (Traceur à stylo)
- Système d'éclairage DMX piloté par web – Contrôleur maître Arduino
- Construire un Spybot Arduino piloté par Bluetooth
- Construisez un skateboard VR DIY avec Arduino, Google Cardboard et Bluetooth
- Robot Assistant Domestique Autonome : Liste Complète et Guide de Configuration
- Contrôleur domotique Arduino compatible Alexa : Automatisation intelligente simplifiée
- Shield de programmation Arduino sans fil avec Bluetooth HC-05 – Plus besoin d'USB
- Shield TFT 2,8" haute performance pour Arduino Nano – Écran SPI 320×240