Реклама ⓘ
Главная » Arduino
Призовой фонд
на апрель 2024 г.
1. 100 руб.
От пользователей

Реклама ⓘ

Вращающаяся платформа с регулируемой RGB подсветкой и с управлением по Bluetooth

Платформа предназначена для демонстрации кукол. Регулируется скорость и направление вращения. 

Также регулируется подсветка платформы. Есть несколько режимов подсветки:

  •  выключена, 
  •  постоянный цвет и яркость,
  •  постоянный цвет и меняющаяся яркость,   
  •  все цвета по кругу (красный, зеленый, синий, желтый, пурпурный, голубой, белый) и постоянная яркость,
  •  все цвета и меняющаяся яркость,

Бюджетный вариант по компонентам. Сама платформа напечатана на 3d-принтере

Используемые компоненты:

  • Arduino Nano - 1 шт
  • Шаговый двигатель 28BYJ-48 с драйвером на микросхеме ULN2003 - 1 шт
  • Bluetooth-модуль HC-05 - 1 шт
  • Светодиодная лента RGB - 10-12 светодиодов
  • Транзистор TIP120 - 3 шт
  • Резистор 1 кОм - 3 шт
  • RGB-светодиод - 1 шт
  • Резистор 220 Ом - 3 шт
  • Буззер - 1 шт
  • Кнопка с колпачком - 3 шт
  • Резистор 10 кОм - 3 шт
  • Понижающий DC-DC преобразователь  LM2596S - 1 шт
  • Блок питания 12В 2А

Схема соединений

Настройка параметров движения и подсветки с помощью мобильного приложения, либо с помощью трех кнопок. Средняя кнопка - выбор режима настройки (при это RGB-светодиод горит определенным цветом): 

цвет RGB-светодиода Режим Кнопка1 Кнопка3 Подпрограмма
0 не горит остановить платформу и выключить подсветку остановить платформу выключить подсветку doButtons0()
1 красный установка направление движения мотора вращение по часовой вращение против часовой doButtons1()
2 зеленый

установка скорость движения мотора
от speedMotorMin до speedMotorMax с шагом speedMotorStep

уменьшение скорости
   
увеличение скорости doButtons2()
3 синий установка максимальной яркости RGB-лента 
от brightRGBMin до brightRGBMmax с шагом brightRGBStep
 
уменьшение яркости увеличение яркости doButtons3()
4 желтый установка цвета RGB-лента предыдущий следующий doButtons4()
5 фиолетовый выбор длительности смены цвета RGB-ленты   длительность нажатия кнопки doButtons5()
6 голубой выбор режима освещения RGB-лента 
0 - не горит ,
1 - пост. цвет и яркость,
2 - пост. цвет и меняющаяся яркость 0 --> max ,  
3 - все цвета и постоянная яркость,
4 - все цвета и меняющаяся яркость 0 --> max,
предыдущий режим следующий режим doButtons6()
7 белый сохранение текущих параметров в EEPROM
получение настроек из EEPROM
получение настроек из EEPROM сохранение текущих параметров в EEPROM doButtons7()

Код на Arduino для определения нажатия кнопки или получения команды по bluetooth

void loop() {
   // данные по bluetooth
   if (stringComplete) {
    //Serial.println(inputString);
    if(parseHC05()) {
       //Serial.println("ok");
       setParam(inHC05data[0],inHC05data[1]);
    }
    else {
       //Serial.println("no");
    }

    // 
    inputString = "";
    stringComplete = false;
  }
   // проверка нажатия-отжатия кнопки
   int but=getButton();
   if(but>0) {
      //Serial.println(but); 
      switch(resSettings) {
         case 0:
              doButtons0(but);
            break;
         case 1:
              doButtons1(but);
            break;
         case 2:
              doButtons2(but);
            break;
         case 3:
              doButtons3(but);
            break;
         case 4:
              doButtons4(but);
            break;
         case 5:
              doButtons5(but);
            break;
         case 6:
              doButtons6(but);
            break;
         case 7:
              doButtons7(but);
            break;
         default:
            break;
      }
   }
   motor.runSpeed();
   // освещение RGB-лента
   RGB(platform.numLight);
}

За воспроизведение освещения отвечает функция RGB


struct PLATFORM {
  int dir;   // направление движения мотора (-1, 0, 1)   int speedMotor;   // скорость движения мотора
  int numLight;   // номер режима освещения   // 0 - выкл,   // 1 - пост. цвет и яркость,
   // 2 - пост. цвет и меняющаяся яркость,   // 3 - все цвета и постоянная яркость,
   // 4 - все цвета и меняющаяся яркость,
  int color;   // цвет
  int bright;   // яркость
  //unsigned long pause;  // скорость изменения яркости
  unsigned int pause;  // скорость изменения яркости
  int currentColor;   // текущий цвет
  int currentBright;   // текущая яркость
  int dirCurrentBright; // текущее направление изменения яркости
};

PLATFORM platform={-1,200,4,2,200,1000,2,10,1};

// RGB-лента
void RGB(int res) {
  switch(res) {
     case 0:      // выключить RGB
        setLedsLight(0,0,0);
        break;
     case 1:     // один цвет на постоянной яркости
        setLedsLight(min(ledsSettings[platform.color][0],platform.bright),
                     min(ledsSettings[platform.color][1],platform.bright),
                     min(ledsSettings[platform.color][2],platform.bright));
        break;
     case 2:     // 
        setLedsLight(min(ledsSettings[platform.color][0],platform.currentBright),
                     min(ledsSettings[platform.color][1],platform.currentBright),
                     min(ledsSettings[platform.color][2],platform.currentBright));
        if(millis()-millisChangeRGB >= platform.pause/platform.bright) {
            platform.currentBright=platform.currentBright+platform.dirCurrentBright;
            if(platform.currentBright>platform.bright) {
               platform.dirCurrentBright=-1;
               platform.currentBright=platform.bright;
            }
            else if(platform.currentBright<0) {
               platform.dirCurrentBright=1;
               platform.currentBright=0;
            }
            
            millisChangeRGB=millis();          
        }
        break;
     case 3: 
        setLedsLight(min(ledsSettings[platform.currentColor][0],platform.bright),
                     min(ledsSettings[platform.currentColor][1],platform.bright),
                     min(ledsSettings[platform.currentColor][2],platform.bright));
        if(millis()-millisChangeRGB >= platform.pause) {
            platform.currentColor=max(1,(platform.currentColor+1)%8);
            millisChangeRGB=millis();          
        }

        break;
     case 4: 
        setLedsLight(min(ledsSettings[platform.currentColor][0],platform.currentBright),
                     min(ledsSettings[platform.currentColor][1],platform.currentBright),
                     min(ledsSettings[platform.currentColor][2],platform.currentBright));
        if(millis()-millisChangeRGB >= platform.pause/platform.bright) {
            platform.currentBright=platform.currentBright+platform.dirCurrentBright;
            if(platform.currentBright>platform.bright) {
               platform.dirCurrentBright=-1;
               platform.currentBright=platform.bright;
            }
            else if(platform.currentBright<0) {
               platform.dirCurrentBright=1;
               platform.currentBright=0;
               platform.currentColor=max(1,(platform.currentColor+1)%8);
            }
            
            millisChangeRGB=millis();          
        }

        break;
     default: 
        break;
  }
}

 

Полный скетч можно скачать по ссылке ниже

Вид приложения на Android (написано в программе app2inventor)

Stl файлы для печати корпуса созданы в программе Tinkercad.

И фото устройства

 

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

Обозначение Тип Номинал Количество ПримечаниеМагазинМой блокнот
Плата Arduino
Arduino Nano 3.0
1 Поиск в магазине ОтронВ блокнот
Шаговый двигатель28BYJ-481 Поиск в магазине ОтронВ блокнот
Драйверна микросхеме ULN20031 Поиск в магазине ОтронВ блокнот
Bluetooth-модульHC-051 Поиск в магазине ОтронВ блокнот
Биполярный транзистор
TIP120
3 Поиск в магазине ОтронВ блокнот
Резистор
220 Ом
3 Поиск в магазине ОтронВ блокнот
Резистор
1 кОм
3 Поиск в магазине ОтронВ блокнот
СветодиодRGB1 Поиск в магазине ОтронВ блокнот
Кнопка3 Поиск в магазине ОтронВ блокнот
Резистор
10 кОм
3 Поиск в магазине ОтронВ блокнот
Буззер1 Поиск в магазине ОтронВ блокнот
Светодиодная лентаRGB1 Поиск в магазине ОтронВ блокнот
Понижающий DC-DC преобразователь  LM2596S1 Поиск в магазине ОтронВ блокнот
Блок питания12В 2А1 Поиск в магазине ОтронВ блокнот
Добавить все

Скачать список элементов (PDF)

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

Теги:

Опубликована: 0 0
Я собрал 0 0
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 0 Проголосовало: 0 чел.

Комментарии (2) | Я собрал (0) | Подписаться

0
Публикатор #
На форуме автоматически создана тема для обсуждения статьи.
Ответить
0

[Автор]
victoruni #
Такая ошибка обычно возникает, если путь к папке со скетчем содержит пробелы ( .../Рабочий стол/....). Разместите папку со скетчем наприер в папкек .../Документы/Arduino и будет нормально
Прикрепленный файл: 02.png
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется электрическая мощность?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Raspberry Pi 2
Raspberry Pi 2
Бокс для хранения компонентов Осциллограф DSO138
вверх