Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

J.A.R.V.I.S. — Умный домашний виртуальный ассистент на Arduino

Компоненты и материалы

Arduino 101 ×1
Arduino 4 Relays Shield ×1
Arduino GSM Shield V2 ×1

Необходимые инструменты

Приложения и онлайн-сервисы

О проекте

Зачем решать проблему умного дома?

Что нового?

J.A.R.V.I.S. — Умный домашний виртуальный ассистент на Arduino

Почему мы решили это сделать?

J.A.R.V.I.S. — Умный домашний виртуальный ассистент на Arduino
J.A.R.V.I.S. — Умный домашний виртуальный ассистент на Arduino
J.A.R.V.I.S. — Умный домашний виртуальный ассистент на Arduino
J.A.R.V.I.S. — Умный домашний виртуальный ассистент на Arduino
J.A.R.V.I.S. — Умный домашний виртуальный ассистент на Arduino

Принцип работы

Цифровой счетчик энергии

J.A.R.V.I.S. — Умный домашний виртуальный ассистент на Arduino
J.A.R.V.I.S. — Умный домашний виртуальный ассистент на Arduino
J.A.R.V.I.S. — Умный домашний виртуальный ассистент на Arduino

ИИ-виртуальный ассистент

Поток сигналов:

  1. Голосовой ввод в Android-приложении.
  2. Обработка на телефоне (распознавание речи, NLP).
  3. Отправка зашифрованных данных на Arduino через Bluetooth.
  4. Обработка на Arduino 101.
  5. Цифровые сигналы на реле.

Подключение пинов:

J.A.R.V.I.S. — Умный домашний виртуальный ассистент на Arduino
J.A.R.V.I.S. — Умный домашний виртуальный ассистент на Arduino
J.A.R.V.I.S. — Умный домашний виртуальный ассистент на Arduino
J.A.R.V.I.S. — Умный домашний виртуальный ассистент на Arduino
J.A.R.V.I.S. — Умный домашний виртуальный ассистент на Arduino
J.A.R.V.I.S. — Умный домашний виртуальный ассистент на Arduino
J.A.R.V.I.S. — Умный домашний виртуальный ассистент на Arduino

Подключение счетчика энергии:

Схема подключения

J.A.R.V.I.S. — Умный домашний виртуальный ассистент на Arduino

Используемое оборудование

Платформы программирования

Реализация

Полезные ссылки

(Ссылки отсутствуют в исходнике)

Код

1. Arduino: чтение цифрового счетчика энергии и расчет стоимости

#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();
}

2. Arduino: реализация JARVIS — управление реле через 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') { /* 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 sequence
      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);
    }
  }
}

Печатные платы и корпуса

Инструкция для AR-приложения (APK-файлы в проекте):

  1. Установите приложение.
  2. Убедитесь в наличии интернета.
  3. Запустите приложение и наведите на прибор, настроенный в Vuforia (используется стандартный маркер).
  4. Прибор включится.
  5. Для выключения нажмите виртуальную кнопку на экране.

Схемы

J.A.R.V.I.S. — Умный домашний виртуальный ассистент на Arduino

Важно: Требуется постоянное интернет-соединение на телефоне.

Инструкция для основного Android-приложения (APK в проекте):

  1. Установите приложение на Android-телефон.
  2. После настройки железа и успешного запуска, стартуйте приложение.
  3. Для голосового ассистента скажите ключевую фразу «Listen Up JARVIS».
  4. Говорите команду четко — ассистент ответит.
  5. Для AR-режима нажмите кнопку «Augment»; появится пустой экран.
  6. На другом телефоне откройте Jarvis Augmented App и следуйте его инструкциям.

Примечания: при зависании перезапустите приложение; если ошибка микрофона — перезапустите; используется HC-05 Bluetooth.

Производственный процесс

  1. Построение доступной беспроводной сети датчиков для дома
  2. Сборка домашней машины для написания домашних заданий (плоттер-писатель)
  3. Веб-управляемая DMX-система освещения: Arduino Mega как мастер-контроллер
  4. Сборка Bluetooth-робота-шпиона на Arduino с управлением с телефона
  5. Сборка DIY VR-скейтборда на Arduino, Google Cardboard и Bluetooth
  6. Автономный домашний помощник-робот: полный список деталей и руководство по настройке (ROS, Alexa, MoveIt)
  7. Arduino Home Controller с Alexa: умный дом голосовым управлением
  8. Беспроводная прошивка Arduino через Bluetooth HC-05: щит без USB-кабеля
  9. TFT Shield 2.8" 320×240 SPI для Arduino Nano — высокопроизводительный дисплей
  10. Shield Nixie Tube Clock NCS314 для Arduino UNO/MEGA — совместимость с IN-14/IN-12