13.787 pregleda

Croduino – programiranje fizičkog svijeta

16

LEGO kockice u mladosti mnogima su bile omiljena igračka. S njima je zabava teško mogla postati dosadnom jer kad i dosadi, jedan sastavljeni oblik lako se mogao rastaviti i sastaviti neki posve novi, a samo je mašta bila granica. Dobro, ne samo mašta, nego i broj kockica koje su bile na raspolaganju.

LEGO

Programiranje računala ima mnogo dodirnih točaka sa slaganjem LEGO kockica: na raspolaganju stoje različiti gradivni blokovi, ali je ovoga puta samo mašta granica jer su blokovi virtualni, pa ih na raspolaganju ima beskonačno. Programiranje nudi i veću fleksibilnost, pa je moguće stvoriti puno složenije strukture koje izvršavaju vrlo kompleksne zadaće i koje se mogu upotrijebiti u razne korisne svrhe. Ipak, ponekad se čini kao da nedostaje ono nešto što su imale popularne legice. Građevine napravljene od LEGO kockica impresionirale su i neupućene u građenje, dok računalni programi većinu ljudi ostavljaju ravnodušnima jer je sva kreacija zapravo skrivena od očiju korisnika ili promatrača – nalazi se u izvornom kodu koji redovito poznaje samo autor. Kao da je većina od složenih legica prekrivena zastorom, tako da je nitko ne može vidjeti u cjelini.

Kad bi programiranje nekako uključivalo intervenciju u fizički svijet, ukomponiralo bi možda u sebe i taj nedostajući dio. Spajanje računala na senzore, diode i elektromotore uistinu upotpunjuje zabavu programiranja jer sada program može posegnuti i za fizičkim svijetom: može isključivati svjetla u kući, stišavati zvuk glazbe kad zvoni telefon, zaključavati ulazna vrata prije spavanja… Pravo bespuće ideja.

Međutim izlet u takvu vrstu programiranja, koje se često naziva fizikalno računarstvo, zahtijeva odviše muke. Niti je spajanje vanjskog sklopovlja na računalo trivijalno jer malo koja računala danas dolaze još sa serijskim ili paralelnim portom, niti kasnije programiranje takvog sklopovlja prolazi bez muke. Većini su te prepreke dovoljne da odustanu od daljnjeg fizikalnog računarstva, ma koliko privlačno izgledalo.

No ipak nije sve tako crno. Postoji puno lakši put do programiranja fizičkog svijeta, a dokaz je za to platforma Arduino. Kako objasniti što je Arduino? Službene stranice kažu:

“Arduino je slobodna (open-source) elektronička prototipna platforma bazirana na fleksibilnom i jednostavnom-za-korištenje hardveru i softveru. Namijenjena je umjetnicima, dizajnerima, hobistima i svakome tko je zainteresiran za stvaranje interaktivnih objekata ili okruženja.”

U osnovi Arduino se sastoji od mikrokontrolera koji može primati i slati signale u okolinu i iz okoline te softverske komponentne koja omogućuje jednostavno programiranje tog mikrokontrolera uz pomoć računala na bilo kojoj platformi (Linux, Mac, Windows). Glavni su aduti ove platforme već naglašena jednostavnost i u softveru i u hardveru, ali također tu je i sloboda (softverski je dio slobodan softver, a hardverska je specifikacija sasvim otvorena). Kao što obično biva sa slobodnim softverom i otvorenim specifikacijama, u cijenu Arduina nije uračunato intelektualno vlasništvo te drugi vlasnički nameti, što ga čini vrlo jeftinim.

Slobodna priroda ove platforme omogućuje varijacije i prerade, nešto što je dobro poznato u svijetu slobodnog softvera, pa ni ne čudi da Arduino ima mnoštvo derivacija.

Jednu takvu derivaciju dobili smo na recenziju. Radi se o hrvatskoj verziji Arduino pločice – Croduino, koja je posve kompatibilna s originalnim Arduinom. Iako elektronika ne spada baš u uže područje djelovanja ovog portala, radi isticanja slobodne kulture, Arduino zaslužuje prvoklasni tretman, a uzmemo li u obzir da je uložen i trud domaćih ljudi – ova je recenzija Croduina na portalu Linux Za Sve neizbježna.

Croduino Basic - hrvatska inačica Arduino pločice

Croduino Basic – hrvatska inačica Arduino pločice

Ekipa e-radionice iz Đakova, koja stoji iza hrvatske inačice Arduina i koja nam je poslala jedan primjerak, pokrenula je projekt Croduino da bi, kako sama kaže, približila Arduino kulturu, a samim time i elektroničku kulturu publici u Hrvatskoj. Konkretno, pločica Croduino Basic omogućuje sve što i standardna Arduino pločica, s time da ima više analognih ulaza i ono što je najvažnije, može se lako nabaviti u Hrvatskoj za 120 kn uz što se dobije i Mini USB kabel.

Teško je samo mahanjem rukama objasniti o čemu je riječ, zato je dobro odmah uskočiti s primjerima i upotrebom.

Sučelje kroz koje se piše kod, odnosno shema za Arduino

Sučelje kroz koje se piše kod za Arduino i šalje na pločicu

Instalacija i postavljanje uređaja za programiranje gotovi su za par minuta: potrebni paketi (SDK) za Arduino mogu se pronaći u repozitoriju gotovo svake distribucije; sistemski korisnik, kojim se planira pristupati pločici, mora biti u grupi koja ima ovlasti nad USB uređajima (u Fedori dialout i lock); u IDE-u Arduinoa treba odabrati “Arduino Duemilanove w/ ATmega328” da bi IDE mogao ispravno poslati skicu (kod programa) u Croduino.

David iz e-radionice lijepo je izložio sve potrebne korake u prvom vodiču za Croduino – isključivanje i uključivanje ugrađene ledice. Da ne bi bilo sasvim isto, ovdje ćemo napraviti varijaciju da ugrađena ledica “diktira” Fibonaccijev niz. Ako planirate pomoću Arduina slati signal u svemir pokazujući da na Zemlji ima inteligentnog života, Fibonacci daje dobru šansu da će ga izvanzemaljci prepoznati. 🙂

U programskom jeziku, čija je sintaksa slična C-ovoj, u Arduinov IDE napišemo sljedeći kod:

int led = 13; // digitalni pin 13
int wait = 200; // ms
int F[3] = {0, 1, 1}; // pocetne vrijednosti niza
int n = 2;

// pokrece se samo jednom na pocetku
void setup(){
    // inicijalizacija pina 13 kao izlazni pin
    pinMode(led, OUTPUT);
}

// beskonacna petlja u kojoj se desava sva akcija za vrijeme rada
void loop(){
    // definicija Fibonnacijevog broja
    F[n] = F[n-1] + F[n-2];
    F[n-2] = F[n-1];
    F[n-1] = F[n];

    // broj blinkanja LED-ice u ovisnosti o F[n]
    for ( int i = 0; i < F[n]; i++ ){
        digitalWrite(led, HIGH);
        delay(wait);
        digitalWrite(led, LOW);
        delay(wait);
    }
    // cekanje prije novog ciklusa
    delay(wait*5);
}

nakon čega ga pošaljemo (uploadamo) na Arduino USB kablom. Arduino će nas plavom ledicom obavijestiti da je postupak uspješno okončan.

Ugrađena ledica na pločici pridružena je pinu (digitalnom izlazu/ulazu) 13. Zato napravimo varijablu u koju ćemo spremiti tu vrijednost i kasnije je postavljati kao argument funkcijama za kontrolu tog digitalnog izlaza. Varijable n i F služe za potrebe definicije niza, a dvije funkcije: setup() i loop() nužne su u svakom programu koji se planira poslati na Arduino pločicu. Prva, setup(), predstavlja inicijalizaciju i pokreće se samo jednom pri startu, a druga, loop() zapravo je beskonačna petlja koja se neprekidno izvodi dok je pločica pod naponom. U setup() je inicijaliziran pin 13 kao izlazni pin (“šalje napon”). U loop() je iskorištena klasična C-ova for-petlja unutar koje se nalaze funkcije digitalWrite(), što predstavlja slanje napona na pin 13: prvo visoki napon (HIGH, 5V), a onda niski napon (LOW, 0V). Između je iskorištena funkcija delay() koja predstavlja pauzu u programu izraženu u milisekundama. Za detaljniji opis preporučam spomenuti Davidov video.

Drugi je primjer malo originalniji i korisniji, ali još uvijek elementaran jer još nisam dobavio dovoljno hardverskih komponenata da bih napravio nešto kompliciranije. Iskoristio sam analogni ulaz (A0) na kojem potenciometorom reguliram napon, što Croduno očitava funkcijom analogRead(). Vrijednost se normalizira uz pomoć minimalne i maksimalne vrijednosti da bi se u konačnici poslala preko serijskoga kanala (fizički je to isti USB koji se koristi i za programiranje pločice) računalu. Na računalu sam napisao kratku skriptu u Pythonu, tzv. wrapper, (kad već imamo aktualan serijal članaka o Pythonu na portalu) koja prosljeđuje putem DBusa vrijednosti očitane s Arduina KDE-ovom KMixu. Na taj način mogu pomoću potenciometra stišavati i pojačavati zvuk na računalu. Nije velika stvar, ali čovjeka veseli. 🙂

Skica za Arduino:

int sensorPin = A0; // 1. analogni pin
int sensorValue = 0, oldValue = 0; // pocetne vrijednosti potenciometra
int treshold = 10; // tek veci pomak potenciometra salje signal racunalu
int minVol = 825; // okvirna doljnja vrijednost senzora
int maxVol = 245; // okvira gornja vrijednost senzora
int scale = maxVol - minVol; // normalizacija na skalu od 0-1

void setup(){
    // inicijalizacija serijskog kanala
    Serial.begin( 9600 );
}

void loop(){
    // ocitavanje analognog pina
    sensorValue = analogRead(sensorPin);

    if( abs(oldValue - sensorValue) > treshold ){
    // slanje rezultata racunalu preko serijskog kanala
    Serial.println( 100.0 * (sensorValue - minVol) / scale );
    oldValue = sensorValue;

    // korekcija minimalne i maksimalne vrijednosti
    // da skala ne ide ispod 0% i iznad 100%
    if( minVol > sensorValue ){
        minVol = sensorValue;
        scale = maxVol - minVol;
    }
    if( maxVol < sensorValue ){
        maxVol = sensorValue;
        scale = maxVol - minVol;
    }
    delay(100);
}

Wrapper napisan u Pythonu

import serial
import dbus

# port na kojem se nalazi Arduno
arduino = serial.Serial( '/dev/ttyUSB0', 9600 )
# stream kojem se zeli kontrolirati glasnoca (naci uz pomoc qdbusviewera)
kmix_stream = '/Mixers/PulseAudio__Playback_Devices_1/alsa_output_pci_0000_00_1b_0_analog_stereo'

bus = dbus.SessionBus()
kmix = bus.get_object( 'org.kde.kmix', kmix_stream )
kmixprop = dbus.Interface( kmix, 'org.freedesktop.DBus.Properties' )

while True:
    vol = float( ( arduino.readline().strip() ) )
    kmixprop.Set( 'org.kde.KMix.Control', 'volume', vol )
Arduino uparen s potenciometrom da bi kontrolirao glasnoću zvuka na računalu

Arduino uparen s potenciometrom da bi kontrolirao glasnoću zvuka na računalu

Iako ova dva primjera ne mogu ilustrirati sav potencijal platforme, vjerujem da vam mogu dati neke ideje što biste vi sami njime mogli napraviti. Ono što se uistinu može uz pomoć Arduina, pogledajte na ovom linku. Zamislite što bi se sve moglo napraviti kada bi se Arduino upario s mini-računalom Rapsberry Pi, čime bi bio posve neovisan od “velikog” računala!

Općenito sam oduševljen cijelom idejom i realizacijom, pogotovo gomilom dokumentacija i primjera na internetu, a jedina stvar koja me živcirala bio je rudimentarni tekstualni editor unutar IDE-a u kojemu se piše programski kod. Za ozbiljnije hakiranje potreban je i ozbiljniji editor. Možda postoji plugin za VIM ili Emacs? 🙂

Svi oni koji su već ishakirali Linux “uzduž i poprijeko” te bi željeli nešto novo (nešto divlje) – preporučam da prijeđu malo i na opipljive stvari, da se vrate jednostavnosti i šarmu LEGO kockica, odnosno da isprobaju Arduino, koji je za to i stvoren. Kroz zagarantiranu zabavu možda iznikne i neki upotrebljiv izum ili umjetnička instalacija.

Hvala ekipi iz e-radionice koja je ustupila LZS-u jedan primjerak Croduina. Pored toga zaslužuju i veliki naklon na realizaciji projekta hrvatske verzije Arduina s nadom da će osvanuti više dokumentacije i vodiča na hrvatskom jeziku.

VN:F [1.9.22_1171]
Rating: 4.7/5 (28 votes cast)
Croduino - programiranje fizičkog svijeta, 4.7 out of 5 based on 28 ratings

Povezani članci:

Studentsko programersko n...
Objavljen KDE 4.9! Naglas...
OpenSUSE 12.2 prvi dojmov...
Konvertirajte s lakoćom u...
Objavljen je digiKam 3.0

16 komentara

  1. Yorkin napisao:

    Jesemtigajde kako ovo dobro izgleda 😀

  2. b4sh napisao:

    Ne da samo dobro izgleda nego izgleda da je i dobra stvar ;:

    LP b4sh

  3. Emacs napisao:

    Slažem se da je neugodan zadani IDE za programiranje. Da, naravno da postoji “plugin” (mode) za Emacs: http://www.emacswiki.org/emacs-en/ArduinoSupport

    Nisam osobno isprobao taj Emacs mode jer nisam ni previše programirao za Arduino, no zato što je u Emacsu je već po definiciji bolji od zadanog Arduinovog okruženja 😉

    • Mislo napisao:

      Pa naravno da će rikavat treba kupiti original ja ga imam 2 godine svašta je prošao samnom i eno ga jos radi….napominjem kupujte originalne Arduino ploćice i nećete se razočarati—a svi ovi ostali nazovimo ih klonovi su smeće 🙂

      • gGrga napisao:

        Na zalost, moram potpisati ovo jer koristim jednu kpiju arduino plocice i skoro me ta kopija kostala 2000 kn… od tada samo oriđinale 😉

        • 4ndY napisao:

          Možete me uputiti u čem je fora? U kvaliteti ugrađenih elemenata ili? Ako je kopija napravljena po specifikaciji i s istim elementima, što se sve može razlikovati? Kvaliteta lema? N00b sam u području elektronike pa pitam…

          • jurastublic napisao:

            Reko bih uglavnom u nestručnom spajanju s vanjskim uređajima, pri čemu se ne vodi briga o dodatnoj zaštiti I/O portova i naponskog regulatora.

            • gGrga napisao:

              Osobno, sa lemljenjem sam dovoljno dobro upoznat, stari mi je elektricar, srednja elektrotehnicka i studij informatika. samo sam iznio svoje iskustvo, nisam isao predaleko sa proucavanjem zasto je zablokirala jer mi je jefitnije naruciti skuplju a bolju. razmisljao sam cak i o izradi vlastite ali mi to nije isplativo.

              postoje namjene arduiono plocica i nekome ta plocica lezi na podu, nekome sluzi za upravljanje rasvjetom ili otvaranje garaze. mene osobno zanimaju bespilotne letjelice i mene svaki pad potencijalno kosta.

  4. McLex napisao:

    sviđa mi se kaj nas ima više koji se bavimo arduinom… preporučam svakome tko želi naučiti programirati, jer sa primjerima vam netreba nikakvo predznanje… tri godine igranja sa arduinom i razvijam svoju edukacijsku maketu pid regulatora za završni rad baziranu na arduinu, a strojar sam…

  5. coolaid napisao:

    hmm.. 120 kn.. shut up and take my money 🙂

  6. darkborn napisao:

    > “Zamislite što bi se sve moglo napraviti kada bi se Arduino upario s mini-računalom Raspberry Pi, čime bi bio posve neovisan od “velikog” računala!”
    http://www.kickstarter.com/projects/john-cole/arduberry-unite-raspberry-pi-and-arduino

Ostavi komentar

© 2017 Linux Za Sve. | Impressum | Sadržaj je licenciran pod CC-SA-3.0 ako nije drugačije naznačeno.
Proudly designed by Theme Junkie.