Arduino

Allikas: Digilabor

Sisukord

Sissejuhatus

Arduino on Atmega protsessoritel põhinev mikrokontrollerite perekond, mis on tuntud oma suure kasutajaskonna/community ja kiire prototüüpimise/arenduse poolest. Arduinoga käib kaasas ka lihtne IDE, mille saab vajadusel asendada ka sobivate harjumuspäraste tekstiredaktori ja kompileerimisahelaga.

Pilt:ArduinoDuemilanove.jpg Pilt:ArduinoMega.jpg

25. september 2010 tutvustati Dueminalove'st uut versiooni Uno, mis erineb vanemast versioonist USB kivi poolest ja parema väljundite märgistuse poolest plaadil. Arduino Uno: http://arduino.cc/en/Main/ArduinoBoardUno

Pilt:ArduinoUnoFront.jpg


Positiivseteks külgedeks on ülikiire võimalus erinevaid sensoreid ja mootoreid testida, kuna olemasolevaid näiteid ja dokumentatsiooni on tohutult. Arduinot programmeeritakse C/C++ põhineval lihtsustatud keeles. Kasutaja peab defineerima vähemalt kaks meetodit void setup() (tõmmatakse käima üks kord pärast powerup/reseti) ja void loop() (käib lõpmatus tsüklis pärast setup()-i). Programm laetakse arvutist Arduinosse üle USB kaabli.

Kahe põhilise plaadi võrdlus:

Arduino Duemilanove Mega
Processor (Amtel) AVR ATmega328 ATmega1280
KB Flash 32 128
KB EEPROM 1 4
KB SRAM 2 8
Digital I/O Pins (40 mA) 14 54
of which PWM output 6 14
Analog Input Pins 6 16

Arduino I2C

Arduinol käib I2C suhtlus üle Wire teegi. Näited on IDEs File->Examples->Wire

Arduino Duemilanovel on I2C pinnideks 4 (SDA) ja 5 (SCL), Megal 20 (SDA) and 21 (SCL). Kui tahta liidestada rohkemat kui ühte seadet, tasub tuua need pinid välja breadboardile või olemasolevale skeemile (paralleelselt). Kui kasutada pakutud pinne ja Wire teeki, siis on aktiviseeritakse sisemised pullup takistid ja väliste pullupide vajadust ei ole.

Arduino Playgroundis I2C tutvustus: http://www.arduino.cc/playground/Learning/I2C

Kaks näite-meetodit sonarite SRF10 suhtlusest.

beginRanging() kirjutab SRF10 registrisse 0x00 käsu 0x51, mis käseb sonaril alustada mõõdu võtmist ja vastus tagastada sentimeetrites.

// Ütleb sonarile, et tuleb alustada mõõtmist
void beginRanging(int addr)
{
  Wire.beginTransmission(addr); // alustame suhtlust seadmega
  Wire.send(0x00); // saadame registri aadressi
  Wire.send(0x51); // saadame käsu
  Wire.endTransmission(); // vabastame siini
}

Vastuse lugemine käiks funktsiooniga readResult() -- selleks tuleb pöörduda sonari registri 0x02 poole ja sealt saada tagasi 2 baiti.

// Küsib sonarilt vastuse
int readResult(int addr)
{
  int range = 0; 
  Wire.beginTransmission(addr);
  Wire.send(0x02);
  Wire.endTransmission();
 
  int reqSize = Wire.requestFrom(addr, 2); // tahame saada 2 baiti
  // while(Wire.available() < 2); // originaalselt peaks ootama, aga see jääb tsüklisse :(
  highByte = Wire.receive();
  lowByte = Wire.receive();
  range = (highByte << 8) + lowByte;// baidid kokku 
  return range;
}

Pole testinud, kuid software-i2c teek on ka olemas, milles saad iga digitaalse pini teha eraldi I2C pinniks: http://arduino.cc/blog/2010/10/01/softi2cmaster-library-lets-you-add-i2c-to-any-arduino-pin/

Arduino UT teek

Kui natuke rohkem on koodi olemas, võiks luua UT oma teegi, mis sisaldaks vajalike meetodeid standardsete juppidega suhtlemise jaoks. SRF10 on hea näide...

Linke

Välja otsitud andmebaasist "http://digi.physic.ut.ee/mw/index.php/Arduino"
Personaalsed tööriistad
Navigeerimine
Käsitöö