27 listopada 2008

Open Hardware - nie kupuj szajsu, skoro sprzęt jest za darmo

Powalające jest to, jak daleko Open Source podąża :-)



Dziś natchnąłem się na kilka stronek opisujących zagadnienie Free Hardware. W wolnym tłumaczeniu otwarty sprzęt jak wiadomo jest tworzony od wielu lat. Jest słynący projekt otwartej karty graficznej. Sporo jest w sieci projektów sprzętowych do realizacji robotów. Również istnieją projekty otwartych systemów wbudowanych.
Spoglądając z punktu widzenia programisty, który potrafi czytać dokumentację i API danej implementacji programowej jest to genialne rozwiązanie. Chcąc na przykład zrobić sobie przenośny i niezależny klient sieci Jabber z wyświetlaczem LCD podpinany do dostępnego gniazda sieciowego lub wyszukującego sieci WiFi lub Bluetooth wystarczy wyszukać dostępny open hardware, który oferuje obsługę protokołów bazowych oraz interfejsów dla peryferiów i zaimplementować protokół klienta sieci Jabber :-)
Okazuje się, że nie wspominam o abstrakcjach, bo istnieje już kilka możliwych rozwiązań, np:

  • Free Arduino - prosty system wbudowany + Free Hardware (oparty o mikrokontroler ATMega 16)

  • Nut/OS - średniej klasy system operacyjny + Free Hardware (oparty o mikrokontroler AVR ATMega 132)

  • OpenCore - Free Hardware jako układy FDGA, w które w języku VHDL wpisuje się implementacje rdzeni mikroprocesora zyskując spore jednostki obliczeniowe

  • Java tiny - Free Hardware z procesorami z zaimplementowaną wbudowaną wirtualną maszyną JVM, które wykonują przenośne programy napisane w języku JAVA





Kilka przykładów a widać rozmaitość rozwiązań i dowolność w implementacji. Jedynym warunkiem jest znajomość jakiegoś języka programowania ANSI C, C++, Python Java, ew. VHDL. oraz czas na zapoznanie się z dokumentacją do wymaganego stopnia podstawowego kodowania na wybraną platformę.
Temat niby niewiele znaczący, lecz okazuje się, że już w sektorze tunerów satelitarnych DVB od kilku lat istnieją architektury, które oferują z punktu widzenia użytkownika oglądanie telewizji cyfrowej, słuchanie radia, przeglądanie stron internetowych a z punktu widzenia systemu wbudowanego są to kolejne przykłady sprzętu, który może stać się otwarty :-) Ten przykład nie dotyczy na dzień dzisiejszy Free Hardware, chociaż wiele osób chciałoby sobie zrobić własny uniwersalny tuner DVB. Przeszkód żadnych nie ma, bo jak pamiętam ostatnio zapis prawny dotyczący dekodowania strumieni satelitarnych na własny użytek - wyłączając cele komercyjne - zezwala nam na zabawę, o ile nie kończy się targiem i handlowaniem takimi rozwiązaniami. Powracając do wątku o DVB wspomnę tylko, że tuner cyfrowy posiada całkiem spory procesor bazowy, dość ciekawy numeryczny kilka kodeków do strumieni MPEG oraz dźwięku, kontroler tunera satelitarnego, czytnik kart chipowych, dość sporo pamięci RAM i Flash oraz wiele innych peryferiów, które pozwalają podczas programowania takiego urządzenia dobrze poszaleć :-) i zrobić sobie jakiś prosty skaner częstotliwości z prezentacją radaru na ekranie ... a co tam, jak szaleć to konkretnie :)
Inny dość pokaźny zestaw tematyczny w nawiązaniu do Open Hardware to otwarte sieci czujników Wireless Sensor Network.



Zestawienie projektów opencore potwierdza dodatkowo zainteresowanie tematyką Free Hardware.
Kolejnym przykładem będą zabawki, jakie możemy stworzyć w oparciu o otwarty sprzęt oraz bardzo popularny temat otwartego sprzętu dla telefonów komórkowych t.j. OpenMoko


A tak kształtuje się zarys architektury Open Moko:



Pozostawiam Wam tymczasem kilka linków, które doprowadzą Was do ciekawych tematycznych stron:
SquidBee bezprzewodowy czujnik - Open Hardware and Source
Wiki na temat otwartego sprzętu
OpenServo - otwarty sterownik serwomechanzmu
Ethernut 1.3 Hardware
Opencores - otwarte architektury
SUN OpenSPARC CMT (Chip Multithreading) technology

Nut/OS Development on Debian Sarge
Ethernut Unix Emulation Installation

Wireless Sensor Network

How to Build an Open Source MIDI Keyboard

21 listopada 2008

Ewolucja robotów trwa

Dziś zapraszam do obejrzenia materiału wideo o ewolucji robotów i oczywiście dyskusję na ten obszerny temat :)



Robot Evolution - The most popular videos are here


Po zapoznaniu się z pewnym artykułem p.t. Bunt maszyn - początek już był! stwierdzam, że bardzo niewiele brakuje, aby technologie, które w bazach wojskowych przechodzą testy wymknęły się spod kontroli i zaszkodziły populacji. Być może to jest nieco tragiczny początek .... bynajmniej prawdopodobny ;-)
W patykiem po wodzie pisanym kodeksie robota nie jest przecież istotne co ten robot robi, ale ważne jest do czego zaprogramował go człowiek. I będzie to robił z precyzją na jaką pozwalają podzespoły, z jakością napisanych dla robota algorytmów oraz w ramach dostępnych zasobów sprzętowych/peryferiów.
Istnieje wiele pomysłów na roboty. Ba istnieje spora liczba zaprogramowanych robotów, które na dzień dzisiejszy są dość skomplikowanymi maszynami mechaniczno-elektronicznymi, lecz za kilkadziesiąt lat będą to maszyny podstawowego wyposażenia naszych gospodarstw domowych. Te oparte o jednostki centralne sporej mocy obliczeniowej urządzenia czeka w dobie rozproszonych sieci komputerowych niebanalny rozkwit. Pytanie tylko, jak długo jeszcze będą odbywały się próby naśladowania istoty żyjących i podstaw mechaniki podczas konstruowania robotów...
Moim zdaniem prawdziwa era robotów nadejdzie, gdy człowiek wyzbędzie się podczas ich tworzenia zasad, których wyuczył się i zna z życia codziennego a zacznie szukać robotów, które żyją w dniu dzisiejszym jako wirtualne twory przeszukujące i przemierzające ogólnodostępną sieć internet. Nie mam tutaj na myśli wirusów komputerowych, lecz można je spokojnie wykorzystać jako wagon transportowy dla takiego tworu :-)
Nie byłbym sobą, gdybym nie wspomniał o roli programistów w tym procesie.
Już dziś można otwarcie napisać Panowie i Panie to do nas świat należy. Programista zaczyna od wielu na całym świecie być ceniony za swoją abstrakcyjną pracę, lecz jak dotąd nic nie przebija - od początków cywilizacji - zwykłych i niezwykłych handlarzy (bez urazy oczywiście) Pozwolę sobie ich nazwać współczesną gwarą biznesmenami, bo właśnie potencjalni handlowcy napędzają sprzedaż tworów programistycznych :-) Jak najbardziej nie mam zamiaru wywyższać zawodów, pisać, że tym jest być lepiej lub gorzej. Nie osądzam - tak tylko fantazjuję ;)
O ile mogę polecić literaturę fantastyczną zasygnalizowany dziś temat Pana Stanisława Lema, o tyle też zachęcam do spojrzenia na dzisiejsze osiągnięcia w dziedzinie robotyki chociażby okiem youtube. Odkrywając dziś i przyzwyczajając się do egzystencji robotów w naszym życiu tworzymy dalej technologicznie sprawniejszą cywilizację. Ci których interesuje od strony kinematografii również znajdą coś dla siebie.



Linki:
Robo Sapiens. Ewolucja nowego gatunku
Od blaszanej puszki do kobiety idealnej
Gwiezdne wojny: Prawo robotyki – część 1
Asimo - robotyka

20 listopada 2008

Arduino, Freeduino, Pyduino - szybki start z mikrokontrolerami AVR

Filozofia OpenSource dociera zarówno do twórców software, jak również hardware. W ukryte zakamarki elektroniki, do jednostek arytmetyczno-logicznych, pamięci Flash, do mikrosystemów, do wszystkich zakątków, które możemy sobie wyobrazić. Skoro telefon może być na otwartym oprogramowaniu, to dlaczego nie pralka, lodówka, odkurzacz, roboty przemysłowe :-) Dla ułatwienia zabawy z mikrokontrolerami dziś polecam gotowy, do nabycia lub samodzielnego montażu zestaw Arduino z interfejsami USB lub RS-232







oraz jego otwarty pierwowzór Freeduino






Dla lubiących własne przygody z lutownicą Arduino w działaniu - wesołe wprowadzenie do tematu:




Przykładowe zabawki ;)









Kontrolowanie Arduino zdalnie z formularza HTML






Temat zainteresował mnie otwartym podejściem do nauki programowania urządzeń wbudowanych. Wszystkie schematy oraz informacje konstrukcyjne są dostępne za darmo :-). Tani hardware oraz rozbudowane podręcznik i biblioteki w językach C, Java i Python do pobrania z sieci. Bogactwem otwartych rozwiązań jest także prostota użycia. Atutem jednakże są niezliczone przykłady potwierdzające możliwości modułu. A dla chcących połączyć swój system mikroprocesorowy z interfejsem 3D systemu animacyjnego Blender również się coś znajdzie :)

Polecam poniższe materiały edukacyjne:
The Arduino Duemilanove ("2009") is a microcontroller board based on the ATmega168
Arduino Board - Serial Interface
Development Tools
Installing Arduino on Linux
Install Arduino on Ubuntu Linux
SimpleMessageSystem - library for Arduino 0004 and up
Arduino and Linux TTY

Arduino Pulse Width Modulation

Arduino-Python 4-Axis Servo Control

Pyduino

Arduino-Python bridge

Python with Arduino

Board Setup and Configuration

Joystick Control of a Servo

Arduino Noise Maker

Serial communication

http://www.solarbotics.com/products/28920/


Linki dla ciekawskich :-)
PHP Library for controlling a 633(serial) LCD & Keypad

http://www.varesano.net/blog/fabio/serial+rs232+connections+python

Python serial tty console application

Controlling GPIB, RS232, and USB instruments - Python GPIB etc. support with PyVISA

http://pyvisa.sourceforge.net/pyvisa.pdf

If you need to control gpib/visa-instruments, pyvLab could be the right thing for you.

Blog z niebanalnymi projektami elektronicznymi

8 listopada 2008

Razor Optimizer - nowatorski projekt analizatora kodu Ajax w celu optymalizacji

Znalazłem dziś ciekawego newsa na temat projektu Razor Optimizer. Oto nowatorska idea optymalizacji kodu Ajax przy użyciu dedykowanego mechanizmu oraz serwera działającego na platformie Java.



Linki:
Getting Started with Razor
Razor Optimizer - a New Approach to Light Up the Web
Razor Optimization Report Example
Demos

źródło

LEGO Mindstorms - zbuduj robocika klepiąc kod Pythonica ;)

W tym tygodniu - 05.11.2008r - w auli wykładowej UAM w Poznaniu odbyła się prezentacja LEGO Maindstorms. Wykład był otwarty, więc aula gościła zainteresowanych wykładem dot. tematyki budowania robotów z klocków LEGO.
Oto PLUGowa strona wykładu oraz udostępnione materiały.

Pozwolę sobie na przedstawienie w postaci materiałów wideo zastosowań LEGO Mindstorms, po czym wrócę do opisywanej prezentacji.

Sterowanie fabryką klocków samochodów z klocków LEGO




Pojazd typu Segway (z efektem odwróconego wahadła)




Układanie kostki rubika






Kusza z LEGO strzelająca piłkami




Kreatywne rozwiązania z LEGO Mindstorms




I najbardziej pocieszny przykład użcyia w prototypie podajnika papieru toaletowego










Linki:
Przykładowe projekty wraz ze zdjęciami realizacji oraz kodem źródłowym
Robot szukający światła z czujnikiem odległości
Nieoficjalna strona legofana z wieloma linki
TurboCNC - program do programowania maszyn i robotów z PC
Materiały poznańskiego kółka zainteresowań robotyką


Building, creating, and developing with added technologies: the LEGO MINDSTORMS™ RIS, other programmable bricks, vision systems, bar-code readers, radio controlled units, research sites, microcode / embedded programming, etc.

7 listopada 2008

Skutecznie proste pomiary temperatury w lodówce z iButton

Odgrzebałem kilka starych gratów z mojej elektronicznej walizki, gdyż jak z tematu wynika podejrzewam, że moja lodówka nie działa poprawnie :-) Swoje odkrycia zacznę od wzmianki o układach iButton, o których tutaj będzie mowa. Istnieje wiele różnych układów od czujników temperatury po przełączniki, rejestratory temperatury, czujniki wilgotności, przetworniki analogowo-cyfrowe ADC i wiele innych praktycznych układów. Posiadają one unikalny - wypalany w fazie produkcji - identyfikator. Tą własność wykorzystuje każdy program obsługujący 1-wire oraz iButton. Są to poniekąd gotowce, więc ważniejsze tutaj są interfejsy do magistrali 1-wire łączącej iButton ze światem zewnętrznym oraz rzecz jasna oprogramowanie :-) Podstawowymi cechami dobrego oprogramowania są niewątpliwie możliwość wyszukiwania urządzeń oraz bindowania rejestrów urządzeń na odpowiednie obiekty ze zmapowanymi obszarami pamięci dostępnej do odczytu/zapisu. Z takiej abstrakcji wyrasta kilka powszechnie znanych i lubianych projektów obsługujących tą technologię t.j. digitemp. Poniżej zawarte są przykłady wywołań z linii poleceń i stosowne komentarze.

Oto zdjęcie zabawki pierwszej, którą jest zestaw startowy iButton kit. Jeden z adapterów dla technologii iButton tzw. pastylka
Using the 1-Wire® Public Domain Kit
protokół 1-wire wg wikipedii
, czyli w zasadniczym mniemaniu elektronicznym miernikiem/rejestratorem temperatury. Ten starter Kit zawiera są są to następujące układy:

  • DS2502/DS1982 1Kbit Add only memory - interfejs łączący port RS-232 z 1-wire dla iButton z dostępnym 1kB pamięci do wykorzystania

  • DS1921/H/Z Thermochron iButton - cyfrowy rejestrator temperatury z programowanymi alarmami w zakresie 0 do +45 stopni C (+/- 1 stopien C)





Przykład wywołania digitemp:

$ sudo digitemp_DS9097U -w -s /dev/ttyS0
DigiTemp v3.3.2 Copyright 1996-2004 by Brian C. Lane
GNU Public License v2.0 - http://www.brianlane.com
Turning off all DS2409 Couplers
..
Devices on the Main LAN
2103410000C034C4 : DS1921/H/Z Thermochron iButton
091AAD62010000BB : DS2502/DS1982 1Kbit Add only memory


Nieco skromniejszy - zrobiony w ok. 15 minut - czujnik temperatury oparty na kostce DS18S20 - umożliwiającej pomiar temperatury w zakresie od -55 do + 125 stopni C. Realizacja ogólnie znana




Przykład wywołania digitemp z banalnym "na kolanie" robionym interfejsem:

$ digitemp_DS9097 -w -s /dev/ttyS0
DigiTemp v3.3.2 Copyright 1996-2004 by Brian C. Lane
GNU Public License v2.0 - http://www.brianlane.com
Turning off all DS2409 Couplers
.
Devices on the Main LAN
28579B3C00000028 : DS18B20 Temperature Sensor


Linki do API oraz oprogramowanie do komunikacji z czujnikami 1-wire (iButton)
http://www.maxim-ic.com/products/ibutton/solutions/search.cfm?Action=DD&id=207
http://www.maxim-ic.com/products/ibutton/solutions/product.cfm?id=428
http://www.maxim-ic.com/products/ibutton/solutions/company.cfm?id=181
http://www.maxim-ic.com/products/ibutton/solutions/product.cfm?id=373
http://www.maxim-ic.com/products/ibutton/solutions/product.cfm?id=389

w tym powalające projekty OpenSource:

http://sourceforge.net/projects/owfs/
One Wire Temperature Finder (bohaterski kod od googla używany w opisie)

http://sourceforge.net/dbimage.php?id=71236
http://owfs.sourceforge.net/faq.html
http://owfs.sourceforge.net/owpython.html
http://www.pyzine.com/Issue007/Section_Articles/article_MobileDataCollection.html
http://owfs.sourceforge.net/install.html
http://www.jjoseph.org/misc_projects/1-wire_sensors.html
http://www.kaboodle.com/jon_p/1-wire-electricity-consumption-measuerment.html
http://stackoverflow.com/questions/113185/how-do-i-use-owfs-to-read-an-ibutton-temperature-logger
http://www.jjoseph.org/index.php?option=com_staticxt&staticfile=/machine24.html
http://www.ourcoolhouse.com/monitor/monitor.htm
http://stackoverflow.com/questions/113185/how-do-i-use-owfs-to-read-an-ibutton-temperature-logger
http://www.jjoseph.org/index.php?option=com_staticxt&staticfile=/machine24.html

Python bindings and wrappers for accessing iButton devices on a 1-wire net

Java client for DS1923 iButton with server written in PHP for storage and visualization of data

http://sourceforge.net/dbimage.php?id=60310
www.capgo.com/Resources/SoftwareDev/omap-owire.pdf
http://oww.sourceforge.net/hardware.html
http://www.codeproject.com/KB/cpp/ibuttoninterface.aspx
http://www.audon.co.uk/1wire_humidity.html
http://www.maxim-ic.com/products/1-wire/software/
http://www.mrsoft.fi/ohj01en.htm
http://www.digitemp.com/
http://www.digitemp.com/images/screenshots/walk1wire.png
http://www.digitemp.com/images/screenshots/init1wire.png
http://elektroniikka.org/thermometer/?page=adapter
http://www.maxim-ic.com/products/ibutton/software/1wire/images/screenshot.gif
http://www.maxim-ic.com/quick_view2.cfm?go=part_number_search&ss=DS1921
Stacja pogodowa
Objaśnienie działania OWFS

Jest tego na prawdę sporo jak na okres ok. 10-letniego istnienia technologii iButton.

OWFS - najpopularniejsze rozwiązanie obsługi magistrali 1-wire


Uruchomienie serwera w trybie DEBUG:

sudo /opt/owfs/bin/owserver -d /dev/ttyS0 --8bit -p 127.0.0.1:40141 --Celsius --foreground --error_print 2 --error_level 9


Uruchomienie serwera w trybie normalnym z logowaniem błędów:

sudo /opt/owfs/bin/owserver -d /dev/ttyS0 --8bit -p 127.0.0.1:40141 --Celsius --foreground --error_print 2



Uruchomienie prostego klienta w języku Python, który wyświetli temperaturę z czujnika w stopniach Celsjusza:

#! /usr/bin/env python

import sys
import ownet

if len(sys.argv) != 3:
print 'temperatures.py server port'
sys.exit(1)

r = ownet.Sensor('/', server=sys.argv[1], port=int(sys.argv[2]))
e = r.entryList()
s = r.sensorList()
print 'r:', r
print 'r.entryList():', e
print 'r.sensorList():', s

for x in r.sensors():
if hasattr(x, 'temperature'):
print x, x.temperature


$ python temperatures.py 127.0.0.1 40141

Dla tych, którzy wolą www istnieje możliwość postawienia serwera www komendą:

/opt/owfs/bin/owhttpd -d /dev/ttyS0 --8bit -p 127.0.0.1:40141 --Celsius --foreground --error_print 2

Wówczas w przeglądarce wpisujemy http://127.0.0.1:40141/ i widzimy:















Dla chcących rozszerzyć wiedzę polecam ten projekt thermd