Стабилизатор на мрежово напрежение,
управляван с Arduino

    I. Увод:

    Аз направих цяла серия експерименти на стабилизатори за мрежово напрежение, управлявани с компаратори. Те представяха аналоговия тип регулатори на напрежение. В статията си "Конструктивни особености" засегнах смесения цифрово-аналогов тип на управление, което представих с една от схемите на руския радиолюбител Виталий Кравцов. Разбира се, тя не е единствената, която можем да намерим в интернет пространството. По-важното е, че чрез добавяне на детектор на преминаване през нулата на променливото напрежение, който управлява изхода на цифровите схеми се постига превключване на релетата само в това състояние. Превключването им по време на преминаване на фазата през нулата е голямо предимство. То позволява почти пълно потушаване на искренето на контактите, с което значително се увеличава техния живот. В моите стабилизатори това потушаване се извършваше с искрогасяща R-C група.

    Така, докато правех моите експерименти на тази тема, с всеки нов такъв, се убеждавах, че най-правилния метод за потушаване на искренето на контактите е превключване на релетата в момента на преминаване на фазата на променливото напрежение през нулата, тоест включването на нулев детектор, както по-често е известен.

    Още миналата година се заговорихме с колегата Веско Георгиев за широкото приложение на развойната платка Arduino Uno. Но някак си остана само разговор. Признавам си тази развойна среда изобщо не ми беше известна, освен като понятие. Този разговор, все пак, ме заинтригува и все по-често когато си поръчвах части от китайски сайтове, в очите ми се набиваше Arduino Uno R3 в различни форми и конфигурации, а в началото на тази година започнах все по-често да чета описание на Arduino средата.

    През февруари Веско публикува своите успешни експерименти с Arduino за PLL управление на FM радиоприемник. Така отново възобновихме темата на нашите разговори и за няма седмица-две изчетох почти всичко, което намерих в интернет. Разбира се твърде хаотично. Но Веско вече беше преминал по този път и се оказа добър методолог. Започна да ми дава съвети като: "Прочети това...", "Запознай се с онова ... ". И така докато един ден преди месец просто си купих един малък комплект (кит) с Arduino. В него имаше куп ненужни чаркове като резистори, светодиоди, датчици ... и изобщо нещица, които си имах в домашната "лаборатория".

    Но най-важното е НЕ излишъка от части, а наличието на ентусиазъм. Докато след броени дни Веско ми "запали фитила": "Защо не направиш стабилизатора с Arduino?"

    Ето така се започна:

    II. Въведение към идеята:

    Както казах по-горе, идеята възникна преди около месец. След като получих кита с платката, започнах трескаво обмисляне на блоковата схема и основните команди, които трябваше да се осъществяват от микропроцесора за да се управляват релейните контакти. Основната идея беше да се надгради вече създаденото, да се включи микропроцесорно управление с много по-богати възможности, превключване на контактите по време на детектиране на преминаване на фазата през нулата и един куп други възможности, които позволява Arduino, например вътрешен таймер, или дисплей, или даже волтметър, а защо не и волтметър, че дори два волтметъра.

    Тази идея може да се представи със следната опростена блокова схема:

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

    Основните блокове в тази схема са отделени за да покажат възможността им да работят поотделно. Така например трансформаторът с показаните превключватели може да бъде пуснат самостоятелно за да измерим необходимите напрежения, платката Arduino може да бъде захранено от собственото й захранване или през USB кабела за връзка с компютъра за да я програмираме, релейния блок също. От друга страна, всеки блок може да монтиран на отделна печатна платка.

    Красотата на Arduino се състои в това, че програмираш една функция днес и си лягаш да спиш, утре продължаваш с друга функция и т.н. Всеки ден, когато имаш възможност, добавяш нови и нови функции. Можеш да изпробваш всеки програмен блок поотделно, или код по код. Програмната среда позволява проверка на програмния код и сигнализира при грешки. Това не означава, че устройството, което конструирате непременно ще заработи, защото най-важно е идеята ви да сработи, а това се случва само, когато е обмислена добре.

    Признавам си, не съм програмирал, макар и да съм учил програмиране. Запознат съм с логическите функции от разработките на устройства с цифрови интегрални схеми. Но когато Веско ми каза, че трябва да се запозная с Булевата алгебра, изведнъж ми се видя много сложно. Казах си: хайде сега, отново трябва да се учи нещо ново, за какво си дадох парите за нещо, което не разбирам ... Но моето поколение е възпитано да не се отказва. Човек започва да си спомня някои любими книжки с уроци, като: "Радиотехниката ли, че то е много просто?", мотивира се от новото предизвикателство и започва без колебание.

    III. Подготовка на експеримента:

    Мда-а-а... С една блокова схема и една платка Arduino – направо нищо работа. Оказа се, че разработчиците на Arduino са предвидили различни модули от датчици и крайни устройства, които се свързват с платката Arduino и могат да бъдат закупени допълнително. Поразтърсих се и намерих така наречения "Arduino Relay Shield". Релейните блокове са в различни конфигурации, например с едно, две, четири или осем релета, със и без джъмпери за 5V или 12V, с оптоизолация или без такава, но най-важното с какъв сигнал се управляват – с положителен или отрицателен. За повечето фабрични модули, производителят е съобразил дори цвета на платката, който е червен в първия случай или син във втория. На следващата снимка съм показал един релеен блок с четири релета, захранващи се с 5V и управлявани с положителен импулс от изходите на платката Arduino:

    Закупих един такъв "Arduino Four Relay’s Shield", модул с четири релета с напрежение на захранването 5V, който беше достатъчен за превключване на три волтодобавъчни намотки на мрежовия трансформатор и обръщане на посоката на волтодобавката за да може стабилизаторът да работи както при намаляване, така и при увеличаване на напрежението. Модулът има всички изводи (pin-ове) за свързване към платката.

    За да осигуря времезакъснение през което да се установи системата отново предвидих такова реле, което също закупих като готов модул. Но-о-о-о със синя платка, тоест управлява се с отрицателен импулс. Но ето още НО – ами нали ще програмирам, какво значение има полярността на импулса? А ето как изглежда правилното реле:

    За да осигуря и други функции на бъдещия стабилизатор ми бяха необходими още модули. Но някой да не си помисли, че ще си остана с купените модули? Няма начин, те консумират близо 0.5А ток при напрежение 5V, който очевидно трябва да се осигури от външен източник. Така, че ще се наложи в процеса на конструиране да изработя свои модули с релета за 12 или 24 волта. И ако във всички предишни конструкции използвах различни схемни решения за време-релета с отложен старт, включително с транзистори, компаратори или интегралния таймер NE555, с Arduino тази функция просто може да бъде програмирана, а релето да бъде един изпълнителен механизъм.

    За да постигнем голяма точност на превключването на релетата при преминаване на фазата през нулата, трябва да имаме предвид тяхното бързодействие – скоростта с която механиката превключва контактите след подаване на управляващия импулс от платката. Трябва да се съобразим с честотата и периода на мрежовото захранване. За България, честотата е 50 Hz, а периода съответно 20 ms. Тази стойност означава за нас червена сигнална лампичка, с която ще трябва да се съобразяваме. Релетата трябва да имат много високо бързодействие, например около и не повече от 5 ms. Това условие е твърде силно, но ако не го изпълним се губи смисъла от цялата разработка. Другият начин е отново с предварително предвиждане и едно просто програмиране – ако знаем, че закъснението на релетата е примерно 8 ms, просто ги пускаме с 8 ms по-рано или да програмираме таймера през 10 ms.

    Използването на бредборд за осъществяване на електрическите връзки между различните блокове, отделните елементи и платката Arduino доставя дори удоволствие, стига да имаме необходимия брой и тип свързващи кабели. Но ако нямаме, ще си купим. Размерът на бредборда се определя от броя на гнездата и изборът на на големината е според проекта, броя на елементите, които ще поддържа. Аз избрах Breadbord 840. Но ето как изглеждат:

    Моят избор беше предопределен от идеите ми за осъществяване на проекти и по-големите възможности, които позволява този бредборд. Разбира се, бредборд без спомагателни кабели не служи за нищо. Кабелите са различни размери по дължина и с различни краища, например мъжки-мъжки, женски-мъжки или женски-женски. За моите цели първите два типа бяха достатъчни:

    IV. Същност на идеята:

    След като събрах модулите и спомагателните материали, без които нито един проект не може да стане, оставаха електронните компоненти, от които си имах достатъчно из кутийки и кутийчета и с най-различни стойности – резистори, кондензатори, потенциометри. Остана и сглобяването на "хардуера" върху бредборда.

    Но след толкова много думи, не казах, всъщност, каква е основната идея за осъществяване на експеримента. А тя е:

    Част от входното мрежово напрежение чрез трансформация се изправя и подава на аналогов вход А0 на Arduino. Това напрежение се променя пропорционално на входното, но за да удовлетворим техническите изисквания, би следвало то да бъде по-малко от 5V, каквото е максималното напрежение на аналоговите входове. А за да бъдем още по-сигурни, че няма да претоварим входа А0, го намаляваме още. Така за тази конструкция се оказа, че това стриктно условие се изпълнява като приложим коефициент на делене на входното мрежово напрежение. Като имаме предвид, че изправителят променя с 1,41 (√2) пъти променливото напрежение, то коефициентът е комбинация от 100 и 1,41, тоест 141 пъти. След това по вече известните ни прагове за превклюване на релетата (вижте статията ми "Стабилизатор на мрежово напрежение - Конструктивни особености") получаваме съответствията на входното напрежение към напреженията на входа А0:

    При стъпка ~170V, на входа А0 – 1,7V
    При стъпка ~190V, на входа А0 – 1,9V
    При стъпка ~210V, на входа А0 – 2,1V
    При стъпка ~230V, на входа А0 – 2,3V

    Имайки предвид възможностите на аналогово-цифровия преобразувател на Arduino, който определя съответствието на 1024 нива (0-1023) за максимално напрежение на вход А0 - 5V, можем да преизчислим за всяка от горните стойности нивата на АЦП. На всяко изчислено ниво задаваме команда за превключване на реле. В случая за три волтодобавки – три нива и едно за превишаване на напрежението. А сега погледнете блоковата схема в началото на статията и обърнете внимание на контактите S1, S2, и S3 – те са свързани последователно, като по този начин се извежда изходното напрежение от волтодобавъчния трансформатор, вече като изходно стабилизирано напрежение със стъпки през 20V. Всяко едно от релетата се задейства на точно определено ниво и превключва по едно волтодабавъчно напрежение от 20V.


    V. Описание на експеримента:

    Всичко описано в предходната глава може да се симулира с един простичък експеримент, в който трансформатор не ни е необходим, като за целта ни трябват минимум елементи – потенциометър, с който ще променяме входното напрежение на аналоговия вход А0, резистор със стойност равна на стойността на потенциометъра така, че да получим коефициент на деление К=2, бредборд, кабели, четири релеен блок и други дреболии. Практически ще симулираме промяната на изправеното вторично напрежение от трансформатора, като използваме за целта потенциометъра. Чрез въртене на оста му подаваме на вход А0 различни напрежения между 0V и 2,5V, от захранването на Arduino платката. Ако правилно съм разчел коефициентите, то при коефициент на трансформация Ктр=100, то стойността 2,5 съответства на ~250V. Точността в този експеримент не е висока поради употребата на тривиални елементи, но ако все пак се насочим към елементи с точност +/-1% можем да разчитаме и на съответната точност на експеримента. В момента, обаче, по-важното е схемата да заработи за да изследваме нейния характер, да се уверим в правилността на идеята и на избора, който направихме. Точността, също така, зависи от точността на стабилизираното захранващо напрежение от 5V, тоест ако то е 5,05V или 4,97V, предварително изчислените и избрани параметри малко ще се отличават от практическите измервания. Логично е. При съотношение 5,05/5= 1,01 се променя стойността на придобитото напрежение на една стъпка на аналогово-цифровия преобразовател, което от своя страна ще промени прага на включване. Примерно, ако сме предвидили това да се случи при мрежово напрежение ~170V, поради тази грешка то ще се случи при приблизително ~172V. И обратно – при ~168V. Но това не е от съществено значение предвид на възможността в софтуера да се нанасят всякакви корекции по всяко време без да се отразява на неговата функционалност или да се притесняваме от хардуерна повреда. Това му е хубавото на Arduino.

    На следващата схема може да видите електрическото свързване на експерименталната установка, като всички връзки са направени върху бредборд:

    На тази принципна схема са отразени необходимите елементи и тяхното свързване. Забележете, че за разлика от блоковата схема, тук блока с релета е свързан към цифрови пинове 5, 4, 3 и 2 на Arduino. Пин 6 съм предвидил за релето на таймера за отложен старт, който на схемата е свободен. Чрез потенциометъра P1 на входа А0 се подава постоянно напрежение, което се променя от 0V до 2,5V, с което симулирам промяната на мрежовото напрежение. Не съм монтирал на бредборда филтровите кондензатори С1 и С2. Аз захранвам платката Arduino с външен източник и интегрален стабилизатор LM7805, с който осигурявам +5V. За този експеримент не е необходимо допълнително захранване за релейния модул, на който съм включил също към LM7805 като съм направил съответната връзка с кабелче от бредборда. Хубавото в употребата на бредборд е, че почти всички стандартни елементи могат да се монтират върху него. Затова интегралния стабилизатор LM7805 съм "нанизал" директно в него, както се вижда и на снимките.

    Ето вида на експерименталната конструкция:

    На последната снимка експерименталната платка е захранена през USB кабела от компютъра. А вдясно на бредборда се вижда стабилизатора LM7805 с монтиран радиатор.

    Силно препоръчвам използването на външен източник на захранване тъй като консумацията на ток при всички включени релета достига 400mA, твърде много за вградения стабилизатор на платката Arduino. Но за кратковременни включвания (2-3 минути) през USB кабела към Arduino за зареждане на софтуер това е възможно.

    Предварително бях изчислил, че на една стъпка на АЦП се асоциира напрежение 0.0048828V, тоест 4,8828mV. Припомням, че АЦП на аналоговите входове е с 1024 нива. За да не изпадам в подробности с обяснения на изчисленията които съм направил, ето стойностите на праговете на превключване спрямо напрежение +5V и 1024 нива:

    При мрежово напрежение ~170V – прагът на АЦП е 348 от 1024 нива
    При мрежово напрежение ~190V – прагът на АЦП е 389 от 1024 нива
    При мрежово напрежение ~210V – прагът на АЦП е 430 от 1024 нива
    При мрежово напрежение ~230V – прагът на АЦП е 471 от 1024 нива

    VI. Резултати от експеримента:

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

    Този експеримент беше опасен за здравето на конструкцията предвид на това, че не взех никакви мерки за обезопасяване и поставих бредборда с платката Arduino директно върху трансформатора. Разчитах на неговата фабрична изолация.

    Доколкото може да се вярва на точността на моя евтин китайски мултицет, при направените измервания се оказа, че:

    Реле_1 се включва при праг 1.71V
    Реле_2 се включва при праг 1.92V
    Реле_3 се включва при праг 2.13V
    Реле_4 се включва при праг 2.34V

    Очевидно е, че резултатите показват несъответствие с предварително изчислените стойности. Замислих се, търсейки причината, но изобщо не ми отне много време – просто преместих сондите на волтметъра на изхода на стабилизатора и измерих стойност на напрежението 5,05V-5,06V, докато изчисленията му бяха направени спрямо стойност точно +5,00V. Напрежението за една стъпка не е 0,0048828V, а преизчислено спрямо напрежението на стабилизатора 5,06V е придобило стойност – 0,0049414V. За ниски стойности на прага, каквато е за Реле_1, разликата е минимална, но за прага за Реле_4 тя вече е съществена. Някой може би ще каже: "е, хайде сега, само 30-40mV". Но нека не забравяме, че коефициента на трансформация е 100 пъти! Отнесено към мрежовото напрежение – 3V-4V. Корекция може да се направи по възможните два най-лесни за изпълнение начини: единият чрез промяна на делителя, а другият чрез промяна на предварително изчислените нива на АЦП и вместо 471, примерно се намалят на 465. Като че ли вторият начин е по-елегантен. Ето защо отново ще повторя, че Arduino дава много възможности. Само с няколко дописвания или поправки в програмния код и-и-и-и-и ... корекцията е налице:

    Или:

    VII. Добавяне на функция за синхронно превключване на релетата спрямо преминаване на фазата през нулата:

    До тук описах основната част, сърцето на проекта, осъществих хардуерното свързване на платката Arduino с другите модули и елементи, заредих програмния код и измерих съответствието на стойностите на напреженията на праговете за превключване на релетата.

    Както забелязвате, описания експеримент по нищо не се различава от принципа на действие на аналоговите стабилизатори, които вече съм разгледал. Голямата разлика е в прецизността и допълнителните възможности, които позволява Arduino.

    Една такава допълнителна възможност, която значително подобрява прецизността на стабилизатора е включването на допълнителна верига за детектиране на прехода през нулата, който ще съчетаем със старта на релетата за да осигурим тяхното синхронно превключване в момента на преминаване на фазата през нулата. Известен е като нулев детектор. Неговият изход ще изработва къси импулси в синхрон с пресичане на синусоидата през нулата, които ще подадем на един от цифровите пинове на Arduino. Това удобство се крие в софтуерната възможност цифровите пинове предварително да бъдат програмирани като "вход" или "изход", след което ни остава да обвържем този сигнал чрез програмен код, който ще изпълнява функция на съвпадение с моментите на превключване на релетата. Отново ми се иска да припомня, че това съвпадение е необходимо за да предпазим контактите на релетата от искрене, с което техния живот значително се увеличава и елиминираме необходимостта от свързване на R-C искрогасящи групи към контактите на всяко реле. По този начин значително се намалява количеството на необходимите допълнителни елементи.

    Със следващата опростена графика можем да придобием представа за "идеалния" процес, описан по-горе с две от релетата без да отчитаме времето за включване на релето:

    Зависимостта между Ui, "0" Crossing, Relay_1, Relay_2, Relay_3 и Relay_4 се описва в софтуерната среда на Arduino чрез подходящ код. Тази графика в смисъла си е "идеална". Но релетата са механична система, която има своето време на задействане. За целта всяко реле има още два параметъра: време на включване и време на изключване. Времето на включване в най-добрия случай на масово използваните релета е 5-15ms. Това показва, че ще трябва да направим сериозен избор на механични релета. Но бихме могли да си спестим този труд, ако използваме електронни релета, тип Solid State, при които времето на включване е микросекунди, тоест пренебрежимо малко. Използването на Solid State релета е изключително скъпо удоволствие и аз засега ще се въздържа от тях. Колкото до настоящия експеримент, това ще стане от значение в крайния етап, когато конструкцията придобие вид на завършено устройство.

    Така аз се концентрирах в използването на механични релета с обявено време на включване в техническата характеристика. Механиката е инерционна система, елемент с реакция, която предизвиква забавяне във времето. Остава да избера релета, чието време за включване е много близо до периода на полувълната.

    Но както казах няколко пъти, средата на Arduino позволява поправки и корекции във всеки един момент. Затова засега проблема "закъснение на реле" остава на заден план. С подходящо въвеждане на същото време на закъснение в програмния код, проблемът може да се елиминира.

    Сега е необходимо да изградим подходяща работеща схема на Нулев детектор, който ще изработва съответните импулси за синхронизация през интервал равен на полувълната, тоест 10ms. Защо 10ms, а не 20? Защото ще използвам двуполупериоден изправител, схема "Грец" и горната графика придобива следния вид:

    където Ui е подаденото на входа на Греца променливо напрежение, Uout е изправеното напрежение на изхода на Греца, а "0" X представя изработването на импулси с период 10ms на изхода на нулевия детектор. А ето с каква елементарна схемичка се решава този казус:

    Естествено, че има и много по-прецизни схеми на Нулеви детектори, но за този експеримент това не е от значение, тъй като основната ми задача е да програмирам логическата функция на синхронизиране на момента на превключване на релетата с импулса за преминаване на фазата през нулата на променливото напрежение. На показаната схема не е отбелязана стойността на входното променливо напрежение и стойността на ограничителния резистор, но примерно за мрежово напрежение Ui = ~220V, Rx = 120kΩ. Аз няма да използвам такива високи стойности, а някоя от вторичните намотки на трансформатора.

   При входно напрежение ~12V необходимия резистор е Rx = 2,2k. На следващата снимка се вижда характеристиката на този нулев детектор, като импулсите са през 10 ms.

    Разбира се, аз изпробвах и други принципни схеми, популярни в интернет пространството. Тъй като се спрях на горната, която е най-използвана с платка Arduino, другите няма да ги представям с техните схеми, които са видни от снимките по-долу.

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

    След като за "нула време" осъществих горните схеми на нулеви детектори, реших, че е най-добре да проверя с осцилоскопа функцията им. Би следвало на единия канал на осцилоскопа да включа променливото напрежение, а на втория изхода на нулевия детектор. Но използването на грец не позволява такова включване, поради шунтирането чрез масата на осцилоскопа на веригата. Тогава с няколко простички действия отстраних Греца и го заместих с един изправителен диод, като запазих входното напрежение:

    Получи се еднополупериоден изправител, но резултата от измерването стана видим, като втората снимка напълно го доказва:

    Сега оставаше функцията за синхронизация на превключване на релетата при преминаване на фазата през нулата да се програмира в скеча.

    Но преди това, искам да направя една забележка, а именно, че още с Rev.4 бях програмирал функцията на компаратора, която имаше следния вид:

    if (analogRead(A0)>=352) digitalWrite(Rel1, ON); - тоест ако входното напрежение на аналоговия вход е над определена стойност се включва Реле 1. Респективно:

    else if (analogRead(A0)<=344) digitalWrite(Rel1, OFF); - ако горното състояние не се случва, Реле 1 е изключено.

    Обвързването на четирите релета в цикъл с посочените състояния правят логическата част на управление на релеен стабилизатор за променливо напрежение с използване на волтодобавъчно напрежение. Със sketch_Stabilizer_220V_Rev.4 стабилизатор от този тип работи и се управлява.

    По трудната задача беше да накарам горните функции на софтуера да се съобразяват с тактовата честота на Нулевия детектор за да получа превключване на релетата при преминаване на фазата на мрежовото напрежение през нулата. Това може да се направи хардуерно с релеен блок, включващ допълнително цифрови схеми и нулев детектор или да се симулира чрез софтуера. Например, той може да се осъществи хардуерно с цифрови интегрални схеми CD4013 или CD4042 в комбинация с делител от вида на CD4020. Като пример мога да посоча принципната схема на Кравцов, която показах в статията си "Конструктивни особености". Делителят е необходим за да забави включването с около 200-300 ms.

    Но тръпката е в програмирането и след няколкодневно обмисляне на логическата функция на известния на всички "D" тригер взех справочника в ръка и внимателно разгледах зависимостта на изходния сигнал на D-тригера от такта (clock) и входните данни. Таблицата на състоянията има следния вид:

    С едно изречение функцията на този D-тригер може да се опише по следния начин: предния фронт на тактовия импулс (clock) прекарва съдържанието на входа на D-тригера към неговия изход, в противен случай – запазва предишното състояние. Аз използвах статуса от втори ред на Таблицата за състоянията, показана по-горе.

    Така се заех с програмиране на функцията на D-тригер. След 2-3 експеримента с кода, първо получих следната функционална зависимост, която при проверката на скеча изглеждаше перфектна:

    if(analogRead(A0)>=352) if(Sync, HIGH) digitalWrite(Rel1, ON);
    if(analogRead(A0)<=344) if(Sync, HIGH) digitalWrite(Rel1, OFF);

    След това обвързах с цикъл всички релета, пуснах "Провери", скеча премина без грешка и бързо свързах платката Arduino, заредих софтуера иииии – НИЩО! Оставих всичко да отлежи и както беше казвал Веско Георгиев, след малко размисъл можеше да продължа във всеки един момент. Но ето така дойде края на седмицата, която осигурява достатъчно време за размислъл и експерименти. Не се оказа трудно да получа правилния резултат. Просто е трябвало да съобразя, че главната и водещата функция за работата на D-тригера е тактовия импулс, а не входното съдържание на тригера. След няколко минути функцията придоби следния вид:

    if(val == HIGH && analogRead(A0)>=352) digitalWrite(Rel1, ON);
    if(val == HIGH && analogRead(A0)<=344) digitalWrite(Rel1, OFF);

    След това обвързах с цикъл четирите релета, проверих правилността на скеча и отново с трепет включих платката Arduino, заредих скеча и след половин минута резултатът беше на лице – проработи!

    Но за да бъда сигурен в софтуерната и практическата реализация, трябваше да го проверя. За целта разкачих цифровия вход на който подавах тактовите импулси, включих го към земя (минуса) и започнах да увеличавам и намалявам входното напрежение – на изхода на Arduino нямаше промяна на състоянията. Тоест, щом такта е в състояние "0" програмирания тригер наистина не прекарваше към изхода входното съдържание. Следващата проверка която направих беше да подам на същия цифров вход положително ниво, с което имитирах един такт. Схемата проработи. След кратко размишляване реших да добавя брояч, с който да забавя тактовите импулси, следователно да увелича кратно периода. Добавих CD4020 на чийто вход подадох тактовите импулси, а после включих последователно цифровия вход на Arduino (пропуснах да отбележа, че съм го наименовал Sync и съм предал първоначална стойност val=0). След което започнах да включвам такта към различен изход Q на тригера. Целта на тази проверка беше до толкова много да забавя процеса (възможностите на CD4020 позволяват 16384 пъти), че видимо релетата да започнат да се включват бавно, и мързеливо. От друга страна в серията статии на тази тема, аз споменах няколкократно, че в момента на включване на релетата се появява жужене на контактите, които в предишните конструкции избягвах като включвах електролитен кондензатор в базата на ключовия транзистор. Точно този кондензатор реших да избегна. И така след делене на 16 на изход Q4 на CD4020, периодът на такта придоби стойност 320 ms. При тази стойност релейният блок заработи безупречно.

    След като успешно завърших тази важна за управлението на релейния стабилизатор функция, реших да направя няколко козметични промени:

    а) смених подаването на външните импулси от Нулевия детектор от pin 13 на pin 2;
    б) освободеният pin 13 програмирах с цел индикатор за състояние готовност със светодиод.

    Сигурно някой би казал "ами защо просто светодиода не го свържеш с един резистор към захранването"? Защото съм програмирал всички функции да заработят след 4 секунди. Следователно ако светодиода беше свързан към захранването, той щеше да бъде индикатор за включено състояние, докато по този начин той стана индикатор за готовност на стабилизатора.

    VIII. Практическо измерване на резултатите:

    Всичко описано до тук беше с опитна постановка, имитираща реални условия. Следва да свържа платката Arduino с предварително подготвения за целта трансформатор 800VA с три волтодобавъчни намотки 22V+26V+32V, всяка разрешаваща ток 10А. Тъй като го бях поръчал като тороидален, това ми даваше възможност, ако се налага, да добавя допълнителни вторични намотки с необходими напрежения, каквото например е подаваното напрежение за следене на Аналоговия вход А0 на платката Arduino.

    Този трансформатор ми позволи да навия с достатъчно тънък проводник 3 навивки (0,6V / нав.), от които получих променливо напрежение 1.8V, а след изправяне със схема "Грец" напрежението добива стойност 2.5V. Точно тази стойност е необходимата, която трябва да се подаде на аналоговия вход. Ако има малки разлики, те могат да се компенсират чрез резистивен делител R1-R2, който може да се види в следващата обща принципна схема. Стойността на R1 трябва внимателно да се подбере, така че на входно мрежово напрежение 220V да съответства изправено напрежение 2,2V, подадено към вход А0. А за този експериментален тест на всичко направено до момента, аз поставих потенциометър 22kΩ. Напрежението върху потенциометъра (резистивния делител) представлява половината от максимално допустимото напрежение на аналоговите входове, според техническите спецификации на Arduino платката, захранвана с вътрешен стабилизатор на +5V. Затова ще го считаме за безопасно. Но ако искаме да се презапасим за да предпазим входа А0 от случайни пикове на напрежението, бихме могли да свържем ценеров диод D5 с Uz = 4,7V към горния край на резистора R2, а другия му край за маса. Следва общата принципна схема:

    И тук отново бих искал да обърна внимание на схемата на Нулевия детектор, която до момента показвах в два варианта, единия с еднополупериоден изправител, другия с двуполупериоден изправител по схема "Грец". В първия случай периода на тактовите импулси за синхронизация е 20 ms, а във втория е 10 ms. Разликата при двата е, че втората дава възможност в скеча да се програмира синхронизация както по предния, така и по задния фронт. Имайки предвид, че ширината на тактовия импулс е 1 ms, това малко забавяне е полезно за момента на включване на релетата, чието време на включване е 7-8 ms. Сумарно с това време се доближаваме до дължината на периода, с което почти постигаме идеалния случай на съвпадение и пълно премахване на искренето на контактите. Но в практиката идеален случай няма, а винаги има някакви отклонения. Е, ако имаше двуконтактни solid state релета всичко щеше да си дойде на мястото и в скеча нямаше да се програмира детектор на прехода през нулата, тъй като част от solid state релетата имат вграден детектор на нулата.

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

    Въпреки това трябва много да се внимава, по-специално аз и то на моята работна маса, осеяна с жички, отрязъци от проводници и един куп метални инструменти. От само себе си дойде идеята да разположа бредборда и релейния блок върху трансформатора, който използвах като много добра изолационна подложка. Предвид на голямата мощност на тороидалния трансформатор от който очаквах да осигури ток 10А във вторичните намотки, изводите му бяха доста дебели, диаметъра на свързващите проводници е 2.2 мм. Макар, че са еластични за този диаметър на проводника, все пак не чак толкова че да се рискува. Внимателно започнах свързването на намотките с Arduino конструкцията. Включително трябваше да направя връзки и между контактните групи на самите релета за да осъществя схемата им на свързване:

    Да, колеги, всички връзки са в "хвърчащ" обемен монтаж, което прави операцията рискова но точно в това е гъдела – конструкцията да заработи в т.н. "суров вид". На следващите снимки представям суровия вид на моята конструкция на стабилизатор за променливо напрежение от реле тип, управляван с Arduino:

    Остана свързването с латера. За индикация на напреженията на входа и изхода добавих два панелни волтметъра. Проверих отново всички връзки и преди да включа захранването, разкачих платката Arduino, след което включих мрежовото напрежение, и измерих основните напрежения, които се подават от трансформатора към основната част на конструкцията и Arduino. Както казах по-горе, бях заместил резистивния делител на вход А0 с потенциометър и при тази проверка, завъртях оста му до получаване на половината от напрежението, като предохранителна мярка. Точно тук пропуснах да измеря постоянното напрежение, което трябваше да се подаде към входа А0, но в процеса на свързване на всички отделни компоненти се сетих и за това. Оказа се, че пак нещо много дребно не съм съобразил. Бях казал, че променливото напрежение от 1.8 волта след изправяне с Грец-схема дава 2,5V и спрямо тази стойност бях изчислил всички ниво на симулираните от мене със скеч компаратори. Резистивния делител го товари и всъщност изправеното напрежение е 1,8V. Затова се наложи да преизчисля всички прагове наново и да направя нова версия на скеча. Но това са малки проблемчета, с които се сблъсках. Както и преди съм казвал, те се решават с желание.

    Но ето и крайния резултат от експеримента:

 Архив: arduino_mr_stb.zip [spl7,pcb][34kb];    stabilizer_220v_rev_9_and_if_milis.zip [ino][2kb]

    Разбира се, не мина без използване на потенциометъра, с който бях заместил резистивния делител за да мога да подам на вход А0 точно определеното от предварително изчисленото напрежение. Оказа се, че е много по-удобно и простичко тази елементарна донастройка да се извърши с потенциометъра вместо да загубя половин час в подбор на подходящи резистори. В такъв смисъл, единствената настройка е тази, при която поставя латера в положение, в което дава на изхода си променливо напрежение 210 волта, след което да настроя с потенциометъра стойността на подаваното напрежение към вход А0 спрямо предварително изчислената. С това настройките приключват и се изчерпват, а всички други прагове на програмираните компаратори автоматично придобиват техните напрежителни стойности (стига да няма грешка в изчисленията).

    При практическия тест установих малки разлики между изчислените стойности на праговете и измерените с мултиметъра. Първоначално помислих, че съм допуснал грешка в изчисленията, но се оказа се, че те са правилни. Замервайки стойността на напрежението на изхода на стабилизатора LM7805, установих, че съвсем не може да се разчита на неговата точност като източник на опорно напрежение, тъй като тя пряко зависи от товара, който в моя случай се променя динамично, т.е. не е постоянен. Всяко превключване на реле променя стойността на изходното напрежение от 5 волта, което от състояние на всички изключени до всички включени релета се променяше със 150mV, а това се отразяваше на точността на праговете. Имам предвид, че например прага за 1,9V се превключваше на 1,92V, а за 1,7V на 1,74V. От практическа гледна точка тези напрежения, конвертирани към мрежовото напрежение, водят до неточност на двата посочени прага с 4-6 волта. Едва ли това е от съществено значение, но след като съм се "заиграл" с възможностите, които открива програмирането на Arduino защо да не продължа с това?

    Както споменах в началото, най-голямата красота на Arduino е, че с няколко дребни промени в скеча тези малки разминавания могат да се поправят и елиминират. Така например, промених прага на Rel1 от 169 на 157, а прагът на Rel2 от 203 на 195:

    //за мрежово напрежение 170V - вторично 1,7V нивото за реле1 = 157
    //за мрежово напрежение 190V - вторично 1,9V нивото за реле2 = 195

    А цикълът за Rel1 придоби следните стойности:

    if(val == HIGH && analogRead (A0)>=162) digitalWrite (Rel1, ON); //включва Rel1

    След като направих тези промени, логично следващата стъпка беше да заредя новия скеч в Arduino платката и да тествам отново праговете. Останах доволен от постигнатия резултат – стойностите на праговете на напрежението съвпадаха: 170, 190, 210, 230 волта, с което тази част от проекта можеше да считам за приключена.

    С това възможностите, които позволява платката Arduino изобщо не се изчерпват, а новите идеи могат да бъдат осъществяване последователно и на по-късен етап.
 

     *** Допълнение:
 

    IX. Практическа реализация на релейния стабилизатор

    И така, като за начинаещ, началото беше добро. Завърших един немалък проект на стабилизатор на мрежово напрежение, управляван с Arduino, с което надскочих всички свои конструкции на тема "Стабилизатор за мрежово напрежение". Но всичко до тук беше разхвърляно на работния плот – на една страна тороид, на друга Arduino, на трета релейни модули, а на четвърта захранващи блокове (и много "жици", разбира се, без които нямаше да осъществя този "смел" проект). От снимките, които показах по-горе се вижда гората от проводници, по които тече ток както с ниски, така и с високи напрежения.

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

    Втората част от това занимание е оптимизацията на софтуера, но предвид на стадия ми на развитие - "начинаещ", ще оставя това занимание за по-нататък. Важното е, че скеча работи безупречно, а не толкова, че съм определил една величина по два пъти. От друга страна, тази забележка на колега и приятел е много ценна, тъй като се намалява обема на софтуера, респективно се намалява обема на използваната памет. Тоест, в последствие, бих могъл да добавям все нови и нови модули с дописване на скеча. Да, при такова бъдеще е очевидно, че в един момент поредната версия на скеча може и да не заработи поради липса на достатъчно капацитет на паметта. Разбира се в процеса на реализацията на експерименталната платка (върху бредборд) направих поредица от промени в скеча, за част от които споменах и в началото на статията. Но най-съществената промяна след която стабилизаторът заработи според предварителния замисъл беше от Rev.7 в следващ Rev.8.

    В Rev.9 промених начина на добавяне на закъснение (delay). Аз споменах, че в процеса на работата установих, че командата delay() установява закъснение като СПИРА изпълнението на цикъла "loop". Но това беше полезно до някъде. За да предпазя изхода на стабилизатора от неустановено напрежение се налагаше да включа още едно релейно стъпало, което да включваше изхода след известно време, което трябваше да следва включването на основната част на схемата. С много четене и експериментиране с "delay" разбрах, че съм тръгнал в погрешната посока. Така се ориентирах към използване на командата "millis()". Предимството на "millis" е в това, че тя не спира цикъла "loop", а недостатъка е, че скеча трябва да се прецизира предвид на това, че командата започва да брои от началото на последния цикъл. Това ми беше много неясно. А за да ми се изясни, единственият начин беше – ами направи го! Така и стана. Отново се порових в интернет за да видя как други са го правили преди мене, направих и експериментирах 5-6 скеча, докато най-сетне се спрях на т.н. "Single Shot Timer". Неговото действие е подобно на командата "PowerON Delay", която съм осъществявал в други мои конструкции с интегралния таймер NE555. А за нуждите на моята разработка, този скеч се вписваше идеално. Ето след тези интернет проучвания и тяхното експериментиране се появи последната версия на моя софтуер за управление на релеен стабилизатор с Arduino: "sketch_Stabilizer_220V_Rev.9_AND_if_milis.ino"

    Всичко направено до момента се представя със следната принципна схема:

    Казаното за използването на таймер, осъществен чрез "millis()" е отразено на принципната схема като командата е изведена на pin13. Това не е случайно, тъй като към него има вграден светодиод на платката Arduino UNO R3, което аз използвам, а по време на експериментите не беше необходимо да свързвам допълнително реле. Светодиодът служеше за индикация. Едва в края на експериментите ми с команда "millis()" за да направя експериментална платка с бредборд в завършен вид, добавих релето, чиито контакти включваха изходното напрежение след няколко секунди. От друга страна предвидих на печатната платка извеждане на светодиод, включван от pin13 и служещ за индикатор за наличие на изходно стабилизирано напрежение. С няколко дописани реда в скеча, вече мога да включа каквито си искам индикатори. Например: индикатор за ниско напрежение (под 155V) или индикатор за пренапрежение (над 255V), индикатор за нормално напрежение (220V +/-10V), или зумер за звукова сигнализация, волтметри, или LCD16х2 и т.н.


    X. Добавяне на волтметри с LCD 16x2

    На снимките на работещата тестова установка, реализирана върху бредборд, се виждат двата панелни волтметъра, които свързах към входа и изхода на стабилизатора. Те също са отделни модули, каквито са и релейния блок и трансформатора. Но "гъдела" се състои в това да използваме повече от възможностите на развойната платка Arduino. И защо, не? Така реших да заменя модулните панелни волтметри с LCD 16x2, за който в библиотеките към програмната среда на Arduino има готов код. Да, но готовия код не решава идеята веднага с използването му, все пак той е примерен и трябва да се преобразува към конкретната конструкция, в случая към изграждания стабилизатор. Дисплея позволява отразяване на графично-цифрова информация на два реда по шестнайсет знака, включително паузите. Трябваше да се съобразя с това ограничение. Примерът, даден с вградената библиотека, не покрива моите изисквания и трябваше да го преработя, така че на първия ред на дисплея да се изписва входното напрежение, а на втория ред изходното напрежение на стабилизатора.

    Преди да вкарам библиотеката и кода в основния, вече работещ код на стабилизатора, реших, че е по-правилно да експериментирам на отделна платка бредборд тази идея, за да не нарушавам вече готовия софтуер. Другата причина беше, че трябваше да уеднаквя означенията на константите и променливите в двата различни кода и чак тогава да ги събера в един общ такъв. Всички експерименти правех с развойна платка Arduino UNO R3, която като че ли, от конструкторска гледна точка е най-лесна и удобна за използване и се явява като начален етап в последващи разработки. Между другото, докато осъществявах този експеримент, закупих Arduino Micro. Честно казано, снимките наистина не дават представа за физическите размери на платката, а тя се оказа платчица с големината на показалеца на ръката! Този размер напълно ме устройваше, тъй като крайната цел на всички описани експерименти е монтаж на цялото устройство върху една платка, каквато аз вече бях направил, но за Arduino UNO R3.

    И така – каква е основната идея за добавяне на волтметри? LCD дисплея трябва да отразява на първи ред надписа и стойността на входното напрежение:

    INPUT VOLT = 160,

    а на втори ред:

    OUTPUT VOLT = 220

    На първи ред броя на символите е 15, а на втори ред 16, с което се удовлетворяват изискванията за брой на знаците. Не че съм доволен от това означение и не предпочитам по-пълно изразяване като например INPUT VOLTAGE или OUTPUT VOLTAGE, но за съжаление, това са техническите възможности на LCD дисплея.

    След като обмислих основната идея за добавяне на LCD 16x2, изчертах принципната схема на електрическите връзки между дисплея и микропроцесорната платка, която придоби вида по-долу, с което се оформи окончателния й вариант. Принципната схема е структурирана в три блока: печатна платка, съдържаща Arduino с всички елементи за управление, релеен блок, който може да се изгради с релета за 12 или 24 волта (виж стабилизатора на платката) и индикатор LCD 16x2:

    За първоначалния експеримент заложих в софтуера информацията за входно напрежение което се изтегля от аналогов пин А0, същият на който подавах чрез трансформация част от входното напрежение, което следеше платката Arduino. При мрежово напрежение ~220V, на входа А0 се подава постоянно напрежение около 1.3-1,4V. Но е естествено, че това малко напрежение би следвало да се скалира с определен коефициент, който да отговаря на отчета на входното напрежение. Този коефициент се залага във формулата за изчисление в софтуера и е приблизително 160. От друга страна, на втори ред на дисплея трябва да се отразява изходното напрежение от стабилизатора, като за целта чрез маломощен мини трансформатор намалих изходното напрежение до ~12V, а с резистивен делител още около 8-10 пъти до напрежение поносимо за вход А1, на който се подава за следене. За първоначалния експеримент, този делител замених с потенциометър, като обръщам внимание, че максималното напрежение на аналоговите входове е 5 волта! И ако за вход А0 коефициента на скалиране беше около 160, то за втория просто заложих 130, колкото да проверя достоверността на формулите, които залагах в програмния скеч.

    На схемата всеки може да забележи потенциометъра P3, който няма нищо общо със споменaтия преди малко. Неговата цел е да променя напрежението на подсветката на дисплея. Интересното е, че въртейки оста на P3 се променя контраста на дисплея до преминаване в инверсия. Така може да имаме на дисплея показания както с "черни" знаци, така и обратно – с бели знаци, които са доста красиви на синия фон на подсветката. Разбира се цветът на подсветката също е по избор, какъвто LCD си закупите.

    В моя скеч константите за скалиране са маркирани като К0 и К1 в съответствие с А0 и А1, логически отразявайки връзката с аналоговите входове, съответно А0 и А1. Трябва да се има предвид, че като споменах, че стойността на константите съм заложил като "приблизителна", причината е в негарантираната стойност на напрежението на Arduino платката – в едни то може да бъде 5,03V, в други 4,96V. при коефициент на скалиране 150-160 разлика от 0,04V придобива стойност 6V, която е съответната грешка. След като се запусне платката, и се види стойността на напрежението на дисплея, е редно да се замери на входа и се сравни. Тогава се преизчислява коефициента на скалиране. Ето какво се получи в моя експеримент, с което доведох точността на показанието до 1 волт:

    float KA0 = 158,2;

    Формулата за изчисление, заложена в скеча има следния вид:

    vout = (value * 5,0) / 1024,0;
    vin = vout * KA0; респективно за KA1

    където "5.0" е стойността на захранването на Arduino платката, а чрез подбор на коефициента КА0 (КА1) достигам до търсената точност на напрежението.

    На показаните снимки се вижда основната идея, залегнала в експеримента с LCD 16x2, както и влиянието на подстветката върху контрастността на дисплея.

    След като завърших експеримента за добавяне на волтметри, от които единият да се управлява чрез аналоговия вход А0, а другият от А1, следващата стъпка беше да уеднаквя наименованията на константите и променливите между скеча на волтметъра и скеча на стабилизатора. Тази "доработка" на основния скеч ми отне половин час и така се получи версията "sketch_Stabilizer_220V_Rev.10_AND_if_milis_LCD.ino", която вече може да считам за окончателна. Почти на всеки команден ред съм включил обяснение на извършваното действие от съответния програмен ред. Скечът е без оптимизация.

    Този успешен експеримент води след себе си неговото въвеждане във вече работещия скеч от версия 9, както и монтирането на допълнителните елементи на основната конструкция. Това, разбира се, стана в поредните почивни дни. Предвид на претрупаната вече конструкция с най-различни "жици" по които тече ток с напрежения 3, 5, 12 и 220 волта, разпределени в няколко намотки на трансформатора, който показах на една от снимките, действието се оказа трудно и извърших с голямо внимание. Но ето, че от това следва удовлетворението на добре свършената работа. Така "хвърчащата" конструкция (обемния монтаж) на стабилизатора, който все още лежеше на работния ми плот придоби следния вид:

    И се оказа много добра идея да навържа всички модули на експерименталния бредборд, защото по този начин видях някои несъответствия като например коефициента за скалиране, който трябваше да се коригира към увеличение с около 6-7% за да може показанието на последната снимка да се коригира от 208 волта на 220 волта, а другото несъответствие се оказа в програмирането, при което съм обърнал местата на отчета на напрежението, което също се вижда на последната снимка, вместо входното напрежение да е 155 волта, а изходното 220 волта, те са обратно и при практическата реализация на очакваната печатна платка, тези малки грешки трябваше да се коригират. Изчертаната печатна платка се оказа изключително подредена и красива:

    И докато чаках да получа от производителя готовата печатна платка, поръчах и релетата, за които отново искам да припомня, че бяха избрани изключително щателно, така че да имат време на включване близко или равно на 10 мсек., в случая – 8 мсек. Ако си спомняте, целта беше моментът на превключването на релетата да съвпада с преминаване на фазата на мрежовото напрежение през нулата. С избраните релета разликата е 1-2 мсек., а според техническите им характеристики броя на превключванията са до 100 хиляди. Е, ще се надяваме, че с времето механичната система ще се отпуска, в следствие на остаряване на материала и омекване на пружините. Има и друг начин, просто да обърна полярността на импулса и тъй като схемата сработва по положителен фронт, в такъв случай моментът на сработване ще стане по задния фронт, а ширината на импулса е 1 мсек, тоест получава се сумарно закъснение от 9 мсек, което почти съвпада с периода на полувълната (10 мсек.)

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

    На следващите снимки е показан последователно финалът до окончателния монтаж:

    Естествено беше, веднага след монтажа да свържа вторичните намотки на трансформатора (припомням, че съм ги навил допълнително) към платката за да осигуря управлението на Arduino. Също така се оказа, че в състояние на включени всички релета, стабилизаторът 7812 в корпус ТО-220 грееше и се наложи да поставя радиатор. Но това беше предвидено предварително, както е видно от снимките по-горе.

    Скечът с добавен дисплей в качеството си на индикатор на входно и изходно напрежение вече беше готов и за няколко минути свързах LCD 16x2 към платката Arduino. Искам да отбележа, че независимо, че съм предвидил много начини за осигуряване на напреженията на основната платка, бях предвидил и използването на вградения стабилизатор на Arduino платката (връзките на основната платка бяха предвидени). В крайния монтаж от напрежението +12V от изхода на интегралния стабилизатор 7812 подавам във входа VIN на Arduino платката, а от нейните изходи +5V и GRD прехвърлям към основната монтажна платка.

    А ето и окончателния монтаж на стабилизатора с включен LCD 16x2:

 Архив: arduino_mr_stb_pr.zip [spl7,pcb][268kb];    stabilizer_220v_rev_10_and_if_milis_lcd.zip [ino][3kb]

    В тази статия не съм си поставил за цел да давам подробни обяснения на изграждането на волтметър за променливо напрежение с цифров LCD дисплей. По-подробна информация може да намерите в статиите ми "Аналогов волтметър с Arduino" и "Цифров волтметър с LCD16x2", в които са описани експериментите, за които споменах по-горе.

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

    Програмният код, който ви представих като последна версия "sketch_Stabilizer_220V_Rev.10_AND_if_milis_LCD.ino" не е оптимизиран, а и нямам намерение повече да се връщам към този проект. Ще се радвам, ако някой от вас извърши това вместо мен и ми го върне оптимизиран, за което благодаря.


    Е, това е. Желая на всички успешни проекти!
 

Използвани материали:

1. CD4013, CD4020, CD4042
2
. DF-10M, 4N25

Валери Терзиев
4 юли 2016 година