PIC 3

~ 18 Nov 2010, 00:54

Най-якия проект, който някога съм завършвал. 50+ месеца.
Или - как се прави цветарство по програмистски.


Откъде тръгна всичко:

Image
Poinsetta (Коледна Звезда). Фотопериодично цвете от Мексико, което се нуждае от 14 часа стабилна тъмнина през есенните нощи (почвайки от Октомври), за да се "усети", че иде зима, и да цъфне около Коледа.

А си заслужава да цъфне:
Image
:)

Обаче:
Тук се намесва студентско-програмистския денонощен цикъл. Не търсете логика и режим в него — няма:
Image

В резултат:
Коледната звезда си стои зелена, вече три коледи подред. Понеже лампите редовно светят почти до полунощ, тотално прецакваме биологичния часовник на цветето.

В разните сайтове за отглеждане на поинсети в домашни условия препоръчват следното - надвечер му се слага един голям кашон, който да държи цветето на тъмно, и рано сутрин се вдига. 14 часа мрак му трябват.

Обаче - аз съм мързелив, забравям, а и никой не може да ме накара да ставам в 7ч, и ... затова:

Намесваме PIC микроконтролер:
Image
Може да се програмира да командва всякаква електроника. В комплект "PICKit 2" - програматор, PIC16F690 чип, демо платка, развоен софтуер.

Малко поялник, кабели, релета...:
Image
Вече можем да командваме DC моторче. Йей.

Meccano building kit:
Image
Generic метален конструктор. Гредички, валове, ролки, зъбни колелца, болтове, гайки, крепежни елементи...
Ето един от моделите в книжката:
Image


Да си построим си кранче:
Image.Image



Програмиране:
Image
Само Асемблер. Всичко друго е шит.


Паралелепипед от тел:
Image.Image
Понеже кашон с тези размери (32х38х38см) е прекалено тежък - обикновено над 500 грама, а така построената "кутия" от тел + черни торби е под 100 грама!


Скрепителни работи:
Image.Image
Цялото нещо се държи учудващо добре. Проектирано да издържа до 7 по Рихтер (примерно).

И накрая - Нещото е готово! Run for your lives!

The Thing:
Image.Image
Image.Image
Image.Image
Image.Image
Image

Цялата идея:
PIC-ът е програмиран да върти празни цикли, като по този начин отмерва време. Оказва се, че е доста прецизен в това.
В 5 часа следобяд, "кашонът" се спуска от горно до долно положение, закривайки цветето.
В 7 сутринта, се вдига обратно горе.

Ето клипче за целия проект (заснето в действие): Youtube

Засега цялото нещо работи добре. Вече към 2 седмици.

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

* Захранване от батерия (всякакви варианти, 4.5 волтова, 9 волтова, 4хАА зареждаеми...), включително и идеята да минавам входното напрежение през LM7805... (оказа се тъпо - защо да харча батерии, когато мога да захранвам с адаптерче... Адаптерчето даже е устойчиво на мигване на тока - явно има доволно голям кондензатор вътре...)
* Засичане на крайните точки - т.е., да следя какъв е товара през моторчето, и, примерно, при вдигане, когато "кашона" стигне горната точка, да засека повишаването на тока през мотора и да спра подаването. За слизане надолу имах даже по-щура идея - да спусна малко повече, отколкото е нужно, след което да почна да вдигам. Когато въжето се опъне и почне да тегли кашона нагоре, отново засичам повишаването и спирам. (Естествено, отказах се и от тази идея - твърде чупливо е, лесно е да се бъгне)
* Отмерване на времето - всевъзможни варианти мислех. Примерно, часовникарски таймер, който да генерира прекъсвания на PIC-а. Той пък, да си спи, и да се буди само на прекъсване (това основно с цел да пестим батерията).
* Да не се ползва вътрешния clock генератор на PIC-а, ами да си е външен кварцов резонатор...
* Battery efficiency идеи - що да въртим процесора на 4 MHz, когато скорост не ни требе - и 32 kHz са достатъчни, а PIC-а е доста по-икономичен така?
* И още различни варианти, свързани с това, PIC-а да не се занимава с времето. Например - командване по Wireless.
(И за какво беше целия тоя страх - че в datasheet-овете пишело, че при 5V и стайна температура, вътрешния clock на PIC бил с 1% неточност, а това е доста (към 15 минути на денонощие). Оказа се, че с малко калибрация, PIC-а може да стане удивително точен - за момента закъснява има-няма 10 секунди на денонощие. На растението не му пука).)

Реализирах, обаче, маса debugging неща. Например, да мога да пускам и вдигам кашончето по всяко време, със задържане на командващото бутонче от платката, и пускането му след определен брой секунди. По подобен начин го карам да ми изпечата текущото време (според процесорчето). В 4-bit binary. За да изобразиш минутите, първо показваш M div 5, а после M mod 5.
Освен това, оригиналната платка (както я бях зарязал от 2008-ма) беше развила хардуерен бъг. В едната посока, моторчето не върви, и се чува, че релетата не цъкат като хората. Т.е. едното просто не цъка. Като пипнеш стърчащите крачета на определено място - проработва. Слаба спойка се оказа, в крайна сметка, то в електротехниката чудеса няма - има само лоша връзка. Трябва да видите какво е, обаче, да се дебъгва хардуер. Ти още ли си мислиш, че gdb под текстов терминал е трудно, гнусно и анахронично? Нищо не знаеш ти :D

P.S. Качих кода на всичките ми PIC проекти тука: /code/my_projects/PIC.



Няма коментари



Име:
За връзка: (Линк към вашия блог/сайт/e-mail; незадължително)
Вашият коментар:

Сметнете израза: πетнадесeт минус
дванет = (въведи с цифри)


<<

Valid XHTML 1.0 Strict