Оглавление:

Настольный светильник, управляемый Arduino / приложением: 6 шагов (с изображениями)
Настольный светильник, управляемый Arduino / приложением: 6 шагов (с изображениями)

Видео: Настольный светильник, управляемый Arduino / приложением: 6 шагов (с изображениями)

Видео: Настольный светильник, управляемый Arduino / приложением: 6 шагов (с изображениями)
Видео: 🔥НЕРЕАЛЬНЫЙ СВЕТИЛЬНИК СВОИМИ РУКАМИ 2024, Ноябрь
Anonim
Image
Image
Настольный светильник, управляемый Arduino / приложением
Настольный светильник, управляемый Arduino / приложением
Настольный светильник, управляемый Arduino / приложением
Настольный светильник, управляемый Arduino / приложением

Для этого проекта мне нужно было что-то, что позволило бы мне больше узнать об электронике / программном обеспечении, чем я еще не особо разбирался … Я решил, что свет будет хорошей платформой для этого.

Дизайн, который я придумал, был для аплайтера с регулировкой цвета и яркости. На продукте цветовая температура и яркость белого цвета от теплого до холодного регулируются с помощью «шайбы», ее положение и ориентация меняют их независимо - довольно уникальное и забавное взаимодействие.

Изображение
Изображение

Я также закончил тем, что создал приложение (может также бросить вызов самому себе), чтобы настроить их, а также добавил дополнительные функции для управления некоторыми светодиодами RGB и установки будильника восхода солнца. Будильник восхода солнца постепенно увеличивает яркость в течение 30 минут, чтобы помочь вам проснуться.

Поскольку это мой первый проект Arduino / App, я предполагаю, что определенно будут лучшие способы выполнения кода, так что не беспокойтесь! Это работает, так что я счастлив. Если у вас есть предложения по улучшению и т. Д., Было бы хорошо услышать..

Все файлы для этого проекта (код изобретателя arduino / приложения, графика приложения и т. Д.) И APK-файл приложения. можно найти по этой ссылке.

Я участвовал в конкурсах Raspberry Pi и FULL SPECTRUM LASER, так что, если вы считаете, что это достойно, голосование будет очень признательно !!

Что вам нужно….

Elec. Компоненты:

  • Ардуино Микро
  • 12 линейных радиометрических датчиков Холла
  • Разъем постоянного тока
  • Блок питания 12 В
  • 2x 1Вт холодных белых светодиода (6000K)
  • 2x 1 Вт теплые белые светодиоды (2800K)
  • 4x неопикселя Adafruit RGB
  • Драйвер постоянного тока Sparkfun Picobuck 350mA
  • Модуль Bluetooth HC06
  • Доска прототипа
  • Клеммные колодки
  • Провода

Материалы:

  • Материалы для изготовления форм (картон, силикон и т. Д.)
  • Полиуретановая литьевая смола
  • Фанера

Расходные материалы:

  • Припой
  • Балончик с краской
  • Наждачная бумага
  • Чашки для смешивания / мешалки

Инструменты:

  • Паяльник
  • Клей-пистолет
  • Плоскогубцы / отвертки / ножи и т. Д.
  • Лазерный резак

Программное обеспечение:

  • Ардуино
  • MIT App Inventor (бесплатно в Интернете)
  • Photoshop или что-то еще для создания графики для приложений

Шаг 1: датчики на эффекте Холла

Для управления продуктом / взаимодействия я хотел придумать что-то немного другое, а не просто циферблат или что-то в этом роде.

После небольшого исследования различных типов электронных компонентов я обнаружил линейные радиометрические датчики на эффекте Холла. По сути, это датчик, на выходной сигнал которого влияют магнитные поля. Обычно выходное напряжение датчиков составляет половину входного напряжения. Однако, когда магнит приближается к нему, выходное напряжение либо возрастет до входного напряжения, либо упадет до 0 В (пределы насыщения) в зависимости от того, северный или южный полюс магнита.

Я понял, что могу использовать это, чтобы позволить мне управлять двумя разными настройками на одном датчике Холла - родилась идея «шайбы». В шайбе для лазерной резки спрятан магнит, который будет регулировать яркость или цветовую температуру в зависимости от того, какой конец обращен к датчикам. Я перейду к коду Arduino позже, но, по сути, я читаю эти датчики и смотрю, поднялся ли выходной сигнал выше «высокого триггера» или упал ниже «низкого триггера». Я использую несколько датчиков на эффекте Холла, чтобы я мог сопоставить каждому из них определенную цветовую температуру и значение яркости, которые срабатывают, когда вы перемещаете шайбу по дуге.

Изображение
Изображение

Шаг 2: Электронное оборудование

Электроника Аппаратное обеспечение
Электроника Аппаратное обеспечение
Электроника Аппаратное обеспечение
Электроника Аппаратное обеспечение
Электроника Аппаратное обеспечение
Электроника Аппаратное обеспечение

Первым шагом этого проекта было подключение электронного оборудования. Я решил использовать Arduino Micro, поскольку он имеет большое количество аналоговых считывающих выводов, что позволяет мне использовать несколько датчиков эффекта Холла, чтобы обеспечить достаточное разрешение для настройки параметров. Источник питания 12 В постоянного тока разделен между питанием Arduino и драйвера светодиода.

Управляющая дуга использует 11 датчиков Холла, еще 1 используется для выключения света. Они были подключены к контактам A0-> A5 и 4, 6, 8, 9, 10, 12. Они имеют общие 5 В и шину / контакт заземления.

Светодиоды, которые я использовал, имеют мощность 1 Вт и требуют драйвера постоянного тока. Использовался Sparkfun PicoBuck, поскольку он подает постоянный ток 350 мА на 3 выходных канала. Питание 12 В подключается к выводам Vin драйвера. Драйвер имеет входные контакты для управления ШИМ выходов, они были подключены к контактам 3 и 5 Arduino.

Затем был подключен модуль bluetooth. Bluetooth Rx-> Arduino Tx, Tx-> Rx и 5v.ground.

Изображение
Изображение

Светодиоды смонтированы на отдельной плате. Два холодных белых светодиода соединены последовательно, как и теплые. Они подключаются к выходам 1 и 2 драйвера. Светодиоды RGB - это неопиксели Adafruit; это объединяемые в цепочки модули, для которых вы можете управлять цветом и яркостью индивидуально с одного пина Arduino. Они подключаются к контакту 11 и контактам 5 В / заземление.

Шаг 3. App Inventor

App Inventor
App Inventor
App Inventor
App Inventor
App Inventor
App Inventor

Для создания приложения я использовал MIT App Inventor, он бесплатный и довольно простой в освоении / использовании. Сначала мне пришлось создать экраны / графику приложения - это можно сделать в фотошопе и т. Д. Это упрощает задачу в App Inventor, если у вас есть все компоненты, составляющие экраны, как отдельные изображения / файлы.

В App Inventor есть два представления: вкладка «Конструктор» для визуальных элементов интерфейса и вкладка «Блоки» для кода.

Используя вкладку «Дизайнер», я создал экраны приложения. Я обнаружил, что компонент bluetooth не работает на нескольких экранах, поэтому после экрана приветствия все остальные (соединение, RGB, цветовая температура, сигнализация) создаются на одном экране - фактически слои, которые я включаю. /выключенный.

Основные инструменты, которые я использовал, - это макет / выравнивание и холст. Холст - это чувствительная к прикосновению область, которую можно показать как изображение.

Как только визуальные эффекты настроены, самое время переключиться на вкладку «Блоки» и написать код. Я опишу это вкратце, но, вероятно, будет проще, если вы импортируете мой файл в App Inventor и поиграете сами …

Эти первые блоки предназначены для экранов подключения. Чтобы позволить приложению попытаться автоматически подключиться к модулю Bluetooth Arduinos, я создаю и устанавливаю переменную на адрес моего HC06. Я использую таймер для изменения фонового изображения во время подключения. Если соединение установлено, загружается экран цветовой температуры. Если по Bluetooth не удается подключиться автоматически, необходимо нажать кнопку «Подключиться к устройству». Откроется список всех устройств Bluetooth, которые может видеть ваш телефон. Команда bluetoothclient1.connect использует адрес устройства, который вы выбираете из этого списка, для подключения.

Изображение
Изображение
Изображение
Изображение
Изображение
Изображение

Эти блоки контролируют, что происходит, когда вы касаетесь каждой из кнопок меню - переключение между RGB, цветовой температурой и сигналом тревоги. При касании соответствующие визуальные слои включаются и выключаются. То есть, когда вы нажимаете кнопку меню RGB, он переключает фоновое изображение холста кнопок на темный значок, включает экран RGB, а другой - выключается.

Управление мощностью и яркостью разделяется между экранами RGB и цветовой температурой. Чтобы Arduino знала, какими светодиодами нужно управлять, мне нужно сообщить ему, какой экран загружен. Текстовая строка в формате (экран)? отправляется вашим телефоном через bluetooth с помощью команды BluetoothClient1. SendText.

Изображение
Изображение

Этот блок отправляет строку (Power)? всякий раз, когда нажимается кнопка питания.

Изображение
Изображение

Эти блоки управляют настройкой цветовой температуры. Когда вы касаетесь холста, координата Y точки касания используется для установки переменной «круто». Значение Y зависит от размера холста в пикселях, поэтому в моем случае это значение от 0 до 450. Я использую множитель, чтобы преобразовать его в пригодное для использования значение PWM (0–255). Затем я отправляю строку с этим значением и идентификатором в форме (Tempvalue) ?.

Изображение
Изображение

Такие же блоки, как и выше, но для регулировки яркости. На этот раз с помощью координаты X и различных множителей установите для переменной Bright значение от 10 до 100.

Изображение
Изображение

Эти блоки предназначены для управления RGB. Существует команда GetPixelColor, которую можно использовать для получения значения RGB пикселя, которого касается ваш палец. По какой-то причине он выводит значение с дополнительными 255 в конце, поэтому я немного поработал, чтобы получить значение в формате (RGBredvalue.greenvalue.bluevalue.)? Затем он снова отправляется в Arduino, но с RGB в качестве идентификатора в строке.

Изображение
Изображение

Следующий раздел блоков предназначен для настройки сигнализации. Первый блок управляет тем, что происходит, когда вы касаетесь / перетаскиваете солнце вверх и вниз. Опять же, команды «получить текущие X и Y» используются для получения значения, в котором находится ваш палец, и изменения фонового изображения в зависимости от высоты солнца. Положение солнца также определяет, включена или отключена сигнализация, она отправляется по Bluetooth.

Изображение
Изображение
Изображение
Изображение

Когда вы касаетесь или завершаете перемещение солнца, появляется окно выбора времени, позволяющее установить время будильника. Основная часть этого следующего блока использует текущее время, чтобы определить, сколько миллисекунд осталось до установки будильника. Это значение затем отправляется в Arduino.

Изображение
Изображение
Изображение
Изображение

На следующем этапе я расскажу, как Arduino читает и использует строки …

Шаг 4: Код Arduino

Как и в случае с кодом приложения, я кратко расскажу об этом….

Сначала я настраиваю все свои переменные, назначая датчики и светодиоды на правильные контакты. Выходной сигнал датчиков Холла будет считан с помощью функции analogRead, давая значение от 0 до 1023. Как описано ранее, он выдает половину, когда нет магнитов, то есть около 500. Я использую переменные триггера Low и High, чтобы я мог легко отрегулируйте, когда он знает, что шайба находится над датчиком.

Изображение
Изображение

Неопикселям требуется библиотека, поэтому она определена здесь.

Изображение
Изображение
Изображение
Изображение

Настройка void запускает последовательные интерфейсы, для Micro контакты Rx / Tx (bluetooth) используют Serial1.. Затем контакты устанавливаются как входы или выходы, а светодиоды выключаются.

Изображение
Изображение

Теперь его основной цикл …

Этот первый раздел проверяет, принимаются ли какие-либо данные из приложения. Serial1.available () читает серийный номер и получает количество байтов в строке. Если это> 0, я знаю входящие данные.

Если вы помните, все строки, которые я отправляю из приложения, заканчиваются вопросительным знаком…. т.е. (Bright100)?

Я использую функцию.readStringUntil для чтения последовательных данных до вопросительного знака (Bright100) и устанавливаю на это значение переменной BTstring. Я проверяю, заканчивается ли BTstring на ")", чтобы убедиться, что принимаются полные команды. Если да, то вызывается цикл программы Bluetooth… это описано ниже..

Изображение
Изображение

Следующий бит управляет сигналом восхода солнца. Обычно, если сигнализация включена и время правильное, светодиоды начинают гаснуть. Из-за того, что человеческий глаз воспринимает свет логарифмически, лучше использовать любой вид светодиода, увеличивающий / уменьшающийся с экспоненциальной кривой, а не линейной. Следовательно, уравнение управляет значениями ШИМ…

Изображение
Изображение

Чтобы шайба не мешала управлению приложением, она отключается при использовании приложения. Чтобы повторно активировать шайбу, вам нужно отодвинуть ее от продукта на 5 секунд. Этот бит кода сначала проверяет, все ли датчики выдают стабильное значение (без магнита), а затем запускает таймер. По истечении 5 секунд для переменной BTinControl возвращается значение false.

Изображение
Изображение

Код для шайбы сейчас.. Сначала нужно прочитать датчики.

Если индикатор в настоящее время не горит, он проверит, находится ли какой-либо из датчиков выше или ниже точек срабатывания, то есть шайба находится на дуге. Если это так, то белые светодиоды погаснут до последней настройки независимо от того, где вы его разместите.

Изображение
Изображение
Изображение
Изображение

Чтобы светодиоды оставались установленными на последнюю настройку, а не обновляли значения, связанные с любыми датчиками, срабатывающими при их срабатывании, для переменной MovedSinceStandby установлено значение false. Следующий фрагмент кода в основном проверяет, переместили ли вы шайбу из ее исходного положения на заданную величину….

Изображение
Изображение
Изображение
Изображение

Если вы перемещаете шайбу, вызывается «Основная программа» для обновления яркости / цветовой температуры. Это описано ниже.

Изображение
Изображение

Последний бит в этом основном цикле проверяет, была ли шайба снова помещена в резервную док-станцию - это датчик 12, считывающий значение выше / ниже точки срабатывания. Если это так, светодиод снова погаснет.

Изображение
Изображение

Шлейф блютуз:

Как описано выше, когда данные получены через Bluetooth, строка считывается. Теперь нам нужно проверить, что говорит эта строка …

Со всеми строками, кроме яркости, цветовой температуры и RGB, довольно легко справиться. Вы проверяете, совпадает ли BTstring с текстом, отправленным из приложения.

Если вы помните, всякий раз, когда вы меняете экраны в приложении, оно отправляет команду bluetooth. Здесь мы спрашиваем об этом и устанавливаем для некоторых переменных значение true или false, чтобы мы знали, на каком экране вы находитесь.

Обратите внимание, что в конце каждого раздела я устанавливаю для переменной BTinControl значение true и очищаю значение BTstring.

Изображение
Изображение
Изображение
Изображение

Когда вы нажимаете кнопку питания в приложении, светодиоды гаснут вверх или вниз. Переменные, указанные выше, для того, на каком экране вы находитесь, используются, чтобы решить, какой светодиоды использовать: RGB или белый.

Изображение
Изображение
Изображение
Изображение

Для яркости, цветовой температуры и RGB мне нужно читать строки немного по-другому. Поскольку числовая часть строки будет изменяться, я сомневаюсь, начинается ли строка с одного из идентификаторов, а не с полной строки, поэтому просто (Яркий здесь..

Теперь мне нужно отделить фактическое значение яркости от строки. Формат строки, отправляемой из приложения, - (Brightvalue), поэтому я знаю, что значение яркости будет между 't' и ')'. Положение t останется постоянным, это всегда будет 7-й символ в строке. Но поскольку значение яркости может быть от 10 до 100, положение символа «)» изменится. Я использую команду.indexOf, чтобы определить, где находится ')', что это за символ, а затем могу использовать команду.substring для чтения строки между 7-м символом и позицией символа ')'. Это оставляет мне только значение яркости, которое я могу использовать для настройки RGB или белых светодиодов в зависимости от экрана.

Изображение
Изображение

Регулировка цветовой температуры аналогична описанному выше, но на этот раз значение будет между буквами «p» и «)» …

Изображение
Изображение

Для настройки RGB у нас есть три значения, которые нужно извлечь из строки, но это снова аналогичный процесс. Из приложения получаем строки в виде (RGBvalue.value.value)

Итак, я знаю, что значение красного будет между буквой «B» и первой точкой. Зеленое значение находится между 1-й и 2-й точками, а синее значение - между 2-й точкой и знаком «)».

Как только мы получим значения, neopixles будут установлены на новый цвет …

Изображение
Изображение

Здесь мы проверяем, включена или отключена сигнализация. Если время будильника изменено, мы получим строку с количеством миллисекунд с этого момента до будильника. Это значение снова извлекается из строки, и для того, чтобы иметь возможность проверить, пора ли начинать восход солнца, нам нужно установить переменную на текущее время (миллисекунды).

Изображение
Изображение

Управление шайбой:

Как описано ранее, если шайба (магнит) находится в одном направлении вверх, она будет управлять выходным сигналом датчика Холла ниже нижнего триггера, а в другом направлении - выше верхнего триггера.

Это позволяет контролировать яркость и цветовую температуру на одной дуге.

Считываются значения датчиков. Если какой-либо из них меньше нижнего значения триггера, мы корректируем цветовую температуру. Под областью дуги находятся 11 датчиков, выходы которых, в свою очередь, будут опускаться ниже точки срабатывания, когда шайба перемещается над ними. У каждого датчика есть значение ШИМ для холодного и теплого светодиодов напротив него, начиная с датчика 1 при 100% тепле, 0% холоде и работая до 11-го при 0% тепле, 100% холоде.

Изображение
Изображение
Изображение
Изображение
Изображение
Изображение

Регулировка яркости выполняется таким же образом … на этот раз проверяется, находятся ли выходы датчиков выше верхнего триггера, и каждому датчику присваивается весовое значение яркости.

Этот весовой коэффициент яркости затем умножается на значение цветовой температуры, чтобы получить общее выходное значение. Позволяет установить любую цветовую температуру на любую яркость…

Изображение
Изображение
Изображение
Изображение

Шаг 5: жилье

Корпус
Корпус
Корпус
Корпус
Корпус
Корпус
  1. Начал с лепки из картона нижней части корпуса. Чтобы создать углубления для зоны управления, я вырезал из фанеры лазерную дугу в форме дуги и использовал монету 5 пенсов для «резервной» док-станции. Они были приклеены к картонной форме, обращая внимание на то, чтобы поставить их в правильное положение, которое совпадало бы с датчиками холла.
  2. Затем нужно было перемешать полиуретановую смолу. Материал, который я использую, имеет простое соотношение 1: 1 и затвердевает примерно за 20 минут.. так что работать нужно довольно быстро!
  3. Первоначальная заливка должна была заполнить дно формы. После этого набора я добавил внутреннюю стенку из картона, чтобы можно было залить боковые стенки.
  4. Чтобы создать верхнюю часть, в которой будут сидеть светодиоды, я вырезал и приклеил пластиковую трубку / чашку под углом. И снова влили смолу и дали ей застыть.
  5. Теперь корпус был готов, мне нужно было просверлить несколько отверстий и хорошенько отшлифовать его.
  6. Нанесли грунтовку, а затем нанесли последний верхний слой краски.

Шаг 6: Сборка / Заключение

Сборка / Заключение
Сборка / Заключение
Сборка / Заключение
Сборка / Заключение
Сборка / Заключение
Сборка / Заключение
Сборка / Заключение
Сборка / Заключение
  1. Из корпуса вырезан прорезь для гнезда постоянного тока. Затем приклеивается домкрат.
  2. Затем плата светодиодов может быть прикручена в верхней части, а провода пропущены через нижнюю часть.
  3. Затем провода от светодиодов и разъема постоянного тока были вкручены в соответствующие клеммные колодки.
  4. Затем основная плата привинчивается к корпусу.
  5. Затем прикручивают кусок фанеры, чтобы закрыть нижнюю часть корпуса.
  6. Наконец, склейте «шайбу» вместе, убедившись, что полюса магнита сориентированы с правильной «яркостью» или «цветовой температурой» торцевой крышки.

В целом свет работает очень хорошо! В программном обеспечении есть несколько ошибок, которые нужно исправить, и светодиоды RGB могли бы быть ярче. Я также могу добавить датчик внешней освещенности, чтобы автоматически изменять цветовую температуру, начиная с «прохладной» днем и меняющейся на «теплой» ночью.

Приветствую за чтение!

Рекомендуемые: