VIDEO
Rimidalw (Владимир Лукьянов), реализовал отличный проект автоматической светодиодной подсветки лестницы, которая активируется при пересечении УЗ-датчика (
HC-SR04 ) над первой ступенькой.
Для проекта использовались:
*
Arduino Pro Mini;
* Ультразвуковой датчик измерения расстояния
HC-SR04 — 2 шт;
* Драйвер светодиодов M5450;
* Регулятор напряжения L78M05CV;
* Светодиодная лента LSP0603W15 White — 17 шт;
* Мелочевка( провода, текстолит, штыревые соединители типа PLS, разъемы на плату BLS, термоусадочная трубка, конденсаторы и резисторы);
* Блок питания 12В от сигнализации.
скетч
используются библиотеки для работы:
* со светодиодным драйвером M5450 ;
* с ультразвуковым дальномером HC-SR04 .
#include "lightuino3.h"
#include "Ultrasonic.h"
//Устанавливаем контакты для первого датчика
#define TRIG_PIN 12
#define ECHO_PIN 13
//Устанавливаем контакты для второго датчика
#define TRIG2_PIN 10
#define ECHO2_PIN 11
//Определяем первый датчик
Ultrasonic OurModuleUp(TRIG_PIN, ECHO_PIN);
//Определяем второй датчик
Ultrasonic OurModuleDown(TRIG2_PIN, ECHO2_PIN);
// pins 0, 1 used by Serial
const unsigned char DataPin = 6;
const unsigned char clockPin = 7;
// задержка между ступеньками
const long lightSpacing = 280;
//задержка свечения всей лестницы
const long lightHold = 10000;
//задержка выстрела сенсоров
const long pingReadDelay = 50;
// Диапазон при котором сработает сенсор
const float minBottomIn = 33.0f;
const float minTopIn = minBottomIn;
LightuinoSink sinks(clockPin, DataPin, 100, 4);
boolean bClimbStarted = false;
boolean bDescentStarted = false;
int val;
void setup() {
Serial.begin(9600);
pinMode(DataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
delay(1000);
sinks.set(0,0,0);
}
void loop() {
val = analogRead(0);
//Проверяем освещенность в помещении
if (val>=1020){
UltrasonicDownFire();//Выстрел нижнего датчика
if(bClimbStarted) {
bClimbStarted = false;
bDescentStarted = false;
climbLightSequence();
}
else {
// Выстрел верхнего датчика
UltrasonicUpFire();
if(bDescentStarted) {
bClimbStarted = false;
bDescentStarted = false;
descentLightSequence();
}
}
delay(pingReadDelay);
}
}
//Обработка верхнего датчика
void UltrasonicUpFire() {
if((OurModuleUp.Ranging(INC) < minTopIn) && (OurModuleUp.Ranging(INC) > 0))
{
// Serial.println("Top sensor tripped.");
bDescentStarted = true;
}
}
//Обработка нижнего датчика]
void UltrasonicDownFire() {
if((OurModuleDown.Ranging(INC) < minTopIn) && (OurModuleDown.Ranging(INC) > 0)) {
// Serial.println("Bottom sensor tripped.");
bClimbStarted = true;
}
}
void climbLightSequence(){
LedsOnDown();
}
void LedsOnDown(){
//Обнуляем
byte ledState[9];
for (int j=0;j<9;j++) {
ledState[j] = B00000000;
}
//Зажигаем
for (int k=1;k>=0;k--)
{
for (int j=8;j>=1;j--)
{
ledState[k] = (ledState[k] >> 1) + 128;
sinks.set(ledState);
delay(lightSpacing);
}
}
//Задержка
delay(lightHold);
//Гасим
for (int k=1;k>=0;k--)
{
for (int j=8;j>=1;j--)
{
ledState[k] = (ledState[k] >> 1);
sinks.set(ledState);
delay(lightSpacing);
}
}
delay(pingReadDelay);
}
void descentLightSequence(){
LedsOnUp();
}
void LedsOnUp(){
//Обнуляем
byte ledState[9];
for (int j=0;j<9;j++) {
ledState[j] = B00000000;
}
//Зажигаем
for (int k=0;k<=1;k++)
{
for (int j=0;j<9;j++)
{
ledState[k]=(ledState[k] << 1) + 1;
sinks.set(ledState);
delay(lightSpacing);
} }
delay(lightHold);
for (int k=0;k<=1;k++)
{
for (int j=0;j<9;j++)
{
ledState[k]=(ledState[k] << 1);
sinks.set(ledState);
delay(lightSpacing);
}
}
delay(pingReadDelay);
}
Ссылки
Автоматическая подсветка лестницы с помощью Arduino
По теме
Ультразвуковой датчик измерения расстояния HC-SR04
Arduino
Arduino, термины, начало работы
КМБ для начинающих ардуинщиков
Состав стартера (точка входа для начинающих ардуинщиков)
Комментарии (1)
RSS свернуть / развернутьDiverOfSky
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.