RGB-ночник управляемый руками

RGB-ночник, с возможностью управления цветом ночника с помощью движения рук. С помощью трех датчиков расстояния будем изменять яркость каждой из трех составляющих RGB-цвета при приближении-удалении руки. В качестве микроконтроллера использовалась плата Arduino.
Вот что получилось:

Для проекта потребовались следующие детали (цены Китай)

Контроллер Arduino — 1шт; (12$)
8×8 RGB-матрица — 1 шт; (8$)
Ультразвуковой датчик расстояния HC-SR04 — 3 шт; (8$)
Сдвиговый регистр — микросхема 74hc595 — 4 шт; (2$)
Резистор 220 Ом — 24 шт; (12 руб)
Блок питания 5V 2A (Китай) — 1 шт. (~4$)
Плафон с подставкой; (51 руб)
Провода, припой и пр.
Итого 750 руб.

arduino82-3

arduino82-2arduino82-1

В качестве RGB-матрицы использовалась GTM2088 — с общим анодом, схема расположения выводов представлена ниже
arduino82-5arduino82-4
Принципиальная схема RGB-ночника:
arduino82-6
Вот как это выглядело после пайки (4 блока):
arduino82-7
матрица;
сдвиговые регистры;
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.
Скетч получился следующим:

// include 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); }

Сборка лампы

Из подставки плафона удаляем патрон и делаем отверстие, чтобы прошла матрица
arduino82-9

arduino82-8
Вставляем блок сдвиговых регистров и закрываем, вырезанным из пенопласта кругом.
Обрезаем "резьбу" плафона, чтобы он зацепился за подставку
arduino82-10
Далее добавляем подставку из полиэтиленовой трубы диаметром 100 с тремя отверстиями под датчики расстояния
arduino82-11

и дно из пенопласта

arduino82-12

получается в сборе так
arduino82-13

Теперь остается только его только украсить и можно пользоваться

Cкетч Arduino

5 comments

  1. Ну и что бы это получилось? Светит не так уж что бы очень, разве что для ночника или чего-то подобного, но траты довольно большие.

  2. as an alternative to acquiring every one of these negatives, apple ipad tablet sells just like very hot wedding cake. . -= Sourish | Blogger Mount Guide’s continue blog site… Exactly why Pick Each of our Blogger Mount Services =-.

  3. ___123___RGB-ночник управляемый руками | Блог по электронике и робототехнике___123___

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>