Hissi

Johdanto

Edellisessä harjoituksessa opettelit käyttämään moottoreita Arduinon kanssa ja rakensit Maker kitissä olevien levyjen avulla liikkuvan robotin, joka kykeni kulkemaan lattialla tai muilla tasaisilla pinnoilla. Mutta mitä, jos haluaisit liikuttaa asioita pystysuunnassa?

Tässä harjoituksessa rakennetaan minihissi, jossa matkustaja liikkuu ylös tai alas. Aluksi hissiä käytetään kahden napin avulla. Tämän jälkeen pääset kutsumaan hissiä napeilla kerroksesta toiseen. Tällöin hissin täytyy muistaa aina se, missä kerroksessa se on viimeksi ollut.

Alla on video eräästä hissiprojektista. Vaikka käytössäsi ei ole esimerkiksi stepper-moottoria, voit käytännössä toteuttaa samanlaisen projektin ajastamalla Maker kitin moottoreita.

Arduino Israel Projects: Arduino Elevator

Tarvikkeet

Mehackit boardin (tai Arduinon), USB-johdon, koekytkentälevyn ja johtimien lisäksi tarvitset seuraavat komponentit.

OsaKuvaKuvaus
Vaihdemoottori tai Pyörivä servomoottoriMaker kitissäsi on joko kaksi mustaa vaihteistettua moottoria tai kaksi sinistä pyörivää servomoottoria. Vaihdemoottorit ovat tavallisia DC-moottoreita, joissa on sisällä hammasrattailla toteutettu vaihteisto. Servomoottorin sisällä on moottorin ja vaihteiston lisäksi hieman ohjauselektroniikkaa.
Painonappi x 3Mehackit Maker Kitin painonappi on valkoinen, ei ruskea.
Ohutta narua tai lankaa
3 kynää tai tikkua, teippiä yms. askartelutarvikkeita hissiä varten.

Virtapiiri

Tarvitset hissiin yhden vaihteistetun DC-moottorin tai pyörivän servomoottorin. Jos olet jo valmiiksi kytkenyt kaksi moottoria, älä turhaan irroita toista. Jos olet rakentanut liikkuvan robotin rungon harjoituksessa Pyörillä ajeleva robotti, sinun ei myöskään kannata purkaa sitä - voit rakentaa hissin pitämällä moottorin kiinni rungossa.

  • Liitä virtapiiriin moottorin lisäksi kolme painonappia portteihin 5, 6 ja 7.
  • Alla on virtapiirikaaviot DC-moottorille ja servomoottorille.
  • Et tarvitse yhden moottorin käyttämiseen ulkoista virtalähdettä, vaan voit käyttää sitä Arduinon 5V-portin kautta.

DC-moottori:

Servomoottori:

Ohjelman tavoite

Ensimmäinen vaihe: Kun porttiin 5 kiinnitettyä nappia pidetään pohjassa, moottori pyörii tasaisella vauhdilla (hissi nousee). Kun porttiin 6 kiinnitettyä nappia pidetään pohjassa, hissi pyörii vastakkaiseen suuntaan (hissi laskee).

Toinen vaihe: Kun porttiin 5 kiinnitettyä nappia painetaan, hissi tulee kerrokseen 1. Kun porttiin 6 kiinnitettyä nappia painetaan, hissi tulee kerrokseen 2. Kun porttiin 7 kiinnitettyä nappia painetaan, hissi tulee kerrokseen 3.

Tuttujen komentojen lisäksi pääset kirjoittamaan omia funktioita.

Ohjelmointi 1/4 - Testiohjelma

Tehtävä
Laadi allaolevan ohjelmarungon pohjalta testiohjelma. Käytä testiohjelmaa apuna, kun rakennat hissin rungon seuraavan sivun ohjeiden mukaan.
void setup() {
  //Aseta portti 5 tilaan INPUT_PULLUP
  //Aseta portti 6 tilaan INPUT_PULLUP
  //Tee moottoreita varten tarvitsemasi määrittelyt.
}

void loop() {
  if(digitalRead(5) == LOW){
    //Pyöritä moottoria täydellä teholla.
  }
  if(digitalRead(6) == LOW){
    //Pyöritä moottoria täydellä teholla vastakkaiseen suuntaan.
  }
}

Hissin rakentelua

Olet luultavasti edellisissä harjoituksissa kiinnittänyt moottorit liikkuvan robotin runkoon. Tämä ei haittaa, sillä hissin voi rakentaa hyvin siten, että moottorit on kiinnitetty levyihin.

  1. Ota kuitenkin pyörät irti moottorin navoista. Aseta tämän jälkeen moottoreista ja levyistä tehty pakettisi tukevalle alustalle.

  2. Ota sitten naru ja kiinnitä se toisen moottorin napaan silmukalla. Kun moottori pyörii, se suunnasta riippuen joko kerii narua ympärilleen tai sitten vapauttaa narua ympäriltään. Sido narun toiseen päähän jokin pieni paino.

  1. Roikota painoa pöydän ulkoreunan ylitse ja kokeile, toimiiko hissisi ensimmäinen prototyyppi. Anna moottoreille napeilla käskyjä pyöriä kumpaankin suuntaan.

  2. Tee lopuksi hissistäsi hissin näköinen. Alla on esimerkkinä muutamista legoista rakennettu hissitorni.

Ohjelmointi 2/4 - Funktiot

Seuraavaksi tehdään ohjelma, joka kutsuu hissiä hiukan ylöspäin aina nappia klikattaessa. Napin klikkauksen rekisteröivä ohjelma on tuttu kolmannen luvun harjoituksesta Kytkimet ja tilan vaihto.

Tehtävä
Täydennä alla oleva koodi ohjeiden mukaan ja syötä se Arduinolle. Klikkaile nappia, joka on kiinnitetty porttiin 5. Mitä huomaat?
int buttonState5;
int lastButtonState5;

void setup() {
  pinMode(7, INPUT_PULLUP);
  //Tee moottoreita varten tarvitsemasi määrittelyt.
}

void loop() {
  buttonState5 = digitalRead(5);
  if(buttonState5 != lastButtonState5){
      if(buttonState5 == LOW){
      	 //Jos nappia on klikattu, kutsutaan funktiota floorUp
         floorUp();
      }
      lastButtonState5 = buttonState5;
  }
}

void floorUp(){
  //Kirjoita tähän komennot, jotka pyörittävät moottoria 
  //ja nostavat hissiä ylöspäin sekunnin ajan.
}

Ohjelmointi 3/4 - Lisää funktioista

Edellisen sivun ohjelmassa kutsuttiin funktiota floorUp, jolloin hissi nousi nappia klikattaessa aina sekunnin ajan ylöspäin. Ohjelmoitaessa omien funktioiden luominen usein selkiyttää kokonaisuutta - kaikkea ei tarvitse ohjelmoida rivi kerrallaan, vaan pelkkä muualla määritellyn funktion kutsuminen riittää.

Funktio määritellään kuten alla. floorUp on tässä funktion nimi ja void viittaa siihen, että funktio ei palauta mitään arvoa (myös setup- ja loop-funktiot ovat tyyppiä void).

void floorUp() {
  //Kirjoita tähän komennot, jotka pyörittävät moottoria 
  //ja nostavat hissiä ylöspäin sekunnin ajan.
}

Funktiota voidaan kutsua muualla, esimerkiksi loopin sisällä, yksinkertaisesti kirjoittamalla funktion nimi. Tällöin funktio suoritetaan kerran, minkä jälkeen jatketaan siitä mihin loop-osassa jäätiin.

Tehtävä
Mitä tapahtuu alla olevan ohjelman perusteella? Vastaa monivalintaan.
void setup(){
  //Tee moottoreita varten tarvitsemasi määrittelyt.
}

void loop(){
  floorUp();
  delay(5000);
} 

void floorUp() {
  //Kirjoita tähän komennot, jotka pyörittävät moottoria 
  //ja nostavat hissiä ylöspäin sekunnin ajan.
}

Mitä yllä oleva ohjelma saa aikaan?

Ohjelmointi 4/4 - Valmis hissi

Tehtävä
Täydennä alla oleva ohjelma ohjeiden mukaan ja syötä se Arduinollesi. Ohjelmaan on kirjoitettu valmiiksi kohta, jossa porttiin 5 kiinnitetyllä napilla kutsutaan hissi kerrokseen 1. Sinun tulisi tehdä sama rakenne myös porteissa 6 ja 7 kiinni oleville napeille. Nämä napit kutsuvat hissin kerroksiin 2. ja 3.
Tehtävä
Funktioissa floorUp ja floorDown hissiä joko nostetaan tai lasketaan hissiä sekunnin ajan. Kun saat ohjelman valmiiksi, testaile sitä ja muokkaa aika tarkoitukseesi sopivaksi.
//Alla luodaan jokaisen napin käyttöä varten kaksi muuttujaa, 
//joiden avulla voidaan havaitaan, jos nappeja on klikattu.

int buttonState5;
int lastButtonState5;
int buttonState6;
int lastButtonState6;
int buttonState7;
int lastButtonState7;

int lastFloor; //Muuttuja lastFloor pitää kirjaa siitä, missä kerroksessa hissi on.

void setup(){
  pinMode(5, INPUT_PULLUP);
  pinMode(6, INPUT_PULLUP);
  pinMode(7, INPUT_PULLUP);
  //Tee moottoreita varten tarvitsemasi määrittelyt.
}


void loop() {
  buttonState5 = digitalRead(5);
  buttonState6 = digitalRead(6);
  buttonState7 = digitalRead(7);
  if(buttonState5 != lastButtonState5){
      if(buttonState5 == LOW){
         if(lastFloor == 1){
           //Tässä tapauksessa mitään ei tapahdu, 
           //koska hissi on jo kerroksessa 1.
           //Voit poistaa tämän if-lauseen ohjelmastasi.
         }
         if(lastFloor == 2){
           //Kutsu kerran komentoa floorDown, 
           //jotta hissi laskeutuu yhden kerroksen
         }
         if(lastFloor == 3){
           //Kutsu kaksi kertaa komentoa floorDown, 
           //jotta hissi laskeutuu kaksi kerrosta
         }
      }
      lastButtonState5 = buttonState5;
      lastFloor = 1;
  }
  //Tee sama rakenne portin 6 napille, jolla kutsutaan hissi kerrokseen 2
  //Tee sama rakenne portin 7 napille, jolla kutsutaan hissi kerrokseen 3.
}

void floorUp(){
  //Kirjoita tähän komennot, jotka pyörittävät moottoria 
  //ja nostavat hissiä ylöspäin sekunnin ajan.
}

void floorDown(){
  //Kirjoita tähän komennot, jotka pyörittävät moottoria 
  //ja laskevat hissiä alaspäin sekunnin ajan.
}

Jatkokehittelyä

Etäisyyssensorin liittäminen hissin pohjaan

Jos liität etäisyyssensorin hissin pohjaan, voit mitata sen avulla hissin korkeutta eikä sinun näin ollen tarvitse hankalasti ajastaa moottoreita.

Kerrosvalojen liittäminen

Oikeassa hississä syttyy aina valo tietyn kerroksen napin kohdalle merkkinä siitä, että hissi on tilattu kyseiseen kerrokseen. Voit liittää erivärisiä ledejä projektiisi tämän merkiksi.