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

FlickMote: жестовое IR-пульт для умного дома на Arduino 101 и ультразвуковом датчике

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

Программное обеспечение

О проекте

Устройство управляет телевизором (или другой техникой) жестами руки над ультразвуковым датчиком. Не нужно искать кнопки на пульте — удобно для пожилых и людей с ограниченными возможностями.

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

HC-SR04 измеряет расстояние до руки. Жесты распознаются по расстоянию и типу движения (свайп/удержание):

RGB-светодиод индицирует режим: красный — питание, зелёный — канал, синий — громкость.

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

Код (C/C++)

#include <IRremote.h>

#define CONTROL_CH 1
#define CONTROL_VOL 2
#define CONTROL_POW 3
#define CONTROL_UP 1
#define CONTROL_DOWN -1
#define DIST_MAX 20
#define DIST_DOWN 10
#define DIST_POW 3

const int irPin = 3;
const int pingPin = 8;
const int echoPin = 7;
const int led = 13;
const int ledR = 11, ledG = 10, ledB = 9;

unsigned long timer = 0;
IRsend irsend;
boolean powerConfirmed = false;

void setup() {
  Serial.begin(9600);
  pinMode(led, OUTPUT);
  pinMode(ledR, OUTPUT); pinMode(ledG, OUTPUT); pinMode(ledB, OUTPUT);
  pinMode(pingPin, OUTPUT); pinMode(echoPin, INPUT);
}

void loop() {
  long duration = doPing();
  long inches = microsecondsToInches(duration);

  if (timer && timer < (millis() - 5000) && (millis() > 5000)) {
    timer = 0;
  }
  digitalWrite(led, LOW);
  setColor(0,0,0);

  if (inches < DIST_MAX) {
    Serial.print(inches); Serial.println("in");
    if (inches < DIST_POW) {
      if (timer) {
        doIR(CONTROL_POW, 0);
        timer = 0;
        delay(2000);
      } else {
        timer = millis();
        setColor(255,50,50); delay(500);
      }
    } else {
      int value = handleDist(inches);
      delay(300);
      if (microsecondsToInches(doPing()) > DIST_MAX) {
        doIR(CONTROL_CH, value); // свайп
      } else {
        int d = 500;
        while (inches < DIST_MAX) {
          value = handleDist(inches);
          doIR(CONTROL_VOL, value);
          delay(d);
          inches = microsecondsToInches(doPing());
          d = 100;
        }
        delay(500);
      }
    }
  }
  delay(50);
}

int handleDist(int inches) {
  if (inches > DIST_DOWN) { digitalWrite(led, HIGH); return CONTROL_UP; }
  else { digitalWrite(led, LOW); return CONTROL_DOWN; }
}

void doIR(int control, int val) {
  switch(control) {
    case CONTROL_POW:
      for (int i=0;i<3;i++) { setColor(255,0,0); irsend.sendSony(0xa90,12); delay(40); }
      break;
    case CONTROL_CH:
      setColor(0,255,0);
      if (val == CONTROL_UP) {
        digitalWrite(led,HIGH);
        for (int i=0;i<3;i++) { irsend.sendSony(0x90,12); delay(40); }
      } else {
        for (int i=0;i<3;i++) { irsend.sendSony(0x890,12); delay(40); }
      }
      break;
    case CONTROL_VOL:
      setColor(0,0,255);
      if (val == CONTROL_UP) {
        digitalWrite(led,HIGH);
        for (int i=0;i<3;i++) { irsend.sendSony(0x490,12); delay(40); }
      } else {
        for (int i=0;i<3;i++) { irsend.sendSony(0xC90,12); delay(40); }
      }
      break;
  }
}

void setColor(int r,int g,int b) {
  analogWrite(ledR,r); analogWrite(ledG,g); analogWrite(ledB,b);
}

long doPing() {
  digitalWrite(pingPin,LOW); delayMicroseconds(2);
  digitalWrite(pingPin,HIGH); delayMicroseconds(5);
  digitalWrite(pingPin,LOW);
  return pulseIn(echoPin,HIGH);
}

long microsecondsToInches(long us) { return us / 74 / 2; }
long microsecondsToCentimeters(long us) { return us / 29 / 2; }

Схемы

Схема в Fritzing (flickmote_9Gx3XNFHEp.fzz) и фото собранной платы в оригинале.

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

  1. Создание ультразвукового левитатора на Arduino: пошаговое руководство
  2. Сборка Bluetooth-робота-шпиона на Arduino с управлением с телефона
  3. DIY Arduino TV-B-Gone: универсальный пульт для выключения любого телевизора
  4. Создание пользовательских LED-часов с будильником — видно с 12 метров
  5. Find Me: Умный поисковик вещей на Arduino и Bluetooth
  6. Оптимизированные решения питания для проектов на Arduino
  7. Крестики-нолики на Arduino с матрицей MAX7219 и картонным корпусом
  8. Пошаговое руководство: сборка умного четырёхногого робота на Arduino
  9. Своё рулевое управление (джойстик) для игр на Arduino
  10. Компактный радар на Arduino Nano с HC-SR04 и дисплеем 1.8"