На главную | Где купить | Авторам | Вакансии | Реклама | Издательство | Каталог | Статьи наших авторов | Контакты |
Прайс листы

Статьи наших авторов

Автор Название
Виктор Петин RGB-ночник управляемый руками

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

В. Петин


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

Вот что получилось:

http://www.youtube.com/watch?feature=player_embedded&v=FEPJDBc1gCc

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

КомпонентКол-во, шт.Цена
1Контроллер Arduino112$
28x8 RGB-матрица18$
3Ультразвуковой датчик расстояния HC-SR0438$
4Сдвиговый регистр - микросхема 74hc59542$
5Резистор 220 Ом2412 руб
6Блок питания 5V 2A (Китай)1~4$
7Плафон с подставкой151 руб
8Провода, припой и пр.
ИТОГО ~ 750 руб

image001.jpg image002.jpg image003.jpg

В качестве RGB-матрицы использовалась GTM2088 - с общим анодом, схема расположения выводов представлена ниже

rgbmatrix2.jpgimage005.jpg

Принципиальная схема RGB-ночника:

Вот как это выглядело после пайки (4 блока): 

  • матрица;
  • сдвиговые регистры;
  • Arduino и датчики hc-sr04;
  • блок питания.

image007.jpg

Разработка скетча. При разработки скетча задал следующие параметры:

  • расстояние 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);
          }
	 

Сборка лампы

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

.image008.jpg

image009.jpg

Вставляем блок сдвиговых регистров и закрываем, вырезанным из пенопласта кругом.

Обрезаем "резьбу" плафона, чтобы он зацепился за подставку

rgb-matrix7.jpg

Далее добавляем подставку из полиэтиленовой трубы диаметром 100 с тремя отверстиями под датчики расстояния

rgbmatrix11.jpg

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

rgbmatrix12.jpg

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

rgbmatrix13.jpg

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

Список радиоэлементов

Обозначение

Тип

Номинал

Количество

Плата Arduino

Arduino Nano 3.0

1

Сдвиговый регистр

CD74HC595

4

Ультразвуковой датчик расстояния

HC-SR04

3

8x8 RGB-матрица

1

Резистор

220 Ом

24

Прикрепленные файлы:

На главную | Где купить | Авторам | Вакансии | Реклама | Издательство | Каталог | Статьи наших авторов | Контакты
© 2001–2017 Издательство «БХВ-Петербург».
Все права защищены. Частичное или полное копирование текстов, слоганов и фотоизображений без письменного согласия Правообладателя запрещено.