More...

DNA - this is the Nature's way to serialize life

Теми от: Ноември '10


PIC 3

Най-якия проект, който някога съм завършвал. 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.


Публикувано в категория Hardware -- clock 18 Nov 2010, 00:54, 0 коментара -- English View in English


thought

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. Софийският гратикул се простира от Своге до Благоевград, и от Перник до Ихтиман:

Image.

Ако идем един градус на изток (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)

----
¹ понеже джиохеш звучи грозно на български, предлагам "геохъш" като една доста по-благозвучна транслитерация


Публикувано в категория Наляво-надясно -- clock 12 Nov 2010, 22:41, 3 коментара

Language:

bgБългарски
enEnglish


Категории:

Мета
Hardware
Технологии
Забава
Open source
Интересно
Наляво-надясно
Простотии
Програмиране
Музика
Картинки
Фотография
Всички


Архив:

+ 2008 (21)
Март '08 (3)
Април '08 (5)
Май '08 (5)
Юли '08 (2)
Септември '08 (1)
Октомври '08 (2)
Декември '08 (3)
+ 2009 (15)
Януари '09 (2)
Февруари '09 (1)
Март '09 (1)
Юни '09 (1)
Юли '09 (1)
Август '09 (3)
Септември '09 (1)
Октомври '09 (2)
Ноември '09 (1)
Декември '09 (2)
+ 2010 (11)
Януари '10 (1)
Април '10 (2)
Юни '10 (2)
Юли '10 (1)
Септември '10 (1)
Ноември '10 (2)
Декември '10 (2)
+ 2011 (11)
Януари '11 (3)
Февруари '11 (1)
Юли '11 (1)
Август '11 (2)
Септември '11 (1)
Октомври '11 (3)
+ 2012 (19)
Януари '12 (3)
Февруари '12 (1)
Март '12 (1)
Април '12 (2)
Май '12 (3)
Юни '12 (1)
Август '12 (2)
Септември '12 (1)
Ноември '12 (3)
Декември '12 (2)
+ 2013 (6)
Март '13 (3)
Юни '13 (1)
Август '13 (1)
Октомври '13 (1)
+ 2014 (7)
Март '14 (1)
Април '14 (1)
Юни '14 (1)
Септември '14 (3)
Декември '14 (1)
+ 2015 (5)
Януари '15 (1)
Март '15 (3)
Май '15 (1)
+ 2016 (5)
Юни '16 (1)
Юли '16 (1)
Септември '16 (1)
Ноември '16 (1)
Декември '16 (1)
+ 2017 (1)
Август '17 (1)


Последни коментари:

3 Dec 2024, 01:10 от France
23 Jun 2024, 18:01 от anrieff
21 Jan 2020, 09:01 от anrieff
20 Jan 2020, 11:38 от Владо
30 May 2017, 02:02 от anrieff
26 May 2017, 01:00 от Mathew


Valid XHTML 1.0 Strict

Blogroll:

linkТимур и неговите командоси
linkivanatora
linkБезброй математици...
linkJoel on Software
linkRidiculous Fish
linkXKCD blag