22.4.2014

(abs(arvo-vanhaArvo)>100)

Olemme tässä kuukauden verran tuskailleet kiihtyvyysanturin kanssa. Koodia emme tahtoneet millään saada tehtyä ja kysymyksiä itse komponentista tuli koko ajan lisää. 

Muun muassa tällaisia kysymyksiä pohdittiin: 
- miten koota koodi, kun anturilla ei ole nollakohtaa
- sytyttää valot, sammuttaa valot määritetyn ajan jälkeen -> ei jätä valoja päälle
- jos pyörä kaatuu/heiluu tuulessa -> sytyttää valot -> valot räpsyvät
- laskuri? Niin ku mikä? Miten määritellään? Mitä se tekee? Mihin sitä tarvitaan? Miten se laitetaan koodiin? Miksi?? 
- jos pyörä liikkuu tasaista tahtia, sammuvatko valot? 
- käyttöjännite 3,3V vai 5V ?  

Pääsiäisenä tapahtui ihme ja pääsiäispupu auttoi meitä tekemään koodia. 
Ihmeeseen kuului myös tuon laskurin ymmärtäminen. Saimme tehtyä kiihtyvyysanturille koodin, joka toimii. Pääsiäispupu auttoi myös ymmärtämään koodauskieltä, jolloin kiihtyvyysanturin koodi on nyt selvää karitsan lihaa. Kiitos Pääsiäispupu! :)

Pääsiäispupu neuvoi meitä myös, miten luodaan funktioita koodin sisälle. Kokosimme koodit yhteen niin, että valovastukset, kiihtyvyysanturi ja stepperit ovat omina funktioina. Tätä emme ole vielä kokeilleet käytännössä, mutta Arduino-ohjelma hyväksyi sen... 

Kiihtyvyysanturi ratkaistiin seuraavasti: 

void kiihtyvyysanturi() {
    int xRead = analogRead(xPin);
    int yRead = analogRead(yPin);
    int zRead = analogRead(zPin);
    int arvo = xRead+yRead+zRead;

    Serial.print("x: ");
    Serial.print(xRead);
    Serial.print(" | y: ");
    Serial.print(yRead);
    Serial.print(" | z: ");
    Serial.println(zRead);
    Serial.print("arvo ");
    Serial.println(arvo);
    delay(3);

    if (laskuri < 1) { 
        if(abs(arvo-vanhaArvo) > 100) { //abs on itseisarvo, joka tekee laskun miinusmerkkisestä luvusta plusmerkkisen. >100 kynnysarvo liikkelle, mikä määrää syttyykö valo vai ei.
            digitalWrite(ledPin, HIGH); // sytyttää ledin.         
            laskuri = 100; // laskuri määritetään arvoksi 100, jolloin ledit ovat päällä 100 silmukan kierrosta.  
        }
        else { 
            digitalWrite(ledPin, LOW); //sammuttaa ledit.            
            laskuri = 0; //laskuri määritetään arvoksi 0.
        }
    }
    laskuri--; //vähentää laskurin arvosta 1.
    vanhaArvo = arvo; //tallennetaan arvo seuraavan kierroksen arvoksi.
}

Liikkeen kynnysarvo täytyy vielä määritellä pyörän kanssa, samoin kuin laskurin arvot. 
Tästä on nyt hyvä jatkaa hyvällä fiiliksellä ja uudella innokkaalla motivaatiolla (joka kävi jo aika pohjalla). :)

- V & M 

17.3.2014

(arvo1+arvo2)/2;

Tänään kokeilimme uudestaan tuota valovastus+ledi -kompoa. Pienen pohdinnan jälkeen saimme lisättyä toisen valovastuksen ja toisen ledin samaan kytkentään. Koodiin lisäsimme toisen valovastuksen (arvo2) ja muutimme valovastuksen arvon lukemisen arvo1 ja arvo2 keskiarvoon.

Toisen ledin kytkimme ensimmäisen kanssa rinnan, samaan pinniin.

Toimii! :)

Piirrettiin myös kytkentäkaavio kahdesta valovastuksesta ja kahdesta ledistä..

- V & M

11.3.2014

Valovastus ja ledi - milloin on pimeää?

 Tässä on muutamaan otteeseen yritetty saada valovastuksen arvoilla ledi syttymään.
Siis: valovastuksen jännitteen arvo < x, jolloin ledi syttyy, muutoin ledi ei pala.
Tässä yksi monesta epäonnistuneesta versiosta:

Netistä löytyi muutama erilainen malli, joilla kytkentä on saatu toimimaan meidän vaatimalla tavalla tai siitä hieman poiketen.
Monien koodimuutosten (monta eri koodia tuli tehtyä) jälkeen päädyin tällaiseen:


    int analogInput = A0; // Potentiometrin keskimmäinen jalka kytketään tähän pinniin

    int arvo = 0; // jännitteen arvo tallentaan tähän muuttujaan
   
    const int ledPin = 12;

    void setup()
    {
     
    pinMode(ledPin, OUTPUT);

    // Seuraava komento avaa sarjaliikenteen tietokoneelle nopeudella 9600 bps:

    Serial.begin(9600);

    }

    void loop() {

    // Sitten luetaan jännite analogisesta inputista:

    arvo = analogRead(analogInput);

    // Tulostetaan saalis sarjaporttiin:

    Serial.print("Jännite = " );

    Serial.println(arvo); // "Serial.println" komento vaihtaa riviä tulostuksen jälkeen
   
    if (arvo<500)
    {
    digitalWrite(ledPin, HIGH);

    // pieni tauko:

    delay(5);
    }
   
else if (arvo>500)
  {
    digitalWrite(ledPin, LOW);
   
    delay(5);
  }
  
  }

Ja tältä tämä koodi näytti:

Seuraavaksi pitää pohtia, mikä tuo jännitteen raja-arvo on pimeälle. Tulee myös miettiä miten koodia ja kytkentää tulee muuttaa, että siinä on kaksi lediä (jotka toimivat samaan aikaan) ja kaksi valovastusta, joiden jännitteiden keskiarvoa arduino lukee.

- V (M on valloittamassa maailmaa, niittämässä mainetta ja kunniaa...)

28.2.2014

Askelmoottorit ja kytkin - ne toimivat !

Pari päivää tässä kokeilimme erilaisia variaatioita saada askelmoottorit toimimaan kytkimellä. Eilen saimme moottorit toimimaan omalla koodillaan ilman kytkintä, mutta kytkimen kanssa ei tapahtunut mitään. Itse kytkentään emme siis koskeneet.

Saimme hieman apua koodin muokkaamiseen, jonka jälkeen saimme pienillä säädöillä (koodin) kytkennän toimimaan. Tässä lopputulos:


Tässä vielä kytkentäkaavio:


- V & M

26.2.2014

Askelmoottorit

Projektissamme on kaksi askelmoottoria, joiden tulisi pyöriä eri suuntiin samanaikaisesti (vipukytkimellä ohjattaessa). Ongelmaksi koitui tämä samanaikaisuus. Käytimme monta tuntia pohtien ja etsien tietoa, kysyimme opettajaltammekin apua, mutta mitään emme saaneet aikaiseksi. Lopulta kysyimme apua kurssia ohjanneelta asiantuntijalta ja saimme häneltä kaksi vaihtoehtoa miten saada askelmoottorit toimimaan. 

Äsken kokeilimme toista näistä  vaihtoehdoista: 
"Laittakaa samoista arduinon output-pinneistä johdot kahden ero darlington-boardin inputteihin, mutta päinvastaisessa järjestyksessä toiseen. Silloin toinen moottori askeltaa päinvastaiseen suuntaan."

Aluksi kokeilimme yliopiston askelmoottoreilla (ja arduino unolla), mutta emme saanu moottoreita toimimaan samanaikaisesti eri suuntiin. Samaan suuntaan ne saatiin pyörimään. 
Vaihdoimme askelmoottorit omiimme, ja pienen säätelyn (kosketushäiriöt) jälkeen saimme ne toimimaan samanaikaisesti eri suuntiin. 

Seuraavaksi meidän tulee saada askelmoottorit toimimaan palautuvan vipukytkimen kanssa, eli että vipukytkimellä saisimme säädeltyä askelmoottoreita (pyörivätkö ja mihin suuntaan). 




- V & M 

24.2.2014

Takautuvasti

Viime marraskuussa meillä oli intensiivijakso arduinosta. Jakson päätteksi saimme kuulla, että kurssityönä tulisi toteuttaa arduinolla toimiva projekti. Metallikurssin polkupyörä tuli lähes heti yhdistettyä projektiin.

Aikomuksenamme olisi saada polkupyörään valot. Aluksi meillä oli hienoja ja lennokkaita ideoita, joista projektimme lopulta sitten muotoutui. Kaikkia ideoita emme pysty tässä projektissa toteuttamaan.

Polkupyöräämme olemme tekemässä etutarakkaa, johon valojen on tarkoitus sijoittua. Valot toimisivat arduinon koodilla. Eli.

Polkupyöräämme tulee muutama valovastus, jotka "haistelevat" onko pimeää. Jos on pimeää, niin arduino alkaa lukea kiihtyvyysanturia, joka ilmaisee, että onko pyörä liikkeessä vai seisooko se paikallaan. Jos pyörä ei liiku, niin valot eivät syty, mutta jos pyörä liikkuu, niin arduino sytyttää valot päälle.

Jotta projekti sisältäisi myös jotain liikkuvaa mekaniikkaa, niin valoja pystyy säätämään askelmoottoreilla ylös-alas-suunnassa.

Joulun aikaan laitoimme tilaukseen osaset;
1 kpl Arduino pro mini 5V 328
1 kpl kiihtyvyysanturi x-y-z-suunnassa
2 kpl askelmoottoreita
x kpl valovastuksia

Vielä on ostamatta ledit, vastukset, palautuva vipukytkin ja jonkinlainen virtalähde. Nämä ajattelimme ostaa tuosta vierestä kouluelektroniikasta, joten niillä ei ole vielä niin kiire.

Tilatut osat ovat saapuneet ja olemme nyt yrittäneet koota koodia kasaan. Edellisestä kerrasta (marraskuussa) on jo sen verran aikaa, että koodien rakentaminen on taas vaihteeksi hakusessa. Pikku hiljaa asiat alkavat palautua päähän ja jotain saamme aikaiseksi. Hitaasti ja epävarmasti.

Tällä hetkellä koodimme takkuaa askelmoottorien kanssa. Tarkoituksena on siis saada kaksi askelmoottoria kääntymään yhtä aikaisesti, mutta eri suuntiin. Moottoreita pitäisi päästä säätämään yhdellä palautuvalla vipukytkimellä. Eriaikaisesti saamme moottorit kääntymään ja eri suuntiin (vielä ilman tätä vipukytkintä).

- V & M

Projektin esittely

Kaksi käsityön aineenopettajaksi opiskelevaa tyttöä tekevät polkupyörään valot, jotka toimivat arduinon käskyillä. Polkupyörää tuunataan vanhasta uudeksi saman aikaisesti toisella kurssilla. Polkupyörän valot kuuluvat mekatroniikkakurssiin ja polkupyörä metallikurssiin.

Tästä ajatus sitten lähti:
"Tahottais tehdä polkupyörään valot, jotka toimisivat jollain hämäräkytkimellä, mutta jotka ei kuitenkaan palaisi yksistään. Kytkin voisi olla kytkettynä jotenkin polkimiin tai renkaisiin niin, että kun poljin/rengas pyörähtää ja on pimeää, niin sitten vasta valot menisivät päälle. Valot ja arduino ym voisivat saada virtaa polkemisesta tai dynaamon kautta."

Tässä blogissa emme niinkään esittele polkupyörän työstön etenemistä vaan keskitymme arduinoon. 


"Arduino on avoimeen laitteistoon perustuva mikrokontrolleri-elektroniikka-alusta ja ohjelmointiympäristö."

- V & M