Подсветка лестницы

Вступление

По мотивам проекта автоматической подсветки лестницы с помощью Arduino, который, в свою очередь, создан по мотивам другого проекта, я дополнил и модернизировал схему и код и получил свой вариант. Это мой первый проект на Arduino, поэтому буду описывать всё "для чайников", т.е. что бы мне же было понятно, если позже захочу к этому вернуться.

Цель проекта

Сделать красивую и функциональную подсветку под ступеньками лестницы на второй этаж в частном доме. В тёмное время суток должна загораться "дежурная" подсветка на первой и последней ступеньке, чтобы их было видно. Во время начала подъёма или спуска кого-либо по лестнице должна загораться подсветка всей лестницы. Также захотелось "весёлый" режим работы подсветки на случай праздника.

Что требуется

Я использовал китайский аналог Arduino PRO Mini ATMEGA328P 5V 16MHZ в качестве центрального мозга.
Датчики: фоторезистор для замера освещённости (у меня Photoresistor GL5516 LDR), два ультразвуковых дальномера для сигнализирования о том, что кто-то пошёл по лестнице (у меня Ultrasonic Module HC-SR04).
Питание всей системы будет осуществляться от источника 12 вольт. Так как половина всех элементов питаются от 5 вольт, в цепи будет осуществлён переход с 12 на 5 вольт с помощью линейного регулятора (у меня L7805CV TO-220 Voltage Regulator 5V) и трёх керамических конденсаторов (у меня два с маркирокой 334 - это 0,33 микрофарада; и один с маркировкой 104 - это 0,1 микрофарад).
В подсветке у меня нуждались 19 ступенек. Так выбранный контроллер не может дать столько цифровых выходов (для управления каждой светодиодной лентой), то система дополнена драйвером светодиодных лент (у меня это ST M5451B7 DIP-40 LED DISPLAY DRIVERS), к которому можно подключить до 34 лент, а управляется всё это двумя цифровыми выходами контроллера.
Все элементы собирались на макете постепенно по очереди. Весь этот процесс по частям я опишу ниже.

Подключение фоторезистрора

Фоторезистор имеет одинаковые ножки - полярность не важна. Одну ножку сразу подключаем к +5 вольт. Вторую ножку через резистор на 10 кОм подключаем к "земле" и эту же ножку подключаем к аналоговому входу контроллера (у меня это A0).
Скетч в Arduino:

int led = 13; // Переменная с номером пина светодиода
int ldr = 0; // и фоторезистора
void setup()
{
  pinMode(led, OUTPUT); //указываем, что светодиод - выход
  Serial.begin(9600);
}
void loop()
{
  // read the input on analog pin 0:
  int sensorValue = analogRead(A0);
  // print out the value you read:
  Serial.println(sensorValue);
  delay(100); // delay in between reads for stability
if (analogRead(ldr) < 500) digitalWrite(led, HIGH);
  // если показатель освещенности меньше 500, включаем светодиод
  else digitalWrite(led, LOW); // иначе выключаем
}
Эта программка позволяет зажигать зелёный светодиод, который уже есть на контроллере, когда уровень освещённости падает меньше некого значения 500. Значения освещённости также посылаются на компьютер (просмотр в среде программирования Arduino: Сервис/Монитор порта).
Схема подключения. На схеме не обозначен программатор (у меня это PL2303HX USB To RS232 TTL Auto Converter Adapter), к которому выведены проводки с контроллера на схеме.

Подключение ультразвукового дальномера

На дальномере HC-SR04 четыре контакта. Grd и Vcc подключаем к 5 вольтам с контроллера (к минусу и плюсу соответственно). Оставшиеся два контакта (Trig и Echo) к цифровым входам контроллера (у меня это Echo - 13, Trig - 12). Есть небольшая библиотека для работы с этим сенсором. Но она уже немного устарела.  Копируем содержимое архива в директорию со скетчами и библиотекми (у меня получилось директория Ultrasonic в /home/oleg/sketchbook/libraries). В этой директории в файлах Ultrasonic.cpp и Ultrasonic.h заменяем

#include "WProgram.h"
на

#if defined(ARDUINO) && ARDUINO >= 100
  #include "Arduino.h"
#else
  #include "WProgram.h"
#endif
Это позволит загружать разные версии библиотек в разных версиях среды разработки Arduino.
Скетч для проверки работы ультразвукового сенсора (выводит на компьютер показания дальномера в сантиметрах):

#include <Ultrasonic.h>
Ultrasonic ultrasonic(12,13); // 12 Trig; 13 Echo

void setup(){
  Serial.begin(9600);
}
void loop(){
  // print out the value you read:
  Serial.println(ultrasonic.Ranging(CM));
  delay(100);        // delay in between reads for stability
}

Подключение линейного регулятора

Линейный регулятор L7805CV имеет три ножки. Первая - в ход (у нас +12 вольт), вторая - "земля" (подключаем на шину, где будет питание 5 вольт), третья ножка - выход +5 вольт. До подключения +12 вольт соединим керамическим конденсатором (у меня с маркировкой 334 - 0,33 микрофарада) вход и землю. На "землю" и выход поставим два керамических конденсатора (тот же на 0,33 микрофарада и с маркировкой 104 - на 0,1 микрофарад).

Продолжение следует...

Комментарии

  1. С нетерпением жду подробного продолжения

    ОтветитьУдалить
  2. На этой неделе выложу подробное пошаговое описание сборки первой версии на макетной плате

    ОтветитьУдалить
  3. Добрый день, Олег.
    Если имеете возможность можете ответить на пару вопросов, так как я только учусь и не все понятно.
    1) Вы используете драйвер M54541 B7. В datasheet я увидел что его Output Sink Current 40 mA. А ведь для метра светодиодной ленты(примерная длина ступеньки) нужно примерно 400mA (4,8ВТ/12В=0,4А).Может я что-то не учел?
    2) Как на 19 ступенек подключить RGB ленту с возможность ШИМ?нужен какой-то pwm multiplexer? И как на него подключить необходимую нагрузку?
    Заранее спасибо.

    ОтветитьУдалить
  4. 1) Вы абсолютно верно рассчитали. На прямую к этому драйверу светодиодные ленты подключить не получится. Поэтом у меня будет третья часть. Я так же, как и вы осваиваю эту тему. Для повышения мощности в таких случаях применяют транзисторные сборки Дарлингтона ULN2803. Эта штука имеет несколько ножек, каждая из которых управляется низким током (как раз от нашего драйвера светодиодных лент) и выдаёт управление более мощной нагрузкой (до 500 мА - как раз укладывается в ваш рассчёт).
    2) Я тоже задумывался о RGB лентах, но для себя решил, что не надо. А вообще, с RGB на сколько я понял, то же самое, что и с обычными лентами. Только драйвер M5451 будет одной ногой рулить одним цветом одной ленты, т.е. на 19 ступенек надо 19 * 3 / 35 = 2 таких драйвера и 19 * 3 / 8 = 8 штук ULN2803. Но можно пойти и другими путями - в интернете всякое встречается.

    ОтветитьУдалить

Отправить комментарий

Популярные сообщения из этого блога

Пропорциональное распределение суммы

Битрикс: своя геолокация

Bitrix24 API - разбор демо приложения третьего типа