Теми от: Ноември '10
PIC 3
Най-якия проект, който някога съм завършвал. 50+ месеца.
Или - как се прави цветарство по програмистски.
Откъде тръгна всичко:
Poinsetta (Коледна Звезда). Фотопериодично цвете от Мексико, което се нуждае от 14 часа стабилна тъмнина през есенните нощи (почвайки от Октомври), за да се "усети", че иде зима, и да цъфне около Коледа.
А си заслужава да цъфне:
:)
Обаче:
Тук се намесва студентско-програмистския денонощен цикъл. Не търсете логика и режим в него — няма:
В резултат:
Коледната звезда си стои зелена, вече три коледи подред. Понеже лампите редовно светят почти до полунощ, тотално прецакваме биологичния часовник на цветето.
В разните сайтове за отглеждане на поинсети в домашни условия препоръчват следното - надвечер му се слага един голям кашон, който да държи цветето на тъмно, и рано сутрин се вдига. 14 часа мрак му трябват.
Обаче - аз съм мързелив, забравям, а и никой не може да ме накара да ставам в 7ч, и ... затова:
Намесваме PIC микроконтролер:
Може да се програмира да командва всякаква електроника. В комплект "PICKit 2" - програматор, PIC16F690 чип, демо платка, развоен софтуер.
Малко поялник, кабели, релета...:
Вече можем да командваме DC моторче. Йей.
Meccano building kit:
Generic метален конструктор. Гредички, валове, ролки, зъбни колелца, болтове, гайки, крепежни елементи...
Ето един от моделите в книжката:
Да си построим си кранче:
.
Програмиране:
Само Асемблер. Всичко друго е шит.
Паралелепипед от тел:
.
Понеже кашон с тези размери (32х38х38см) е прекалено тежък - обикновено над 500 грама, а така построената "кутия" от тел + черни торби е под 100 грама!
Скрепителни работи:
.
Цялото нещо се държи учудващо добре. Проектирано да издържа до 7 по Рихтер (примерно).
И накрая - Нещото е готово! Run for your lives!
The Thing:
.
.
.
.
Цялата идея:
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.
Публикувано в категория Hardware -- 18 Nov 2010, 00:54, 0 коментара -- View in English
Geohashing
Рекох да напиша една статия за geohashing-а, тъй като това е нещо хубаво и интересно, а разпространенито му в БГ към момента е нулево...
1. Що е то GEOHASHING и има ли то почва у нас?
Всичко тръгва от един епизод на xkcd, в който Randall описва метод за генериране на (практически) случайна точка на картата в твоята област и те подканя да идеш да я посетиш (излетче из природата един вид). Алгоритъмът генерира нови координати всеки ден, навсякъде по земното кълбо, като хората от твоята област получават същите координати, както и ти - което е предпоставка да се съберете на едно място няколко geek-а, които едновременно обичат да скитосват из природата (с GPS в ръка :p ) и не се срамуват да abuse-ват възможностите на технологиите :). А, и са фенове на xkcd, това със сигурност.
Иначе казано, алгоритъмът генерира по едно потенциално приключение всеки ден, защото до geohash точката обикновено не е толкова лесно да отидеш, а изисква известна доза целеустременост, предварително планиране и малко гадаене дали точката е практически достижима - припомням, че координатите й са практически случайни, и като нищо може да се падне на склона на отвесна скала, или да е затънтена надълбоко в гората, или пък да се падне на територията на военно поделение, и пр.
2. Окей.. дай по-подробно.. какви са тия области? Как така са едни и същи координатите за всички?
Ами нали помните, че Земята е разделена условно на паралели и меридиани, които образуват една мрежа от пресичащи се линии? Е, ако вземете най-фините възможни целочислени деления на тази мрежа (през един градус), то образуваните клетки с размер 1°×1° се наричат гратикули. България се намира на ширини от 41.5 до 44 (С.Ш.) и на дължини от 23 до 28 (И.Д.) и на нейна територия се намират 13-15 гратикула (в зависимост дали включвате някои по границата). Всеки от тези гратикули представляват областите, за която става дума в geohashing-а, т.е. на geohash точката се събират хората от един и същ гратикул.
Гратикулите са достатъчно големи, че да включват средно по един голям град на гратикул - размерите им към нашите ширини са 111km (север-юг) на 82km (изток-запад). Например, София се намира на координати 42° 42' N, 23° 20' E, което я поставя в гратикул 42,23. Софийският гратикул се простира от Своге до Благоевград, и от Перник до Ихтиман:
.
Ако идем един градус на изток (42,24), попадаме в Пловдивския гратикул и т.н.
Алгоритъмът не си играе да раздава отделни геохъш¹ точки за всеки гратикул. Вместо това, той генерира двойка отмествания (дробни числа в [0..1)), които ползвате за дробна част към вашия гратикул - и това всъщност представлява геохъш точката. Самият метод ползва източник на ентропия - в случая - промишленият индекс Dow Jones на американския фондов пазар (със същия успех можеше да се ползва и курсът USD/EUR, естествено). Този индекс е достатъчно непредвидим за целите на geohashing-а, и се публикува всеки ден сутринта, щатско време. Та, този източник на ентропия се комбинира с текущата дата, и цялата тази информация се прекарва през MD5 хеш функция, с цел да се вземе едно равномерно "случайно число", което е базирано на този вход. Тъй като MD5 има много добри avalanche характеристики, дори минимално отклонение на Dow Jones стойността (например, промяна с ±1 на най-младшия разряд) оказва огромно значение за крайните координати и праща геохъш точката на съвсем друго място.
Поради споменатите особености на генериращия алгоритъм, и непредвидимостта на DJ индекса, нетния резултат е, че посещенията на геохъш точките са спонтанни: имате максимум ден-два да видите къде е точката и да планирате експедицията. Понеже, както казах, точките рядко са достъпни, става едно "дебнене" ден за ден - кога ще се "падне" удобна точка за посещение и прочее.
3. Къде и кога се публикуват тези точки?
Конкретно за България, геохъш точките се публикуват късно вечер и важат за следващия ден. Понеделник вечер излиза точката за Вторник, Вторник вечер - за Сряда и т.н.; Изключение е петък вечер - петъчния индекс определя точките за Събота, Неделя и Понеделник за българските дължини - т.е. за уикендите обикновено имате повече време за планиране.
Вие, естествено, няма нужда да смятате нищо — вижте по-долу.
4. Окей, искам да играя! Какви са правилата на играта?
1. Правите си регистрация в wiki-то (препоръчително).
2. Тук се намира днешната геохъш точка за Софийския гратикул (но можете да изберете някой друг град - просто цъкнете върху него, ще ви се покаже вашата област. Може и директно да смените числата в URL-то).
3. След като решите да правите геохъш експедиция, е желателно да документирате намеренията си, като създадете страница за събитието (името на страницата е от вида година-месец-ден_сев. ширина_изт. дължина). В страницата е хубаво да впишете към колко часа планирате да се докопате до геохъш точката, за да можете да се координирате с другите геохъшове и да си направите среща, ако има и други желаещи. Естествено, можете и да си направите експедицията инкогнито, но така стават още по-нищожни дори малките ви шансове да се засечете с други геохъшове. Изборът дали да социализирате си е ваш!
4. Естествено, следва самата експедиция. Ходите дотам, ако искате с кола, с градски транспорт, с колело, пеш, с парапланер... като се ориентирате по GPS, или само с компас и карта, или със секстант :)...
5. Като пристигнете на мястото, традицията е да оставите някакъв знак (купчинка камъни/символ от камъчета/лист с надпис като "The internet was here" например/ или друг неперманентен маркер). Правите снимки, опъвате си пикникче, играете игри, отивате да пиете бири с другите геохъшове - каквото си измислите - геохеширането е социална дейност.
6. Като се приберете вкъщи, не забравяйте да отбележите успеха от експедицията ви в wiki страничката, която сте направили, и я окичете с походящите постижения!. Ако пък ви е домързяло да правите страничка, поне драснете един ред в справочника на вашия гратикул - той е от вида http://wiki.xkcd.com/geohashing/<ширина>,<дължина> - ето например Софийския гратикул.
5. Малко факти и наблюдения
* Първата геохъш експедиция в България, за която аз знам, е на Иван и Стела, в Пловдивския гратикул, без употреба на GPS (или дори компас), и без кола (ако някой има информация за по-ранна експедиция - нека ми пише, да се коригирам!).
* Софийският гратикул не е от най-удобните, тъй като голяма част от него е планински и е труднодостъпен дори и през лятото.
* Напълно е възможно да се падне лесен geohash. Даже, ако стоите на едно място и просто дебнете, шансовете са във ваша полза в течение на 3 години да ви се падне геохъш точка във вашия квартал!
* На peeron картата горе София изглежда като значима част от гратикула си, но това е подвеждащо - нейната площ е едва 1.4% от тази на целия гратикул. В резултат на което, геохъш точка вътре в София се пада средно веднъж на 2-3 месеца. Например, една наскоро беше на бул. Вардар, кв. Красна Поляна - 8-ми Септември 2010.
* Имайте предвид, че google maps не е изключително прецизен в географските координати, т.е. не е задължително "точката", която той показва, при зададени прецизни координати, да съвпада с действителното място на точката по GPS. Отклонение от 50-100 метра е нормално.
Заключение: Ето - вече знаете всичко за geohashing-а! Сега остава и да направите дебютната си експедиция (хинт: на 15 Ноември има точка в Западен Парк, София :p)
----
¹ понеже джиохеш звучи грозно на български, предлагам "геохъш" като една доста по-благозвучна транслитерация
Публикувано в категория Наляво-надясно -- 12 Nov 2010, 22:41, 3 коментара