Arduino Leonardo

Arduino LeonardoLeonardo je najnovším prírastkom do rodiny Arduina. V poslednom čase začali pribúdať veľmi zaujímavé verzie ako napríklad Arduino Ethernet. Leonardo je však jedinečný tým, že ako prvé Arduino využíva mikroprocesor ATmega32u4 (datasheet). Ten obsahuje 20 digitálnych vstupov/výstupov z ktorých 7 je schopných PWM. Niekoho môže tiež potešiť Micro USB port. Zlatým štandardom pri Arduine – 32 KB pamäte pre samotný program asi nič nepokazí.

 

MODKIT – Programovanie Arduina bez znalosti kódu

Modkit logoRozmýšlali ste niekedy, že načo je vlastne programovací jazyk? Nebolo by lepšie, ak by ste mohli zariadeniu zadávať priamo čo má robiť a on by to pre Vás prekladal do kódu? Práve s takouto myšlienkou prišli páni z MODKIT-u. K vytvoreniu funkčného kódu Vám stačí drag&drop systém modulov, ktoré su ľahko zrozumitelné. Projekt je momentálne vo fáze vývoja, presnejšie vo fáze “Alpha” ako uvádzajú na hlavnej stránke alebo “Beta” ako uvádzajú v samotnom editore :-) . Asi najlepším príkladom bude ukážka, o čo sa vlastne jedná.

Modkit prostredie

V menu na ľavej strane sú k dispozícii možné operácie, ktoré stačí pretiahnúť do akejsi stromovej štruktúry v pracovnej časti okna. Programovanie týmto spôsobom si môžete vyskúšať na tejto adrese http://www.modk.it/editor/preview/. Tvorcovia softwaru sľubujú plnú kompatibilitu s Arduinom, to znamená napríklad automatickú detekciu verzie dosky po pripojení. Na všetko si treba samozrejme ešte určitý čas počkať, kým sa projekt dostane do finálnej podoby.

Modkit má byť plne kompatibilný s arduinom

Arduino teplomer s DS18B20

ds18b20 senzor a Arduino

V predchádzajúcom článku sme si predstavili zbernicu 1-wire, po ktorej mnohé zariadenia komunikujú. Dnes si pripojíme snímač teploty DS18B20. V tomto príklade použijeme len jeden snímač, ale pripojiť ich možme hneď niekoľko bez väčších zmien v kóde. Datasheet a popis pinov DS18B20 nájdete tu. V jednoduchosti nám stačí pripojiť pin 1 na ZEM (-), pin 2 na Arduino pin 6, pin 3 na +5V. Ešte je potrebné doplniť 4.7k rezistor medzi pin 2 a 3 snímača.

Ako prvý nasleduje kód, ktorý nám vyhladá všetky 1-wire zariadenia pripojené na zbernici. Následne vypíše ich unikátne adresy, ktoré si poznačíme a použijeme ich v ďalšom kóde ako identifikátor nášho teplotného čidla. Nezabudnite si doplniť knižnice pre 1-wire zbernicu:

// Zdroj: http://www.hacktronics.com/Tutorials/arduino-1-wire-address-finder.html

#include <OneWire.h>

OneWire  ds(6);  // DS18B20 pripojime na pin 6

void setup(void) {
  Serial.begin(9600);
  discoverOneWireDevices();
}

void discoverOneWireDevices(void) {
  byte i;
  byte present = 0;
  byte data[12];
  byte addr[8];

  Serial.print("Hladam 1-Wire zariadenia...\n\r");
  while(ds.search(addr)) {
    Serial.print("\n\rNajdene \'1-Wire\' zariadenia a ich adresa:\n\r");
    for( i = 0; i < 8; i++) {
      Serial.print("0x");
      if (addr[i] < 16) {
        Serial.print('0');
      }
      Serial.print(addr[i], HEX);
      if (i < 7) {
        Serial.print(", ");
      }
    }
    if ( OneWire::crc8( addr, 7) != addr[7]) {
        Serial.print("CRC nieje spravne!\n");
        return;
    }
  }
  Serial.print("\n\r\n\rKoniec.\r\n");
  ds.reset_search();
  return;
}

void loop(void) {
  // nothing to see here
}

1-wire hladac adries

Tu už nasleduje samotný kód teplomeru, ktorý vypisuje aktuálnu teplotu na seriálovú konzolu (ako je zobrazené na prvom obrázku).

// Zdroj: http://www.hacktronics.com/Tutorials/arduino-1-wire-tutorial.html

#include <OneWire.h>
#include <DallasTemperature.h>

#define ONE_WIRE_BUS 6

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

DeviceAddress insideThermometer = { 0x28, 0xAA, 0x08, 0x03, 0x03, 0x00, 0x00, 0xDF };
DeviceAddress outsideThermometer = { 0x28, 0x6B, 0xDF, 0xDF, 0x02, 0x00, 0x00, 0xC0 };
DeviceAddress dogHouseThermometer = { 0x28, 0x59, 0xBE, 0xDF, 0x02, 0x00, 0x00, 0x9F };

void setup(void)
{
  // teplota sa bude zobrazovat na seriovej konzole
  Serial.begin(9600);
  // Start kniznice
  sensors.begin();
  // Nastavenie rozlisenia na 10 bitov
  sensors.setResolution(insideThermometer, 10);
  sensors.setResolution(outsideThermometer, 10);
  sensors.setResolution(dogHouseThermometer, 10);
}

void printTemperature(DeviceAddress deviceAddress)
{
  float tempC = sensors.getTempC(deviceAddress);
  if (tempC == -127.00) {
    Serial.print("Chyba, senzor neodpoveda");
  } else {
    Serial.print("C: ");
    Serial.print(tempC);
  }
}

void loop(void)
{
  delay(2000);
  Serial.print("Zistujem teplotu...\n\r");
  sensors.requestTemperatures();

  Serial.print("Vnutorna teplota: ");
  printTemperature(insideThermometer);
  Serial.print("\n\r");
  /*Serial.print("vonkajsia: ");
  printTemperature(outsideThermometer);
  Serial.print("\n\r");
  Serial.print("Pivnica: ");
  printTemperature(dogHouseThermometer);
  Serial.print("\n\r\n\r");*/
}

Zopár chybových hlásení a ako ich opraviť

Najčastejšie chyby s ktorými sa môžte stretnúť pri prechode zo starších verzií Arduino Softwaru na najnovšiu “Arduino 1.0″. (Postupne budem dopĺňať)

call of overloaded ‘write(int) is ambigous

Serial.print(00, BYTE);

nahradíme za:

Serial.write((byte)0x0);

WConstants.h: No such file or directory

#include <WProgram.h>

nahradíme za:

#include <Arduino.h>

Arduino a 1-Wire protokol

1-wireNa dnes som si pripravil trochu teórie, predtým ako budú pribúdať zapojenia s použitím 1-Wire protokolu (one-wire). Vyvinula ho spoločnosť Dallas, ktorú vlastní firma Maxim. Protokol sa nazýva 1-wire, pretože na komunikáciu mu stačí iba jeden vodič. Typicky pracuje s napätím 2.8V až 6V a využíva CMOS/TTL logiku. Maximálne 0.8V pre logickú “nulu” a minimálne 2.2V pre logickú “jednotku”. Po 1-wire zbernici dokážeme komunikovať len v halfduplex móde, to znamená len vysielať, alebo príjmať v ten istý čas. Pri komunikácii musí byť aspoň jedno zariadenie Master (veliteľ). Každé 1-wire zariadenie má jedinečnú 64-bitovú adresu, ktorú využíva pri identifikácii na 1-wire zbernici. Skladá sa z 8-bitov identifikujúcich typ zariadenia, 48-bitového sériového čísla a nakoniec 8-bitové CRC. Štandardne sa využíva CAT5 kábel (sieťový) na zapájanie 1-wire senzorových sietí. Možnosť zapojenia využíva zvyčajne 3 piny – zem, napájanie a dáta. Ďalšia možnosť je použiť tzv. parazitné zapojenie, pri ktorom sa použijú len dva vodiče – zem a dátový vodič (vstup pre napájanie sa pripojí k zemi). Táto druhá možnosť má však mnoho nevýhod (napr. nižšia spoľahlivosť prenosu dát).

Najznámejšie 1-wire zariadenia:

  • DS18B20 / DS18S20 / DS1822 – Vysoko precízny teplomer schopný merať rozsah teplôt od -55°C do +125°C pri ±0.5°C
    ds18b20
  • iButton – Sú to aj u nás známe dotykové “kľúče”, ktoré používame na vstup do vchodov panelákov a budov. Momentálne je ich v obehu po celom svete až 175 miliónov.
    ibutton 1-wire
  • DS2405 / DS2406 – vstupno výstupné zariadenie ovládané cez 1-wire. Príklad aplikácie môže byť spínacie relé (zapínanie/vypínanie svetla), alebo detekcia zopnutého kontaktu (či je okno otvorené alebo zatvorené).

Nasleduje popis komunikácie na 1-wire zbernici, ktorý sa skladá z troch fáz. Komunikácia vždy začína RESET príkazom a trvá 480 mikrosekúnd.

  1. RESET signál / Synchronizácia [RESET SEQUENCE]
  2. Príkaz pre výber cieľového zariadenia [ROM CMD SEQUENCE]
  3. Špecifický príkaz pre cieľové zariadenie [FUNCTION SEQUENCE]

1-wire signalizácia

V ďalšej časti si už pripojíme dáke to one-wire zariadenie.

Vlastný font na displeji s kontrolerom HD44780

V dnešnej dobe grafických a plne farebných displejov sa pokúsime oživiť klasiku – dvojriadkový displej schopný zobraziť úžasných 16 znakov na riadok :-)

Vlastny font na HD44780

Kontroler displeja HD44780 obsahuje ASCII tabuľku znakov, ktoré možme použiť. Navyše je tam miesto pre osem vlastných znakov. V našom prípade si vytvoríme font pre čísla od 1 do 7 a znak stupňa. Povedzme, že sme si zostrojili teplomer zobrazujúci vnutornú a vonkajšiu teplotu, ktorú chceme opticky oddeliť od textových informácií zobrazovaných na displeji. Bohužial miesto je len pre 8 vlastných znakov, takže napríklad pre teploty väčšie ako 27 stupňov možme dať podmienku, že sa použije štandardný font.

Zapojenie LCD displeja

Zdrojový kód čísla šesť bude vyzerať asi takto:

byte six[8] = {
B00000,
B00000,
B11111,
B10000,
B11111,
B10001,
B11111,
B00000
};

ASCII tabuľka znakov, ktoré máme štandardne k dispozícii.

A nakoniec samotný zdrojový kód:

// Zdroj - http://www.arduino.cc/en/Tutorial/LiquidCrystal

#include <LiquidCrystal.h>

// Inicializujeme piny na ktorych je pripojene lcd.
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

byte degree[8] = {
	B00000,
	B00000,
	B11100,
	B10100,
	B11100,
	B00000,
	B00000,
	B00000
};
byte one[8] = {
	B00000,
	B00000,
	B00001,
	B00001,
	B00001,
	B00001,
	B00001,
	B00000
};
byte two[8] = {
	B00000,
	B00000,
	B11111,
	B00001,
	B11111,
	B10000,
	B11111,
	B00000
};
byte three[8] = {
	B00000,
	B00000,
	B11111,
	B00001,
	B11111,
	B00001,
	B11111,
	B00000
};
byte four[8] = {
	B00000,
	B00000,
	B10010,
	B10010,
	B11111,
	B00010,
	B00010,
	B00000
};
byte five[8] = {
	B00000,
	B00000,
	B11111,
	B10000,
	B11111,
	B00001,
	B11111,
	B00000
};
byte six[8] = {
	B00000,
	B00000,
	B11111,
	B10000,
	B11111,
	B10001,
	B11111,
	B00000
};
byte seven[8] = {
	B00000,
	B00000,
	B11111,
	B00001,
	B00001,
	B00001,
	B00001,
	B00000
};
byte eight[8] = {
	B00000,
	B00000,
	B11111,
	B10001,
	B11111,
	B10001,
	B11111,
	B00000
};
byte smile[8] = {
	B00000,
	B00000,
	B01010,
	B01010,
	B00000,
	B10001,
	B01110,
	B00000
};
byte nine[8] = {
	B00000,
	B00000,
	B11111,
	B10001,
	B11111,
	B00001,
	B11111,
	B00000
};
void setup() {
  // Vytvorime znaky.
  lcd.createChar(0, degree);
  lcd.createChar(1, one);
  lcd.createChar(2, two);
  lcd.createChar(3, three);
  lcd.createChar(4, four);
  lcd.createChar(5, five);
  lcd.createChar(6, six);
  lcd.createChar(7, seven);  

  // Nastavime rozmer lcd - 16 znakov, 2 riadky.
  lcd.begin(16, 2);

  // Zobrazenie znakov, zacneme na pozicii znak 0, riadok 0.
  lcd.setCursor(0,0);
  lcd.write("arduino.sk");

  lcd.setCursor(0,1);
  lcd.write((byte)1);
  lcd.write((byte)2);
  lcd.write((byte)3);
  lcd.write((byte)4);
  lcd.write((byte)5);
  lcd.write((byte)6);
  lcd.write((byte)7);
  lcd.write("12345");

  lcd.setCursor(13,0);
  lcd.write((byte)2);
  lcd.write((byte)7);
  lcd.write((byte)0);

  lcd.setCursor(13,1);
  lcd.write((byte)1);
  lcd.write((byte)2);
  lcd.write((byte)0);
}

void loop() {
}

Vlastný znak môže byť čokoľvek od srdiečok až po indikátor stavu vybitia batérie. Nakoniec prikladám zopár inšpirácií – pozrite si tu, tiež tu a tu.

Arduino výstup na televízor (TV-out)

Arduino výstup na TV

Arduino je obľúbené najmä kvôli svojej jednoduchosti a možnosti pripojiť takmer čokoľvek. V dnešnom projekte pripojíme Arduino k televízoru cez video vstup. Budeme k tomu potrebovať len tri rezistory a konektor CINCH. Pripojiť môžeme akýkoľvek televízor na ktorom je dostupný AV vstup (žltý cinch konektor). V mojom prípade som mal k dispozícii starší televízor so SCART konektorom a redukciu na CINCH. Všetky rezistory som našiel na matičnej doske, ktorú si odkladám práve pre takéto príležitosti. Sú vo vyhotovení SMD čo mi len vyhovuje, keďže hodnota odporuje je napísaná priamo na nich a nie je potrebné pracne hľadať ten pravý. Napríklad 750 znamená 75?, 102 bude 1k? a 471 sa rovná 470? (posledná číslica značí počet núl). Zapojíme podľa schémy:

Arduino TV výstup - schéma zapojenia

Fyzické zapojenie by sme mali hotové, nasleduje zdrojový kód. Musím sa priznať, že mi trochu trvalo kým som našiel knižnicu, ktorá fungovala v režime PAL a taktiež s Atmega168. Taktiež som musel použiť sofware vo verzii 0.22 (stiahnite tu), na najnovšom Arduino 1.0 sa mi nepodarilo program skompilovať.

Cinch výstup pre Arduino

#include <TVout.h>

TVout TV;

void setup() {
TV.begin(_PAL,128,48); // rozlíšenie (viac nefunguje na atmega168)
}

void loop() {
TV.clear_screen();

TV.select_font(_3X5);
TV.print_str(0,40,"Mensi font");

TV.select_font(_8X8);
TV.print_str(0,16,"Vacsi font");
TV.print_str(0,0,"AHOJ SVET");

TV.draw_line(1,11,120,11,2); // x,y x,y kreslenie ciar

TV.delay_frame(50);
}

K čomu je pripojenie Arduina k TV vlastne dobré? Predstavte si že potrebujete vyrobiť narýchlo hlasovací systém. Výsledky sa musia na niečom zobraziť a starší TV je najlacnejšia voľba. K Arduinu môžeme pripojiť takisto malé sedem palcové LCD na ktorom sa nám bude zobrazovať stav bezpečnostného systému, prípadne teploty izieb celého domu/bytu. Displejov môže byť pripojených paralelne hneď niekoľko, keďže sa jedná o analógové pripojenie. Príkladov je mnoho, každý využije ten svoj nápad.

Knižnica TVout (stačí rozbaliť do “libraries”): http://arduino-tvout.googlecode.com/files/TVout_R5.91.zip

Schémy zapojenia a návrh plošných spojov – Fritzing

schema zapojenia LCD HD44780

Každý projekt je vhodné postupne dokumentovať, upravovať a zdokonaľovať, tak je tomu aj pri Arduine. Na začiatok môžeme použiť papier, ten nám však nebude postačovať na dlho. Dnes si predstavíme nástroj, ktorý nám neskutočne urýchli celý proces od prototypu až po hotový výrobok. Za nemecky znejúcim názvom programu sa skrýva univerzita a open-source komunita z Berlína. Musím uznať, že programov na kreslenie schém je veľa a väčšina bude stáť za starým dobrým EAGLEom. Napriek tomu je Fritzing na prvom mieste pri aplikáciách Arduina. Dôvodov je niekoľko:

  • Užívateľský príjemné prostredie
  • Začiatočníci v elektronike ho milujú
  • Preddefinované Arduino vývojové dosky a s tým súvisiace komponenty
  • Kompatibilita s rôznymi operačnými systémami (stiahnite tu)
  • Export plošného spoja jedným kliknutím do PDF so všetkými vrstvami

Fritzing PCB

Fritzing je momentálne vo verzii Beta a každým updatom pribúda kopa funkcií a vylepšení. V najnovšej verzii si priamo z hlavného menu môžete dokonca svoj prototyp plošného spoja objednať “File” -> “Order a PCB”. Ďalšou možnosťou je export návrhu plošného spoja do PDF. Program vyexportuje do nami zvoleného priečinku päť samostatných súborov, v každom sa nachádza jedna vrstva kompletného plošného spoja. Potom je už len na Vás, či si plošný spoj vyrobíte doma, alebo pošlete firme, ktorá ho podľa podkladov vyrobí.

plošný spoj

Pre návrh plošného spoja je k dispozícii aj funkcia “autoroute”, ktorá v podstate urobí všetku robotu za nás. Dôležité je len, aby sme mali schému správne navrhnutú v “Schematic” tabe.

Fritzing schéma

Celkovo je Fritzing výborný nástroj pre začiatočníkov a takisto pokročilých elektrotechnikov, ktorý potrebujú venovať čas vývoju a nie úlohám, ktoré zvládne software za nás. Nezabúdajme, že vývoj programu stále pokračuje, takže môžeme očakávať neustále vylepšenia.

Začíname s Arduinom

Na začiatok si predstavíme plošný spoj asi najrozšírenejšej verzie Arduina, volá sa Diecimila. Na obrázku sú už popísané všetky komponenty, takže len v skratke. Nachádza sa tam samotný mikroprocesor ATMEL ATmega168, ktorý má 16Kb pamäte, zopár LEDiek zobrazujúcich aktivitu a samozrejme vstupy/výstupy.

Arduino Diecimila Komponenty

Úspešne sme si zakúpili svoje prvé Arduino a k tomu, aby sme mu dali život ho potrebujeme naprogramovať. Čo budeme potrebovať:

  • samotné Arduino (Diecimila, Nano, atď.)
  • USB kábel
  • Obslužný program

Program “Arduino 1.0″ si môžte stiahnuť z uvedených linkov:

Arduino 1.0

V menu programu bude ako prvé potrebné vybrať vašu verziu Arduina (Tools -> Board). Po tomto kroku si možme otvoriť vzorový kód pre blikajúcu LEDku (File -> Examples -> 1.Basics -> Blink). Klikneme na upload a na Arduine sa rozbliká LEDka. Toľko na úvod a možme ísť na niečo zložitejšie.