Съдържание:

Акумулаторна слънчева лампа, захранвана с XOD: 9 стъпки (със снимки)
Акумулаторна слънчева лампа, захранвана с XOD: 9 стъпки (със снимки)

Видео: Акумулаторна слънчева лампа, захранвана с XOD: 9 стъпки (със снимки)

Видео: Акумулаторна слънчева лампа, захранвана с XOD: 9 стъпки (със снимки)
Видео: Elon Musk: The future we're building -- and boring | TED 2024, Ноември
Anonim
Акумулаторна слънчева лампа с XOD захранване
Акумулаторна слънчева лампа с XOD захранване

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

Това е моят опит да проектирам модул за осветление извън мрежата, който е значително подобрение, като същевременно е сравнително евтин за изработка. Като му дадете малко "мозък". XOD.io е нова IDE, съвместима с вградената платформа за разработка Arduino, където можете да "пишете" код графично. Средата трансформира вашата графична скица в съвременен C ++, който е изключително ефективен при генериране на компактен код и генерира източник, напълно съвместим със стандартната Arduino IDE, без да изисква допълнителни външни зависимости. По този начин дори малки, евтини микроконтролери с ограничени програми и ресурси за съхранение на данни могат да бъдат използвани за поемане на сложни задачи.

Този проект показва как два съвместими с Arduino микроконтролера ATTiny85 могат да бъдат използвани за управление на изискванията за мощност на лампата. Първият процесор обработва сензорни данни за околната среда от външния хардуер, а вторият се опитва да събере възможно най-много енергия от слънцето през деня и след това контролира осветяването на светодиод с висока мощност, когато акумулаторната батерия се разрежда през нощта. Вторият процесор изпълнява работата си чрез компактна реализация на управление с „размита логика“. Софтуерът за двата чипа е разработен изключително в XOD средата.

Стъпка 1: Необходими материали

Arduino IDE, най -новата версия, с разширение ATTinyCore, инсталирано от мениджъра "Табла"

Sparkfun USBTinyISP ATTiny програмист, 11801 или еквивалентна страница на продукта на Sparkfun

Регулируем усилвател с ниско напрежение Pololu с вход за изключване, U1V11A или еквивалентна страница на продукта Pololu

Бял или RGB светодиод с висока мощност с радиатор, общ анод, Adafruit 2524 или еквивалентна страница с продукти на Adafruit

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

8 -пинов DIP IC гнездо, 2

Кондензатор за насипно съхранение, 16 v 220 uF

Изходен кондензатор, 6.3v 47uF

Резистори за ограничаване на тока, 50 ома 1/4 вата

i2c издърпващи се резистори, 4.7k, 2

Резистори с разделител на напрежение на панела, 1/4 вата, 100k, 470k

Токов резистор, 10 ома ½ ват 1% толеранс

Байпасен кондензатор, 0.1uF керамичен, 2

2 3,7 v 100mAh литиево-йонна акумулаторна батерия, PKCELL LP401 или еквивалентна

Входящ жак за щепсел на цевта за панел, 1

Мини терминални блокове 3”x3” дъска за спойка и тънък жила с твърда жила за свързване

Почти сигурно ще са необходими осцилоскоп, мултицет и пейка за тестване

Стъпка 2: Настройка на околната среда

Настройка на околната среда
Настройка на околната среда

Средата XOD не поддържа готовите процесори от серията ATTiny, но с помощта на няколко библиотеки на трети страни от вселената Arduino е лесно да се добави поддръжка за тази серия AVR. Първата стъпка е да инсталирате библиотеката „ATTinyCore“от падащото меню „Инструменти → Board → Board Manager“на Arduino IDE. Уверете се, че настройките, както е показано на включеното изображение, са правилни - не забравяйте, че трябва да натиснете "Burn bootloader", за да промените предпазителите за настройка на напрежението и тактовата честота, преди да качите какъвто и да е код!

Изходният код за тази библиотека е достъпен на:

Друга полезна библиотека, която трябва да имате от хранилището, е “FixedPoints”, която е реализация по време на компилация на математика с фиксирани точки за поддържани от Arduino процесори. ATTiny има ограничена SRAM и програмна памет и много помага при свиване на крайния размер на скицата, за да се използва 2 -байтово цяло число за общо съхранение на данни, а не тип с плаваща запетая, което изисква 4 байта на AVR. Скоростта на изпълнение също трябва да бъде подобрена, тъй като ATTiny няма хардуерно устройство за умножение, още по-малко хардуерна плаваща запетая!

Изходният код е достъпен на:

Урокът за това как да създавате, транспилирате и разгръщате XOD графични скици на адрес: https://github.com/Pharap/FixedPointsArduino ще помогне много за разбирането как са създадени включените изходни файлове.

Стъпка 3: Преглед на дизайна

Преглед на дизайна
Преглед на дизайна
Преглед на дизайна
Преглед на дизайна

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

Ускоряващият преобразувател е модул на базата на базата на Texas Instruments TPS6120 IC, който може да поеме входно напрежение до 0,5 волта и да го повиши до 2 волта до 5 волта. Ядрото на сензора се състои от няколко функционални блока. Главният часовник започва да работи веднага щом се подаде захранване към усилвателния преобразувател от входа на слънчевия панел. Това стартира изпълнението на скицата и първото нещо е да се определи дали панелът е достатъчно осветен, за да осигури ток на зареждане на батерията.

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

Второто ядро на ATTiny изпълнява LED контролера и системата за мониторинг на зареждането на батерията. Данните за напрежението на панела, напрежението на батерията и тока на зареждане на батерията се изпращат към това ядро за обработка чрез мрежа с размита логика, която се опитва да генерира подходящ PWM сигнал, който да се приложи към щифта SHTDN, като по този начин се контролира количеството ток, изпратен към батерията да го зарежда, когато свети-основна форма за проследяване на максималната мощност (MPPT.) Той също така получава сигнал от ядрото на сензора, който му казва дали трябва да включва или изключва светодиода, в зависимост от изхода на деня на ядрото на сензора/ нощно джапанка.

Когато светодиодът е активен през нощта, този ATTiny следи данните за напрежението на батерията, изпратени до него от приятеля си, и собствения му вграден сензор за температура, за да получи приблизителна оценка за това колко мощност се вкарва в светодиода (напрежението на батерията намалява и температурата на чипа се увеличава с тока, изтеглен от щифтовете му.) Мрежата с размита логика, свързана с LED PWM пластира, се опитва да прецени колко енергия на батерията все още е налична и да намали интензитета на светодиода, когато батерията се изтощи.

Стъпка 4: Създаване на персонализирани корекции от XOD Core Library

Създаване на персонализирани корекции от основната библиотека на XOD
Създаване на персонализирани корекции от основната библиотека на XOD
Създаване на персонализирани корекции от основната библиотека на XOD
Създаване на персонализирани корекции от основната библиотека на XOD

Няколко персонализирани кръпка възли бяха използвани за този дизайн, някои от които могат лесно да бъдат конструирани изцяло от включени XOD възли, а други, които бяха внедрени в C ++.

Първият от двата персонализирани кръпка възела в снимките е реализация на експоненциален филтър с плъзгаща средна. Това е нискочестотен цифров филтър с ниски режими, използван последователно в скицата, веднъж за филтриране на входящото напрежение на слънчевия панел за логическото ядро и още веднъж за захранване на спусъка, който определя дългосрочното осветление на околната среда. Вижте статията в Уикипедия за експоненциално изглаждане.

Структурата на възела в изображението е просто директно графично представяне на трансферната функция в статията, свързана заедно с помощта на връзки от съответните входове към изходи. От библиотеката има възел за отлагане, който позволява да се създаде контур за обратна връзка (XOD ще ви предупреди, ако създадете контур за обратна връзка, без да вмъквате забавяне в цикъла, както е описано в модела за изпълнение на XOD.) С този детайл се грижи за patch работи добре, това е просто.

Вторият персонализиран кръпка възел е вариация на флип флопа, включен в XOD, който се захранва с филтрираното напрежение на панела. Той се фиксира високо или ниско в зависимост от това дали входният сигнал е над или под определен праг. Прехвърлящите възли се използват за преобразуване на булевите изходни стойности към импулсния тип данни за задействане на джапанката, тъй като състоянието преминава от ниско към високо. Надяваме се, че дизайнът на този кръпка възел ще бъде донякъде разбираем от екранната снимка.

Стъпка 5: Създаване на персонализирани кръпки с помощта на C ++

Създаване на персонализирани кръпки с помощта на C ++
Създаване на персонализирани кръпки с помощта на C ++

За специални изисквания, при които необходимата функционалност на възела би била твърде сложна, за да се изобразява лесно графично, или които разчитат на библиотеки на Arduino, които не са местни за стоковата среда Arduino, XOD улеснява онези с някои познания в C/C ++ да пишат парчета с размер на хапка код, който след това може да бъде интегриран в кръпка, както всеки друг създаден от потребителя или възлов възел. Избирането на „създаване на нова корекция“от менюто на файла създава празен лист, с който да се работи, а входните и изходните възли могат да бъдат плъзгани от секцията „възли“на основната библиотека. След това възелът "not-Implement-in-xod" може да бъде плъзнат и при щракване той ще изведе текстов редактор, където необходимата функционалност може да бъде внедрена в C ++. Как се борави с вътрешното състояние и как се осъществява достъп до входните и изходните портове от C ++ кода е описано тук.

Като пример за внедряване на персонализирани корекции в C ++, две допълнителни персонализирани корекции за ядрото на драйвера се използват за изготвяне на оценка на захранващото напрежение и температурата на ядрото на драйвера. Заедно със своята размита мрежа това позволява груба оценка на оставащата мощност на батерията, която е на разположение за захранване на светодиодите, когато е тъмно.

Пластирът на температурния сензор също се захранва с изхода на сензора за захранващо напрежение, за да се получи по -добра оценка - измерването на температурата на сърцевината ни позволява да получим приблизителна оценка на това колко енергия се изгаря в светодиодите и се комбинира с отчитането на захранващото напрежение, когато изчерпване на батерията допълнителна груба оценка за това колко енергия на батерията остава. Не е задължително да е супер точен; ако ядрото „знае“, че светодиодите черпят много ток, но напрежението на батерията бързо пада, вероятно е безопасно да се каже, че захранването на батерията няма да издържи много по -дълго и е време да изключите лампата.

Стъпка 6: Строителство

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

Изградих проекта върху малко парче прототипираща дъска с медни подложки за части с отвори. Използването на гнезда за интегралните схеми помага много за програмиране/модификация/тестване; USBTiny ISP от Sparkfun има подобен гнездо на дъската си, така че програмирането на двата чипа се състои само от включване на програмиста в USB порт на компютър, качване на транслирания XOD код от включените файлове Arduino.ino със съответните настройки на платката и програмиста и след това внимателно извадете чиповете от гнездото на програмиста и ги поставете в гнездата на протоборда.

Модулът за усилващ преобразувател, базиран на Pololu TPS6120, се предлага на щранг, споен в протоборда върху щифтове, така че е възможно да се спести място чрез монтиране на някои компоненти отдолу. На моя прототип поставих двата резистора с издърпване 4.7k отдолу. Те са необходими за правилната работа на i2c шината между чиповете - комуникацията няма да работи както трябва без тях! От дясната страна на платката е входният жак за щепсела на слънчевия панел и входния кондензатор за съхранение. Най -добре е да се опитате да свържете жака и тази капачка директно заедно чрез "проходи" от спойка, а не за свързващ проводник, за да получите възможно най -ниско съпротивление. Изпълненията на твърдо спойка след това се използват за свързване на положителния извод на кондензатора за съхранение директно към клемата на входното напрежение на усилващия модул и заземяващия щифт на усилвателния модул директно към заземяващия щифт на жака.

Отдясно и отляво на гнездата за двата ATTinys са кондензатори за изсмукване/отстраняване на глюк 0.1uF. Тези компоненти също са важни да не се изоставят и трябва да бъдат свързани към захранващите и заземяващите щифтове на ИС чрез възможно най -кратък и директен път. Резисторът за ток от 10 ома е вляво, той е свързан в съответствие с изхода от усилвателния преобразувател и всяка страна е свързана към входния щифт на ядрото на сензора - тези щифтове са настроени да работят като диференциален ADC за непряко измерване на ток в батерията. Връзките между IC пиновете за шината i2c и щифта за спиране на усилвателния преобразувател и т.н. могат да бъдат направени с помощта на свързващ проводник от долната страна на протоборда, много тънкият твърд жичен свързващ проводник работи чудесно за това. Това прави промените по -лесни и също така изглежда много по -спретнато от пускането на джъмпери между отвори на върха.

LED модулът, който използвах, беше трицветен RGB модул, планът ми беше да има и трите активни светодиода, които да произвеждат бяло, когато батерията е почти напълно заредена, и бавно да избледняват синия светодиод в жълто, тъй като зарядът се изтощава. Но тази функция все още не е внедрена. Един бял светодиод с един резистор за ограничаване на тока също ще работи добре.

Стъпка 7: Тестване, част 1

Тестване, част 1
Тестване, част 1

След програмиране на двете ATTiny интегрални схеми с включените файлове с скици чрез USB програмист от средата Arduino, това помага да се провери дали двете ядра на прототипа функционират правилно, преди да се опитате да заредите батерията от слънчевия панел. В идеалния случай това изисква основно осцилоскоп, мултицет и пейка.

Първото нещо, което трябва да проверите, е, че няма къси съединения навсякъде по платката, преди да включите интегралните схеми, батерията и панела в техните гнезда, за да избегнете евентуални повреди! Най -лесният начин да направите това е да използвате настолно захранване, което може да ограничи изходния си ток до безопасна стойност в този случай. Използвах моето захранващо устройство, зададено на 3 волта и ограничение от 100 mA, свързано към клемите на входния жак на соларния панел към положителните и отрицателните захранващи проводници. С нищо друго освен инсталирани пасивни компоненти, по същество не трябва да се регистрира текущо потребление на текущия монитор на захранването. Ако има значителен токов поток или захранването преминава в ограничаващо тока, нещо се е объркало и платката трябва да бъде проверена, за да се увери, че няма неправилно свързани кабели или кондензатори с обърната полярност.

Следващата стъпка е да се уверите, че усилващият преобразувател работи правилно. На платката има винтови потенциометър, с захранването все още свързано и четири от щифтовете на преобразувателя, свързани правилно, потенциометърът трябва да се завърти с малък връх на отвертката, докато напрежението на изходния извод на модула отчете около 3,8 до 3,9 волта. Тази DC стойност няма да се промени по време на работа, ядрото на драйвера ще контролира средното изходно напрежение чрез пулсиране на изключващия щифт на модула.

Стъпка 8: Тестване, част 2

Тестване, част 2
Тестване, част 2
Тестване, част 2
Тестване, част 2

Следващото нещо, което трябва да проверите, е, че i2c комуникацията работи нормално, при платка, която се захранва от пейката, може да се инсталира IC на ядрото на сензора. На осцилоскоп трябва да има пулсиращи сигнали както на щифт 5, така и на пин 7 на физическия чип, този i2c драйвер на чипа се опитва да изпрати данни до приятеля си. След изключване на ядрото на драйвера може да се инсталира и връзката да се провери отново с осцилоскоп, трябва да има по -голяма последователност от импулси, видими по двете линии. Това означава, че чиповете комуникират правилно.

Помага за леко зареждане на батерията за последния пълен тест. За да се постигне това, може да се използва и пейка, като границата на тока е зададена на около 50 mA и напрежението все още е на 3,8 волта, оставяйки LiPo батерията свързана директно за няколко минути.

Последната стъпка е да се тества цялата система - с всичко свързано, ако панелът е покрит за десет или 15 секунди, светлината трябва да светне, задвижвана чрез PWM изхода на ядрото на драйвера. Когато панелът е на ярка слънчева светлина, батерията трябва да се зарежда от изхода на усилвателния преобразувател. Мрежата с размита логика може да бъде индиректно инспектирана, за да се види дали работи правилно, като се погледне PWM линията, управляваща щифта за изключване на усилвателния преобразувател; тъй като осветлението се увеличава с батерията с ниско състояние на зареждане, ширината на импулса трябва да се увеличи, което показва, че с увеличаването на мощността от слънчевата светлина, ядрото на водача сигнализира, че трябва да се изпрати повече енергия в батерията!

Стъпка 9: Приложение към размитата логика

Приложение за размита логика
Приложение за размита логика

Размитата логика е техника за машинно обучение, която може да се използва при управлението на хардуерни системи, където има несигурност в много от параметрите на системата, която се контролира, което прави изричен вход за извеждане на решение за управление за целта, която е трудно да се запише математически. Това се постига чрез използване на логически стойности, които попадат някъде между 0 (невярно) и 1 (вярно), изразяване на несигурност в стойност, по -скоро подобна на начина, по който би постъпил човек („предимно вярно“или „не наистина вярно“) и позволяване на сива зона между твърдения, които са 100% верни и 100% невярни. Начинът, по който това се постига, е чрез първо вземане на проби от входните променливи, на които трябва да се основава решение, и тяхното „размиване“.

Сърцето на всяка система с размита логика е „размита асоциативна памет“. Това напомня на матрица, където в случай на верига за зареждане на батерията се съхранява набор от 3x3 стойности, вариращи между 0 и 1. Стойностите в матрицата могат грубо да се свържат с това как човек би разсъждавал какъв трябва да бъде PWM фактор, контролиращ SHTDN щифта на усилвателния преобразувател, в зависимост от това как функцията за членство по -горе квалифицира даден набор от входове. Например, ако входното напрежение на панела е високо, но токът, който се вкарва в батерията, е нисък, това вероятно означава, че може да се използва повече мощност и настройката на ШИМ не е оптимална и трябва да се увеличи. И обратното, ако напрежението на панела се понижи, но зарядното устройство все още се опитва да изтласка голям ток в захранването на батерията, също ще бъде изхабено, така че би било най -добре да намалите PWM сигнала до усилвателния преобразувател. След като входните сигнали са „размити“в размито множество, те се умножават по тези стойности, подобно на начина, по който векторът се умножава по матрица, за да се генерира трансформиран набор, който е представителен за това колко силно клетката „знания“съдържа на матрицата трябва да бъде включена във функцията за последна комбинация.

Използване на възела „не-внедрено-в-xod“, който позволява XOD възли, които изпълняват персонализирана функционалност, твърде сложна, за да бъде разумна за изработка от съставните блокове, и малко C ++ в стил Arduino, асоциативната памет, функцията за претегляне и " fuzzifier ", подобни на блоковете, описани в тази справка: https://www.drdobbs.com/cpp/fuzzy-logic-in-c/184408940 са лесни за правене и много по-лесни за експериментиране.

Препоръчано: