RGB-ночник, с возможностью управления цветом ночника с помощью движения рук. С помощью 3-х датчиков расстояния будем изменять яркость каждой из 3-х составляющих RGB-цвета при приближении-удалении руки. В качестве микроконтроллера использовалась плата Arduino.
Вот что получилось:
Для проекта потребовались следующие детали (цены Китай)
Итого 750 руб.
В качестве RGB-матрицы использовалась GTM2088 — с общим анодом, схема расположения выводов представлена ниже
Принципиальная схема RGB-ночника:
Вот как это выглядело после пайки (4 блока):
- матрица;
- сдвиговые регистры;
- Arduino и датчики hc-sr04;
- блок питания.
Разработка скетча. При разработке скетча задал следующие параметры:
— расстояние 1-20 см, 1 — максимальная яркость, 20 — нулевая
— датчики расстояния в цикле считывают данные и применяют полученное расстояние для установления яркости
— если за цикл расстояние меняется с 1-20 см до больше чем 20 (рука уходит в сторону) — эта яркость фиксируется для данного цвета
Яркость задается подачей ШИМ-сигнала на выводы матрицы для групп R,G,B. Частота ШИМ-сигнала примерно 60Гц. Сигнал ШИМ формируется следующим образам:
К примеру, расстояние 5 см
Сигнал ШИМ — 15-(5-1)=10 циклов прерывания светодиоды данного цвета горят
4 — 1 — светодиоды данного цвета не горят
(на анод всегда подается 1)
для экономии выводов Arduino для управления матрицей используются сдвиговые регистры 74hc595, что позволяет обойтись 3 выводами Arduino.
В скетче использовались библиотеки SPI и Ultrasonic, MsTimer2.
Скетч получился следующим:
// inslude the SPI library:
#include «SPI.h»
// set pin 8 as the slave select for the digital pot:
const int displayPin = 8;
// библиотека для прерываний по таймеру
#include «MsTimer2.h»
int offset=0;
// библиотека для ультразвукового датчика
#include «Ultrasonic.h»
Ultrasonic ultrasonic1(4,5); // красный
Ultrasonic ultrasonic2(9,6); // зеленый
Ultrasonic ultrasonic3(2,3); // синий
// структура для хранения значений R, G, B
struct RGB
{
int r; // позиция R
int g; // позиция G
int b; // позиция B
int offset; // кол-во ШИМ-циклов
};
RGB RGB1={0,0,0,0};
void setup() {
Serial.begin(115200);
Serial.println(«start»);
Serial.println(«led matrix»);
// set the slaveSelectPin as an output:
pinMode (displayPin, OUTPUT);
// initialize SPI:
SPI.begin();
// запуск прерывания по таймеру
MsTimer2::set(1, showDisplay); //
MsTimer2::start();
//clearDisplay();
Serial.println(«led matrix»);
}
int dist=0;
void loop() {
delay(100);
// для красного
dist = (int)ultrasonic1.Ranging(CM); // считать для R
//Serial.print(«dist.r=»);
//Serial.println(dist);
if(dist>0 && dist<20)
{RGB1.r=dist;}
// для зеленого
dist = (int)ultrasonic2.Ranging(CM); // считать для R
//Serial.print(«dist.g=»);
//Serial.println(dist);
if(dist>0 && dist<20)
{RGB1.g=dist;}
// для синего
dist = (int)ultrasonic3.Ranging(CM); // считать для R
//Serial.print(«dist.b=»);
//Serial.println(dist);
if(dist>0 && dist<20)
{RGB1.b=dist;}
}
// обработка прырывания по таймеру
// динамическая индикация
void showDisplay() {
// инкремент счетчика
RGB1.offset=max(2,(RGB1.offset+1)%15);
digitalWrite(displayPin,LOW);
// вывод данных
if(RGB1.b меньше RGB1.offset) // blue
SPI.transfer(B00000000);
else
SPI.transfer(B11111111);
SPI.transfer(B11111111); // анод
if(RGB1.g меньше RGB1.offset) // green
SPI.transfer(B00000000);
else
SPI.transfer(B11111111);
if(RGB1.r меньше RGB1.offset) //red
SPI.transfer(B00000000);
else
SPI.transfer(B11111111);
// take the SS pin high
digitalWrite(displayPin,HIGH);
}
Сборка лампы
Из подставки плафона удаляем патрон и делаем отверстие, чтобы прошла матрица
.
Вставляем блок сдвиговых регистров и закрываем, вырезанным из пенопласта кругом.
Обрезаем «резьбу» плафона, чтобы он зацепился за подставку
Далее добавляем подставку из полиэтиленовой трубы диаметром 100 с тремя отверстиями под датчики расстояния
и дно из пенопласта
получается в сборе так
Теперь остается лишь его лишь украсить и можно пользоваться
Список радиоэлементовОбозначение
Тип
Номинал
Количество
ПримечаниеМагазинМой блокнот
Плата ArduinoArduino Nano 3.01
Сдвиговый регистрCD74HC5954
Ультразвуковой датчик расстоянияHC-SR043
8×8 RGB-матрица1
Резистор220 Ом24
Добавить все
Скачать список элементов (PDF)
Прикрепленные файлы:
- rgb_matrix01.zip (1 Кб)