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

Бесконтактный таймер для мытья рук с музыкальными оповещениями

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

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

О проекте

Во время пандемии COVID-19 правильное мытье рук стало критически важным. CDC рекомендует мыть руки минимум 20 секунд. Этот проект — бесконтактный таймер, который запускается движением руки перед ультразвуковым датчиком, отсчитывает 20 секунд на 7-сегментном дисплее и воспроизводит одну из заранее запрограммированных 20-секундных мелодий.

Мелодии в прошивке

Шаг 1: Схема подключения

Arduino Uno, 7-сегментный дисплей (I2C адрес 0x70), HC-SR04 (Trig/Echo), пьезоизлучатель. Схема приведена на фото.

Шаг 2: Корпус и сборка

Использованы стыкуемые корпуса ProtoStax. Arduino и макетная плата соединены горизонтально. Ультразвуковой датчик закреплён в боковой стенке корпуса для внешнего доступа.

Шаг 3: Программирование — ключевые моменты

Инициализация

Adafruit_7segment matrix = Adafruit_7segment();
pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT);
matrix.begin(0x70);

Запуск таймера и выбор мелодии


if (distance < 10 && !startMusic) {
  startMusic = 1;
  countDown = 20;
  currentTime = millis();
  melodyNum = (melodyNum + 1) % NUM_MELODIES; // По кругу
}

Воспроизведение музыки БЕЗ delay()

Функция tone() неблокирующая. Мы используем millis() для отслеживания длительности нот и пауз, параллельно обновляя дисплей.


Melody mel = melodies[melodyNum];
Note *m = mel.notes;
for (int i = 0; i < mel.numNotes; i++) {
  int noteDur = mel.wholeNoteDurationMs * m[i].duration / speedUp;
  tone(TONE_PIN, m[i].frequency, noteDur);
  int pause = noteDur * 1.30;
  unsigned long noteStart = millis();
  while (millis() - noteStart <= pause) {
    countDown = 20 - (millis() - currentTime) / 1000;
    matrix.print(countDown); matrix.writeDisplay();
    delay(10);
  }
  noTone(TONE_PIN);
}

Удобная транскрипция нот

Используются структуры Note (частота, относительная длительность) и Melody. Длительности заданы макросами: NOTE_QUARTER (0.25), NOTE_EIGHTH (0.125), DOTTED(x) (1.5×). Пример для «Happy Birthday»:


Note melody[] = {
  {NOTE_G6, DOTTED(NOTE_EIGHTH)}, {NOTE_G6, NOTE_SIXTEENTH},
  {NOTE_A6, NOTE_QUARTER}, {NOTE_G6, NOTE_QUARTER},
  {NOTE_C7, NOTE_QUARTER}, {NOTE_B6, NOTE_HALF},
  // ... остальные ноты
};
Melody melodies[] = {
  {melody, MELODY_LENGTH(melody), 1250},
  {melody3, MELODY_LENGTH(melody3), 1000},
  // ...
};

Развитие проекта

Код

Полный исходный код доступен на GitHub: ProtoStax_Touchless_Musical_Handwash_Timer

Схемы

Схема подключения всех компонентов.

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

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