Оглавление:

Перезаряжаемая солнечная лампа с питанием от XOD: 9 шагов (с изображениями)
Перезаряжаемая солнечная лампа с питанием от XOD: 9 шагов (с изображениями)

Видео: Перезаряжаемая солнечная лампа с питанием от XOD: 9 шагов (с изображениями)

Видео: Перезаряжаемая солнечная лампа с питанием от XOD: 9 шагов (с изображениями)
Видео: ВЫЖИВАЕМ И ОТДЫХАЕМ НА ПРИРОДЕ С КОМФОРТОМ! Товары для кемпинга с Алиекспресс + Конкурс 2024, Ноябрь
Anonim
Перезаряжаемая солнечная лампа с питанием от XOD
Перезаряжаемая солнечная лампа с питанием от XOD

В большинстве магазинов товаров для дома и хозяйственных товаров можно приобрести недорогие солнечные садовые / дорожные светильники. Но, как гласит старая пословица, обычно вы получаете то, за что платите. Обычные схемы зарядки и освещения, которые они используют, просты и дешевы, но получаемая вами светоотдача совсем не впечатляет (и ее едва хватает для того, чтобы кто-нибудь, идущий по вашей дорожке, мог видеть, куда он идет!)

Это моя попытка разработать автономный осветительный модуль, который является значительным улучшением, но при этом является относительно недорогим в изготовлении. Придав ему немного «мозгов». XOD.io - это новая IDE, совместимая со встроенной платформой разработки Arduino, где вы можете «писать» код графически. Среда переносит ваш графический эскиз на современный C ++, который чрезвычайно эффективен при генерации компактного кода и генерирует исходный код, полностью совместимый со стандартной IDE Arduino, не требуя дополнительных внешних зависимостей. Таким образом, даже небольшие недорогие микроконтроллеры с ограниченными ресурсами для хранения программ и данных могут использоваться для решения сложных задач.

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

Шаг 1. Необходимые материалы

Arduino IDE, последняя версия, с расширением ATTinyCore, установленным из менеджера "Boards"

Программатор Sparkfun USBTinyISP ATTiny, 11801 или аналогичный Страница продукта Sparkfun

Регулируемый низковольтный повышающий преобразователь Pololu с входом отключения, U1V11A или аналогичный Страница продукта Pololu

Мощный белый светодиод или светодиод RGB с радиатором, общим анодом, Adafruit 2524 или аналогичный Страница продукта Adafruit

Микрочип ATTiny85 в DIP корпусе с 8 выводами, 2 страница продукта Mouser

8-контактные гнезда DIP IC, 2

Накопительный конденсатор, 16 в 220 мкФ

Выходной конденсатор, 6,3 В, 47 мкФ

Токоограничивающие резисторы, 50 Ом 1/4 Вт

Подтягивающие резисторы i2c, 4,7 кОм, 2 шт

Панельные резисторы делителя напряжения считывающие, 1/4 ватт, 100 кОм, 470 кОм

Токоизмерительный резистор, 10 Ом 1⁄2 Вт, погрешность 1%

Байпасные конденсаторы, керамические 0,1 мкФ, 2 шт

2 литий-ионный аккумулятор 3,7 в 100 мАч, PKCELL LP401 или аналогичный

Входное гнездо для бочкообразного штекера для панели, 1

Миниатюрные клеммные блоки Плата с пайкой 3 "x3" и тонкий одножильный провод для подключения

Для тестирования почти наверняка потребуются осциллограф, мультиметр и настольный источник питания

Шаг 2: Настройка среды

Настройка среды
Настройка среды

Среда XOD не поддерживает серию процессоров ATTiny из коробки, но, используя пару сторонних библиотек из вселенной Arduino, легко добавить поддержку этой серии AVR. Первым шагом является установка библиотеки «ATTinyCore» из раскрывающегося меню «Инструменты → Плата → Диспетчер плат» в среде Arduino IDE. Убедитесь, что настройки, показанные на прилагаемом изображении, верны - помните, что вы должны нажать «Записать загрузчик», чтобы изменить предохранители для настройки напряжения и тактовой частоты перед загрузкой любого кода!

Исходный код этой библиотеки доступен по адресу:

Еще одна полезная библиотека из репозитория - «FixedPoints», которая представляет собой реализацию математики с фиксированной точкой во время компиляции для процессоров, поддерживаемых Arduino. ATTiny имеет ограниченную SRAM и программную память, и это очень помогает с уменьшением окончательного размера эскиза для использования 2-байтового целого числа для общего хранения данных, а не типа с плавающей запятой, который требует 4 байта на AVR. Скорость выполнения также должна быть улучшена, поскольку у ATTiny нет аппаратного модуля умножения, а тем более аппаратной с плавающей запятой!

Исходный код доступен по адресу:

Учебное пособие по созданию, транспилированию и развертыванию графических эскизов XOD по адресу: https://github.com/Pharap/FixedPointsArduino очень поможет понять, как были созданы включенные исходные файлы.

Шаг 3: Обзор дизайна

Обзор дизайна
Обзор дизайна
Обзор дизайна
Обзор дизайна

На плате два процессора ATTiny85 подключены через интерфейс i2c и используются, работая вместе, чтобы управлять измерением напряжения солнечной панели, тока, протекающего в батарею от повышающего преобразователя, когда панель подсвечивается, напряжения батареи и батареи. температура.

Повышающий преобразователь представляет собой стандартный модуль на базе микросхемы Texas Instruments TPS6120, которая может принимать входное напряжение от 0,5 вольт и повышать его до любого значения от 2 до 5 вольт. Ядро датчика состоит из нескольких функциональных блоков. Основные часы начинают работать, как только на повышающий преобразователь подается питание от входа солнечной панели. Это запускает выполнение эскиза, и первое, что нужно сделать, это определить, достаточно ли освещена панель, чтобы обеспечить зарядный ток для батареи.

Напряжение солнечной панели проходит через два цифровых фильтра, и если оно выше определенного порога, система определяет, что панель освещена, и вводит основные часы в монитор измерения тока. Это канал аналогово-цифрового преобразователя микросхемы, настроенный по-разному, который измеряет напряжение на резисторе с допуском 10 Ом 1%, подключенном последовательно между выходом повышающего преобразователя и входом батареи. Когда панель не подсвечивается, этот ATTiny отправляет сигнал второму ATTiny, говоря, что ему нужно контролировать мощность светодиода вместо мощности зарядки, а также выключить повышающий преобразователь и изолировать вход, чтобы аккумулятор не отправлял ток обратно через панель..

На втором ядре ATTiny работает светодиодный контроллер и система контроля заряда аккумулятора. Данные о напряжении панели, напряжении аккумулятора и токе заряда аккумулятора отправляются в это ядро для обработки через сеть с нечеткой логикой, которая пытается сгенерировать соответствующий сигнал ШИМ для подачи на вывод SHTDN, тем самым контролируя количество тока, отправляемого в аккумулятор. заряжать его при освещении - основная форма отслеживания максимальной мощности (MPPT). Он также получает сигнал от сердечника датчика, сообщающий ему, должен ли он включать или выключать светодиод, в зависимости от выходного сигнала дня ядра датчика / ночные вьетнамки.

Когда светодиод активен ночью, эта ATTiny отслеживает данные о напряжении аккумулятора, отправленные ему от его приятеля, и свой собственный датчик температуры на кристалле, чтобы получить приблизительную оценку того, сколько энергии подается на светодиод (напряжение аккумулятора уменьшается. и температура микросхемы увеличивается с током, протекающим с его контактов.) Сеть нечеткой логики, связанная с патчем ШИМ светодиода, пытается оценить, сколько энергии батареи еще доступно, и уменьшить интенсивность светодиода по мере разряда батареи.

Шаг 4: Создание пользовательских патчей из базовой библиотеки XOD

Создание пользовательских патчей из базовой библиотеки XOD
Создание пользовательских патчей из базовой библиотеки XOD
Создание пользовательских патчей из базовой библиотеки XOD
Создание пользовательских патчей из базовой библиотеки XOD

Для этого дизайна использовалось несколько настраиваемых узлов исправлений, некоторые из которых можно легко построить полностью из включенных узлов XOD, а некоторые были реализованы на C ++.

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

Структура узлов на изображении - это просто прямое графическое представление передаточной функции в статье, соединенное вместе с помощью ссылок от соответствующих входов к выходам. В библиотеке есть узел defer, который позволяет создать цикл обратной связи (XOD предупредит вас, если вы создадите цикл обратной связи без вставки задержки в цикл, как описано в модели выполнения XOD). патч работает хорошо, все просто.

Второй настраиваемый патч-узел - это вариация штатного триггера, включенного в XOD, на который подается отфильтрованное напряжение панели. Он фиксируется на высоком или низком уровне в зависимости от того, находится ли входной сигнал выше или ниже определенного порога. Узлы приведения используются для преобразования логических выходных значений в импульсный тип данных для запуска триггера при переходе состояния от низкого к высокому. Мы надеемся, что дизайн этого патч-узла должен быть в некоторой степени понятным из снимка экрана.

Шаг 5: Создание пользовательских патчей с использованием C ++

Создание пользовательских патчей с использованием C ++
Создание пользовательских патчей с использованием C ++

Для особых требований, когда необходимая функциональность узла была бы слишком сложной, чтобы ее можно было легко изобразить графически, или которые полагаются на библиотеки Arduino, не относящиеся к стандартной среде Arduino, XOD позволяет тем, кто обладает некоторыми знаниями C / C ++, писать небольшие фрагменты код, который затем может быть интегрирован в патч так же, как любой другой созданный пользователем или стандартный узел. Выбор «создать новый патч» в меню файла создает пустой лист для работы, а узлы ввода и вывода можно перетаскивать из раздела «узлов» основной библиотеки. Затем можно перетащить узел «не реализовано в xod», и при щелчке по нему откроется текстовый редактор, в котором необходимые функции могут быть реализованы на C ++. Здесь описывается, как обрабатывать внутреннее состояние и получать доступ к портам ввода и вывода из кода C ++.

В качестве примера реализации пользовательских патчей на C ++, два дополнительных пользовательских патча для ядра драйвера используются для получения оценки напряжения питания ядра драйвера и температуры ядра. Наряду с нечеткой сетью это позволяет приблизительно оценить оставшийся заряд батареи, доступный для питания светодиодов в темноте.

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

Шаг 6: Строительство

Строительство
Строительство
Строительство
Строительство
Строительство
Строительство

Я построил проект на небольшом куске макетной платы с медными прокладками для деталей со сквозными отверстиями. Использование сокетов для микросхем очень помогает при программировании / модификации / тестировании; Интернет-провайдер USBTiny от Sparkfun имеет аналогичное гнездо на своей плате, поэтому программирование двух микросхем просто состоит из подключения программатора к USB-порту ПК, загрузки транспилированного кода XOD из включенных файлов Arduino.ino с соответствующими настройками платы и программатора, а также затем аккуратно извлеките микросхемы из гнезда программатора и вставьте их в гнезда прототипов.

Модуль повышающего преобразователя на базе Pololu TPS6120 поставляется на переходной плате, припаянной к макетной плате на контактных разъемах, поэтому можно сэкономить место, установив некоторые компоненты под ней. На моем прототипе я поместил два подтягивающих резистора 4,7 кОм снизу. Они необходимы для правильной работы шины i2c между чипами - без них связь не будет работать! На правой стороне платы находится входной разъем для штекера солнечной панели и входной накопительный конденсатор. Лучше всего попытаться соединить гнездо и этот колпачок напрямую вместе с помощью «участков» припоя, а не соединительного провода, чтобы получить как можно более низкое сопротивление пути. Затем ряды твердого припоя используются для подключения положительной клеммы накопительного конденсатора непосредственно к клемме входного напряжения модуля повышения, а вывод заземления модуля повышения - непосредственно к контакту заземления разъема.

Справа и слева от разъемов для двух ATTinys расположены конденсаторы 0,1 мкФ, снижающие напряжение / шум. Эти компоненты также важно не упускать из виду, и их следует подключать к контактам питания и заземления микросхем как можно более коротким и прямым путем. Резистор считывания тока 10 Ом находится слева, он подключен к выходу повышающего преобразователя, и каждая сторона подключена к входному контакту сердечника датчика - эти контакты настроены для работы в качестве дифференциального АЦП для косвенного измерения ток в батарею. Соединения между выводами IC для шины i2c и выводом отключения повышающего преобразователя и т. Д. Могут быть выполнены с помощью соединительного провода на нижней стороне макетной платы, для этого отлично подходит очень тонкий соединительный провод с твердым сердечником. Это упрощает замену, а также выглядит намного аккуратнее, чем бегать прыгуны между отверстиями наверху.

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

Шаг 7: Тестирование, часть 1

Тестирование, часть 1
Тестирование, часть 1

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

Прежде чем вставлять микросхемы, батарею и панель в их гнезда, в первую очередь необходимо проверить отсутствие коротких замыканий на плате, чтобы избежать возможных повреждений! Самый простой способ сделать это - использовать настольный источник питания, который может ограничить выходной ток до безопасного значения в такой ситуации. Я использовал свой стендовый источник питания, установленный на 3 вольта и предельное значение 100 мА, подключенный к клеммам входного разъема солнечной панели с положительным и отрицательным выводами источника питания. При отсутствии ничего, кроме установленных пассивных компонентов, на мониторе источника питания не должно быть практически никакого потребления тока, о котором можно было бы говорить. Если есть значительный ток или источник питания переходит в режим ограничения тока, что-то пошло не так, и следует проверить плату, чтобы убедиться, что нет неправильно подключенных соединений или конденсаторов с обратной полярностью.

Следующим шагом является проверка правильной работы повышающего преобразователя. На плате есть винтовой потенциометр, при этом источник питания все еще подключен, а четыре контакта преобразователя подключены надлежащим образом, потенциометр следует поворачивать с помощью небольшой отвертки, пока напряжение на выходе модуля не станет примерно от 3,8 до 3,9 вольт. Это значение постоянного тока не изменится во время работы, ядро драйвера будет управлять средним выходным напряжением, подавая импульс на вывод выключения модуля.

Шаг 8: Тестирование, часть 2

Тестирование, часть 2
Тестирование, часть 2
Тестирование, часть 2
Тестирование, часть 2

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

Это помогает немного подзарядить аккумулятор для окончательного полного теста. Для этого также можно использовать стендовый источник питания с ограничением тока, установленным примерно на 50 мА, и напряжением по-прежнему на уровне 3,8 В, оставляя LiPo-батарею подключенной напрямую на несколько минут.

Последний шаг - протестировать всю систему - со всем подключенным, если панель закрыта на десять или 15 секунд, свет должен загореться через выход PWM ядра драйвера. Если панель освещена ярким солнечным светом, аккумулятор должен заряжаться от выхода повышающего преобразователя. Сеть с нечеткой логикой можно косвенно проверить, чтобы увидеть, правильно ли она работает, посмотрев на линию ШИМ, управляющую выводом выключения повышающего преобразователя; по мере того, как освещение увеличивается с аккумулятором с низким уровнем заряда, ширина импульса должна увеличиваться, показывая, что по мере того, как больше энергии становится доступной от солнечного света, ядро драйвера сигнализирует о том, что в батарею должно быть отправлено больше энергии!

Шаг 9: Приложение по нечеткой логике

Приложение по нечеткой логике
Приложение по нечеткой логике

Нечеткая логика - это метод машинного обучения, который можно использовать для управления аппаратными системами, в которых существует неопределенность во многих параметрах управляемой системы, из-за чего явный вход для решения управления выходом для цели трудно записать математически. Это достигается за счет использования логических значений, которые находятся где-то между 0 (ложь) и 1 (истина), выражая неопределенность в значении, более похожую на то, как это сделал бы человек («в основном верно» или «не совсем верно»), и допуская серую зону. между утверждениями, которые на 100% верны и на 100% ложны. Для этого сначала отбираются образцы входных переменных, на которых должно основываться решение, и «фаззифицируются» их.

Сердце любой системы нечеткой логики - это «нечеткая ассоциативная память». Это напоминает матрицу, где в случае схемы зарядки аккумулятора сохраняется набор 3x3 значений в диапазоне от 0 до 1. Значения в матрице могут быть примерно связаны с тем, как человек будет рассуждать о том, каким должен быть фактор ШИМ, управляющий выводом SHTDN повышающего преобразователя, в зависимости от того, как функция принадлежности выше квалифицирует данный набор входов. Например, если входное напряжение панели высокое, но ток, потребляемый батареей, низкий, это, вероятно, означает, что можно потреблять больше энергии, а настройка ШИМ не оптимальна и должна быть увеличена. И наоборот, если напряжение на панели падает, но зарядное устройство все еще пытается протолкнуть большой ток в батарею, энергия также будет потрачена впустую, поэтому было бы лучше уменьшить сигнал ШИМ на повышающем преобразователе. После того, как входные сигналы «размыты» в нечеткое множество, они умножаются на эти значения, аналогично тому, как вектор умножается на матрицу, чтобы сгенерировать преобразованный набор, который представляет, насколько сильно «знания» содержат ячейку. матрицы должны быть учтены в окончательной функции комбинирования.

Использование узла «не реализовано в xod», который позволяет узлам XOD, которые реализуют настраиваемые функции, слишком сложные, чтобы их можно было сделать из стандартных строительных блоков, и небольшой C ++ в стиле Arduino, ассоциативная память, функция взвешивания и fuzzifier », аналогичные блокам, описанным в этой ссылке: https://www.drdobbs.com/cpp/fuzzy-logic-in-c/184408940, просто сделать, и с ними намного проще экспериментировать.

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