ARDUINO 2560 MEGA

1. Yleistä

3. Nastat

4. Ohjelmointi

2. Liittimet

Yleistä

 

Arduino 2560 Mega on yleiskäyttöinen, alunperin opetuskäyttöön suunniteltu mikrokontrolleri. Sen käyttö on suunniteltu mahdollisimman yksinkertaiseksi sekä johdotuksen että ohjelmoinnin osalta.

Piiri toimii oletusarvoisesti 5V TTL jännitteellä, joskin siihen on sisäänrakennettu myös 7-12V DC-syöttö. On kolme tapaa syöttää Arduinon toimintajännite:

 

-   5V DC suoraan piirin Vin -nastaan. Piiri vaatii toimiakseen 4.5V-5.5V . Yli 5.5V piiri tuhoutuu. Myös piiri tuhoutuu jos napaisuus on väärin päin. Jos jännite on alle 4.5V piiri ei toimi.

 

-   7V - 12V 5mm pyöreään standardiliittimeen. Positiivinen on keskellä. Tämä syöttötapa suojaa napaisuudelta. >12V piiri on vaarassa tuhoutua, sillä sisäänrakennettu jännitteenalennin ylikuumenee.

-   USB-liittimellä 5V 1000mA . Tämä on kätevä tapa kun piiriä ohjelmoidaan - USB-liittimen kautta kulkee myös ohjelmointidata piirille. Ohjelma säilyy flash -muistissa vuosia vaikka piiri olisi virraton

Arduinossa on 16MHz kellotaajuus, se pystyy suorittamaan noin neljä miljoonaa yksinkertaista laskutoimitusta sekunnissa. Sen ohjelmointikielet ovat yksinkertaistetut C ja C++.

Piiriin on saatavissa pilkkahintaan tuhansia oheiskomponentteja. Releitä, sensoreja yms. Se pystyy myös antamaan lineaarisesti 0V-5V ulos, joten sillä voi säätää mm. valoja ja moottoreita. Tällöin käytetään PWM (Pulse width Modulation) (huom #1)

 

Arduinon portit pystyvät myös aistimaan jännitteen välillä 0V - 5V , joten sillä pystyy aistimaan valoa, lämpöä, nesteen korkeutta, ilman happipitoisuutta, nestevirtaamaa jne.

 

Koska Arduinon logiikka on 5V eikä 12V standardiohjaukseen tarvitaan 12V virtalähde ja 5V rele ulos. Tai suoraan 5V -> 230VAC rele. Itse tilasin 8 releen kortteja muutaman - maksoivat julmat 10e/kpl

Piirilevyn koko on 95mm x 53mm. USB-liitin ulottuu 5mm piirin ulkopuolelle joten sen koko kaikkineen on 100mm x 53mm. Neljä kiinnitysreikää ovat 83mm x 50mm toisistaan.

 

Kytkentöihin käytetään tyypillisesti kytkentälevyä. Siihen yksinkertaisesti tökätään Dupont - piuhat 0,3mm - 0,8mm. Hyvä levy kestää 10.000 kertaa kiinnityksen ja irroittamisen. Se on niin vahva, että sitä voi ammattikäyttää, ei tarvitse kolvia. Ihan ohuimmat komponentit pitää juottaa paksummiksi.

 

 

Liittimet

Alla kuvassa ovat virtaliittimet. Oleellista on muistaa, että 5V syöttö ei ole suojattu väärältä napaisuudelta.Se on merkitty piiriin "Uin". Ohjausnastat ovat 0,3mm - 0,8mm lattakaapeleille joita myydään metritavarana kutakuinkin MMJ hintaan. Arduinoon sopii parhaiten 40-napainen kaapeli.

Nastat

Arduinon kaikki nastat voidaan säätää lukemaan 5V (1) tai  0V (0) signaalia ja myöskin nostamaan nastan jännitteen 0V (0) tai 5V (1). On kuitenkin järkevää käyttää vain osaa nastoja tähän tarkoitukseen. Sillä vain osalla nastoista on tiettyjä erityisominaisuuksia: dataliikenne, 0V-5V analoginen jännitteen luku ja analoginen lähtö.

TX ja RX kannattaa jättää käyttämättä koska niihin on sisäänrakennettu RS232 tietoliikenneominaisuus. Tämä on piirissä merkitty COMMUNICATIONS. Nastanumerot ovat 14-21 sekä TXD->1 ja RXD<-0 nastat. Ne ovat ohjelmointia ja näyttöä varten.

Analog Out on merkitty nimellä PWM. Nastanumerot ovat 2-13. Näillä voi suorittaa tehosäätöjä. Nastojen jännitteen voi säätää välillä 0V (0) ja 5V (255) (huom1)

Sensorien lukua varten ovat käytettävissä nastat A0 - A15. Luettaessa arvot ovat 0V (0) - 5V (1023)

Pelkästään digitaaliseen ohjaukseen ovat nastat 23-52. Nasta 22 on 0V ja 53 on 5V

OHJELMOINTI

Arduinon ohjelmointi on mahdollisimman yksinkertaista. Perusohjelmointikieli on C tai C++. Jos ei osaa kyseistä ohjelmointikieltä se ei ole ongelma. Kopioimalla tuhansista netissä olevista esimerkeistä hieman muuttamalla pääsee maaliin. C-ohjelmointikieltä voi myös halutessaan opiskella tästä.  Periaatteessa jos joskus 80-luvulla on opiskellut Commodoren kanssa BASIC-kieltä periaatteessa lähes riittää vaihtaa BEGIN END merkkeihin { } ja pistää ";" jokaisen lauseen loppuun ;

Tietokoneelle tulee ladata Arduino IDE. Yksinkertainen sovellus jolla voi ohjelmoida piirilevyn tietokoneella. Sen voi ladata vaikkapa tästä. Kun kytket kortin tietokoneen USB-liittymään ja valitset käyttämäsi piirin voit aloittaa ohjelmoinnin.

 

Arduinon ohjelmassa on kaksi osiota. Ensimmäinen osio alkaa nimellä "void setup()" . Toinen alkaa nimellä "void loop()" . setup() suoritetaan vain kerran kun virta kytkeytyy tai painetaan reset-näppäintä. loop() suoritetaan jatkuvasti, koko ajan. Huomaa, että C-ohjelmointikielessä iso ja pieni kirjain merkitsevät eri asiaa.

Sleep(millisekunttia)-komento tulee aina esiin. Jos loop-osiossa on täysi tohina kannattaa pistää sinne sleep(1) väliin. Se rauhoittaa prosessorin ja hyvin harvoin tarvitsee tekniikassa käyttää millisekunnin tarkkuudella mitään.

 

Kaikki symbolin // jälkeen on pelkästään kommenttia, sinulle itsellesi muistaaksesi mitä mikäkin komento tekee.

 

Esimerkki vilkkuvasta ledistä portissa 23:

 

void setup()

    {

    pinMode(23,OUTPUT); // pistetään portti 23 antamaan joko 0V tai 5V

    }

 

void loop()

    {

    digitalWrite(23,HIGH); // nostetaan jännite 5V

    sleep(1000) // odotellaan 1000 millisekuntia = yksi sekunti

    digitalWrite(23,LOW); // lasketaan jännite 0V (ledi sammuu)

    sleep(1000); // taas odotellaan sekunti

    }

 

Tärkeitä In-Out komentoja ovat mm:

 

pinMode(a,b); // a on nastan numero, b on joko INPUT tai OUTPUT

digitalWrite(nastanNumero,HIGH tai LOW);

i=digitalRead(nastanNumero); // palauttaa i:hin 1 tai 0 riippuen onko nastassa 5V vai 0V.

AnalogWrite(nastanNumero, luku); // pistää jännitettä 0V - 5V nastaan. luku on välillä 0-255

i=AnalogRead(nastanNumero); // palauttaa i:hin luvun välillä 0-1023 mastan jännitteestä riippuen.

 

Kaikki komennot löytyvät tästä. Allaoleva kuva on piirretty "johonkin" nastaan. Sieltä piirikortista pitää itse löytää se nasta mitä haluat käyttää.

 

Noin ylipäänsä ottaen tämä kurssi ei ole ohjelmointikurssi sähkötekniikoille eikä sähkökurssi ohjelmoijille. Ope voi tehdä ohjelmat jos tarvitaan. Oppilaan tehtävä on ymmärtää piirin mahdollisuudet ja rajoitukset, harjoituksen aiheen perusteella autettuna tehdä kytkennät.

Tällä kurssilla ovat käytettävissä ainakin:

 

- Avaimenperätunnistin RFID

- 4-numeroinen LED-näyttö ja sen multiplekseri (2)

- 3-akselinen hyrrä/kiihtyvyysmittari

- servomoottori

- askelmoottori

- askelmoottorin ohjauspiiri (helpottaa ohjelmointia)

- nappiparisto

- äänenvoimakkuusmittari

- veden pinnan korkeusanturi

- ultraäänitunnistin (lasin rikkoutuminen)

- kello

- kierretunnistin

- lämpö / kosteusanturi

- Kaukosäädin ja sen anturi

- Joystick

- LED- matriisinäyttö 64px

- yksinumeroinen LED-näyttö

- servomoottorin ohjain (helpottaa ohjelmointia)

- sarjatietoliikenteestä rinnakkaisporttiin (3)

- aktiivikaiutin

- 1-ääninen summeri

- potentiometri (ympäripyörivä)

- 5V rele 5V -> 230V

- pieni tuuletin piirin jäähdytykseen jos tarpeen

- numeronäppäppäimistö

- vastuksia, lämpövastuksia, valovastuksia, erivärisiä LEDejä

- nappulakytkin

- moottoriohjattu venttiili

- nesteen virtausmittari

- paljon muuta sälää

 

 

 

Kytkentälevy

HARJOITUSTEHTÄVÄ #1 (vaikea)

Harjoitustehtävä #1 on aika haastava. Tavoitteena on saada moottoroitu venttiili auki tai kiinni käskyn mukaan. Käsky tulee nappulasta. Jos se on pohjassa venttiili aukeaa. Jos se on vapaana niin venttiili sulkeutuu.

 

Liikkuakseen venttiili tarvitsee 12V, talo tarjoaa sen auton akusta. Sen kiertosuunta riippuu napaisuudesta, joten pitää pystyä tarjoamaan sille 12V kumminkin päin.

 

VIHJE: tarvitset kaksi vaihtokytkin-relettä. Kun molemmat ovat ylhäällä kumpikin saa nollaa, moottori ei liiku. Jos molemmat ovat alhaalla ne saavat 12V kumpaanikn nastaan moottori ei liiku. Jos rele1 on alhaalla mutta rele2 ylhäällä se liikkuu vastapäivään. Päinvastoin myötäpäivään.

 

Opettaja haluaa siihen toki myös ledit. Auki=vihreä, Kiinni=punainen, Liikkeessä=keltainen.

 

Ei huolta - ope selittää kaiken käsityön niin kauan kuin tarpeen.

HARJOITUSTEHTÄVÄ #2 (helppo)

Mittaa vesilasin veden pinta. Jos se on liian korkea sytytä punainen valo. Jos sopiva, sytytä vihrää.

Jos opelta löytyy toinenkin pinta-anturi, sytytä keltainen valo jos veden pinta on liian matala.

JÄNNITTEENJAKO

Kaikki analoginen signaali muuttuakseen jännitteeksi tarvitsee jännitejaon. Esimerkiksi NTC-lämpövastuksen vastusarvo riippuu lämpötilasta. Mutta jos sen kytkee suoraan piiriin se antaa aina 5V.

Jos NTC:mme on 12kOhm lämpötilassa 25C ja 18kOhm lämpötilassa 15C - silti se antaa aina 5V, koska se johtaa enemmän tai vähemmän kuitenkin.

 

Ratkaisu on käyttää vakiovastusta. NTC saakoon +5V, sen perään jokin väliarvovastus 15kOhm maihin. Nyt vastusten välissä on jännite, joka on 5V jos NTC on täysin johtava, 0V jos se on täysin eristävä. 2,5V kun lämpötila on 20C

Sama vedenpinta-anturissa. Mitataan yleismittarilla sen vastus kun se koskettaa veden pintaa. Pistetään sarjaan yhtä suuri vastus ja annetaan piirille niiden anturin ja vastuksen jännite.

HARJOITUSTEHTÄVÄ #3 (helppo/vaikea)

Helppo: Tee liikennevalot yhdelle tielle. 5s punaista, 1s keltaista, 5s vihreää, 1s keltaista.

Keskivaikea: tee ne risteäville teille (joka neljään suuntaan 3 valoa)

Vaikea: suunnittele yksi suojatie, jossa vuoron saadakseen jalankulkija painaa nappulaa.

5. Harjoitustehtäviä

 

 

Tärkeitä In-Out komentoja ovat mm:

 

pinMode(a,b); // a on nastan numero, b on joko INPUT tai OUTPUT

digitalWrite(nastanNumero,HIGH tai LOW);

i=digitalRead(nastanNumero); // palauttaa i:hin 1 tai 0 riippuen onko nastassa 5V vai 0V.

AnalogWrite(nastanNumero, luku); // pistää jännitettä 0V - 5V nastaan. luku on välillä 0-255

i=AnalogRead(nastanNumero); // palauttaa i:hin luvun välillä 0-1023 mastan jännitteestä riippuen. Jos haluat suoraan voltit käytä v = analogRead(nastannumero)*5/1024;

 

Kaikki komennot löytyvät tästä.

 

 

INPUT -> PUTPUT -> OUTPUT

Ei ole mitään järkeä tehdä logiikkaa jossa on pelkkä logiikka. Sen pitää saada tietoa ja antaa se eteenpäin ohjauksina. Anturit sisään (digitaalisina: 1 tai 0, tai analogisina 0V-5V) tai ohjaukset ulos (digitaalisina 1 tai 0, analogisina 0V-5V PWM)

 

Ainakin piirin pitää pystyä keskustelemaan näytön ja näppäimistön kanssa - ainakin piiriä testatessa. Siksi init() lohkoon sijoitetaan aina:

 

void init()

    {

    ....

    Serial.begin(9600);

    ...

    };

 

Tässä 9600 on nopeus bitteinä sekunnissa. Nyt voidaan kirjoittaa lukuja näyttöön loop() -osiossa vaikkapa cout << luku << newl; . Cout on varattu sana joka tarkoittaa aina näyttöä.

 

 

Mukava vastusten värikkodisivu on osoitteessa https://www.digikey.fi/fi/resources/conversion-calculators/conversion-calculator-resistor-color-code

VALMISTAJAN HARJOITUSTEHTÄVIÄ:

nippari.com/arduino/joy-it.pdf