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

Умный парковочный ассистент для гаража с RGB-индикацией на Arduino Nano

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

КомпонентКоличество
Arduino Nano R31
Ультразвуковой датчик HC-SR041
WS2812B LED-лента 1 м (30 LED, IP30, 5 В)1
Конденсатор 1000 мкФ (подавление пульсаций)1
Диод 1N4148 (быстрый, защита от обратного питания)1
Резистор 470 Ом (на линию данных LED)1

Инструменты

О проекте

Парковочный сенсор для гаража: адресуемая RGB-лента показывает расстояние до стоп-положения. Видео в действии: смотреть.

Корпус спроектирован под акриловый полукруглый профиль 1/2" (длина 20 7/16") — служит линзой и соединяет хвостовидные элементы. Можно купить (~$0.66/фут) или напечатать линзы из прозрачного филамента (4 сегмента на сторону).

Этапы сборки

  1. Подготовка ленты: режем WS2812B на два отрезка по 15 LED. Паяем провода в начале каждого (стрелки на ленте указывают от места пайки).
  2. Сборка рельсов: внешний рельс + два внутренних сегмента на сторону, корпус посередине.
  3. Монтаж лент: заводим провода в корпус, клеим ленты на скотч. Ленты заканчиваются за 1/2" до края внешнего рельса.
  4. Установка линз: вставляем акрил/печатные линзы до упора — фиксируют хвостовиды. Для печати — 4 сегмента на сторону.
  5. Крепление на базу: МДФ 1/2" × 2" × 45 1/8". Мелкие плоские/потайные саморезы (круглые головки мешают USB-разъёму для перепрошивки).
  6. Электрика: конденсатор у питания (от скачков), резистор 470 Ом на сигнальный провод (пин 7), диод 1N4148 на V+ Arduino (защита от обратного тока при подключении USB без питания). Диод и резистор в паяной точке с термоусадкой. Отверстие в корпусе для провода питания (рекомендую 2×0.75 мм²).
  7. Установка Arduino: винт 2.5 мм в квадратные отверстия. Крайние неиспользуемые пины Arduino можно снять для удобства.
  8. Ультразвуковой датчик HC-SR04: на крышке, винты 2.5 мм. Провода направьте к центру — не должны мешать стенкам.
  9. Крышка: винты 3 мм.
  10. Прошивка: обновите библиотеки FastLED и QuickStats. Настройте startdistance (начало детектирования) и stopdistance (парковка) в сантиметрах (диапазон датчика 3–400 см).
  11. Питание от света гаража: в розетку автомата вкрутите адаптер с гнездом, подайте 5 В на блок. Панель будет работать только пока горит свет гаража (экономия).
Умный парковочный ассистент для гаража с RGB-индикацией на Arduino Nano
Умный парковочный ассистент для гаража с RGB-индикацией на Arduino Nano
Умный парковочный ассистент для гаража с RGB-индикацией на Arduino Nano

Код (Arduino)

/* Garage Parking Sensor - Bob Torrence */
#include <FastLED.h>
#include <QuickStats.h>
QuickStats stats;

#define LED_PIN 7
#define NUM_LEDS 15
const int trigPin = 9;
const int echoPin = 10;

CRGB leds[NUM_LEDS];
float duration, durationarray[15];
int distance;
int stopdistance = 115;   // стоп-позиция (см)
int startdistance = 400;  // начало сканирования (см)
int increment = ((startdistance - stopdistance) / 15);

void setup() {
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS);
  Serial.begin(9600);
}

void loop() {
  // Медианный фильтр 15 замеров
  for (int i = 0; i <= 14; i++) {
    digitalWrite(trigPin, LOW); delayMicroseconds(2);
    digitalWrite(trigPin, HIGH); delayMicroseconds(10);
    digitalWrite(trigPin, LOW);
    durationarray[i] = pulseIn(echoPin, HIGH);
    distance = durationarray[i] * 0.034 / 2;
    Serial.print(distance); Serial.print(" ");
  }
  duration = stats.median(durationarray, 15);
  distance = duration * 0.034 / 2;
  Serial.print("Distance: "); Serial.println(distance);

  // Логика индикации: красный = стоп, жёлтый = приближение, зелёный = далеко
  if (distance < stopdistance) {
    fill_solid(leds, NUM_LEDS, CRGB(255, 0, 0)); // все красные
  } else if (distance < stopdistance + increment) {
    leds[0] = CRGB(255, 255, 0); fill_solid(leds+1, 14, CRGB::Black);
  } else if (distance < stopdistance + increment*2) {
    leds[0] = leds[1] = CRGB(255, 255, 0); fill_solid(leds+2, 13, CRGB::Black);
  } else if (distance < stopdistance + increment*3) {
    leds[0] = leds[1] = leds[2] = CRGB(255, 255, 0); fill_solid(leds+3, 12, CRGB::Black);
  } else if (distance < stopdistance + increment*4) {
    fill_solid(leds, 4, CRGB(0, 255, 0)); fill_solid(leds+4, 11, CRGB::Black);
  } else if (distance < stopdistance + increment*5) {
    fill_solid(leds, 5, CRGB(0, 255, 0)); fill_solid(leds+5, 10, CRGB::Black);
  } else if (distance < stopdistance + increment*6) {
    fill_solid(leds, 6, CRGB(0, 255, 0)); fill_solid(leds+6, 9, CRGB::Black);
  } else if (distance < stopdistance + increment*7) {
    fill_solid(leds, 7, CRGB(0, 255, 0)); fill_solid(leds+7, 8, CRGB::Black);
  } else if (distance < stopdistance + increment*8) {
    fill_solid(leds, 8, CRGB(0, 255, 0)); fill_solid(leds+8, 7, CRGB::Black);
  } else if (distance < stopdistance + increment*9) {
    fill_solid(leds, 9, CRGB(0, 255, 0)); fill_solid(leds+9, 6, CRGB::Black);
  } else if (distance < stopdistance + increment*10) {
    fill_solid(leds, 10, CRGB(0, 255, 0)); fill_solid(leds+10, 5, CRGB::Black);
  } else if (distance < stopdistance + increment*11) {
    fill_solid(leds, 11, CRGB(0, 255, 0)); fill_solid(leds+11, 4, CRGB::Black);
  } else if (distance < stopdistance + increment*12) {
    fill_solid(leds, 12, CRGB(0, 255, 0)); fill_solid(leds+12, 3, CRGB::Black);
  } else if (distance < stopdistance + increment*13) {
    fill_solid(leds, 13, CRGB(0, 255, 0)); fill_solid(leds+13, 2, CRGB::Black);
  } else if (distance < stopdistance + increment*14) {
    leds[14] = CRGB(0, 255, 0); fill_solid(leds, 14, CRGB(0, 255, 0));
  } else {
    fill_solid(leds, NUM_LEDS, CRGB(0, 255, 0)); // все зелёные
  }
  FastLED.show();
  delay(50);
}

3D-модели и схемы

STL-файлы корпуса и линз — в разделе Custom parts. Схема (Fritzing) — в Schematics (обновлена 21.04.19: исправлено направление диода).

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

  1. TinyML-детектор языка на Arduino Nano 33 BLE Sense с Edge Impulse
  2. Создание игры в реальном времени на Arduino Nano с гироскопом MPU-6050 и OLED-дисплеем
  3. Цифровые кости на Arduino: генератор случайных чисел с LCD-дисплеем и кнопкой
  4. Создание рулетки на 37 светодиодов с Arduino Nano
  5. Мини-аркада на ATtiny85: Snake — ручная OLED-консоль своими руками
  6. Портативный дальномер на Arduino Nano: HC-SR04, питание 18650, 3D-корпус
  7. Сборка аудиореактивной настольной лампы на Arduino Nano
  8. Персональный помощник здоровья (PHA): Умное IoT-решение для сообщества
  9. Медное гальваническое покрытие: умная система на Arduino UNO
  10. NeoPixel Matrix Pong на Arduino Nano: неоновая игра Pong на матрице 15×10