Language Switcher Fallback

Robotex 2018 tuletõrjumise võistluse roboti juhend

Esimene video: Sissejuhatus

 

Võistlusele registreerumine ja reeglid: https://robotex.international/et/voistlused/tudrukute-tuletorjumise-voistlus/

 

Teine video: Robotiplatvorm

Kolmas video: Arduino kontroller

Nejlas video: Seina ja joone andurid (valmib tulevikus)

Viies video: Leegi andurid ja ventilaator (valmib tulevikus)

Kuues video: Võistlusülesande kood (valmib tulevikus)

Komponendid

Elektroonika komponente saab tellida Aliexpressist, hetkeseisuga Eestist kõiki neid osta ei saa. (Hinnad kõiguvad veidi ajas.)
Minul on olnud probleeme Yanwen Economic Air Mail postiteenusega, võimalusel vali muu.

  1. 2tk DC mootor koos rattaga
    (https://www.aliexpress.com/item/TT-Motor-130motor-with-the-wheel-Smart-C... 1.58€x2 )
  2. Arduino UNO
    (https://www.aliexpress.com/item/Original-DOIT-Free-Shipping-high-quality... 3.27€)
  3. Arduino proto shield mini maketeerimislauaga
    (https://www.aliexpress.com/item/Free-Shipping-UNO-Proto-Shield-prototype... 0.91€)
  4. 3 tk leegisensoreid (peaks kindlasti olema selline, millel on küljes 4 juhtmeühendust)
    (https://www.aliexpress.com/item/LM393-4-Pin-IR-Flame-Detection-Sensor-Mo... 0.30€x3)
  5. 2 tk infrapuna joone-andureid TCRT5000 sensoriga
    (https://www.aliexpress.com/item/2PCS-TCRT5000-Infrared-Reflective-IR-Pho... komplekt 2 tk 0.76€)
  6. 2 tk ultraheli kaugusandureid US-015
    (https://www.aliexpress.com/item/US-015-Ultrasonic-Senor-Module-Distance-... 1.16€x2)
  7. H-bridge L298N moodul
    (https://www.aliexpress.com/item/L298N-Dual-H-Bridge-Stepper-Motor-Driver... 1.26€)
  8. Mosfeti moodul IRF520
    (https://www.aliexpress.com/item/Top-Mosfet-Button-IRF520-Mosfet-Driver-M... 0.54€)
  9. Ventilaator, 5V pinge jaoks
    (https://www.aliexpress.com/item/1-pcs-5015S-5V-0-1-0-3A-Black-Brushless-... 1.16€)
  10. Patareikarp 4-le AA patareile
    (https://www.aliexpress.com/item/1PCS-Plastic-Battery-Storage-Case-Box-Ho... 0.41€)
  11. 9V patarei klemm, mille juhtme teises otsas Arduinole sobilik toite-ots
    (https://www.aliexpress.com/item/9V-DC-Battery-Power-Cable-Plug-Clip-Barr... 0.22€)
  12. Lüliti moodul
    (https://www.aliexpress.com/store/product/12X12MM-Big-key-module-Big-butt... 0.58€ - vali Yanweni asemel teine postiteenus)
  13. Dupont juhtmete komplekt
    (https://www.aliexpress.com/item/40p-20cm-female-to-male-and-female-to-fe... 2.37€)
  14. Krokodillijuhtmete komplekt
    (https://www.aliexpress.com/store/product/10pcs-50cm-Double-ended-Alligat... 1.97€)
  15. Caster ehk tugi ratas
    (https://www.aliexpress.com/item/Metal-Caster-Universal-Wheel-Eye-Ball/32... 0.80€)
  16. Vajadusel USB 2.0 A-B juhe Arduino programmeerimiseks. Eespool näidatud lingilt Arduinot tellides sain ma kaasa nii lühikese juhtme, mis elu väga ebamugavaks teeb, hea oleks leida pikendus. Või - samasuguseid juhtmeid kasutavad tavaliselt printerid ja skännerid - laena sealt. Kui ei leia, siis telli.
    (https://www.aliexpress.com/store/product/Supply-black-USB2-0-printer-lin... 2.65€)

 
Vanema vanuserühma roboti jaoks, mis erineva kõrgusega küünlaid kustutab:
17. 2 väikest servomootorit (https://www.aliexpress.com/item/2Pcs-EMAX-ES08MA-II-Mini-Metal-Gear-Anal... 7.8€)
 
 

Tööriistad ja materjalid

Videotes näitan, kuidas ehitada robot valmis kõige vähemate tööriistade ja kõige kättesaadavamate materjalidega, mis ma välja mõelda oskasin. Kui Sul on olemas rohkem vahendeid, siis kasuta neid julgelt oma äranägemise järgi.
Minimaalselt vajalik:

  1. Trell ja puuriotsikud (akutrelli asemel saab ka käsitsi opereeritavad puuri kasutada, sest läbida on vaja vaid paksu pappi)
  2. Kuuma liimi püstol ja liimipulgad
  3. Peene otsaga näpitsad
  4. Juhtme lõikamiseks sobilikud tangid
  5. Väiksemat sorti kruvikeeraja (moodulite kruviklemmidele sobib nii lapik kui ristpea)
  6. Terav nuga (või muu tööriist juhtme koorimiseks)
  7. Käärid
  8. Kahepoolne teip - paks, pehme sort
  9. Must isoleerpael
  10. MacGyveri teip ehk duct tape
  11. PVA liim
  12. Joonlaud või paberile printimise võimalus
  13. Pappi suuruses vähemalt 20x20cm, näiteks müsli karbid, aga mitte lainepapp vaid ühekihiline
  14. AA patareisid 4tk
  15. 9V patarei (kindlasti osta Alkaline märgistusega, teised saavad liiga ruttu tühjaks, sama kehtib ka AA patareide kohta)
  16. Välgumihkel - esialgseks testimiseks turvalisem kui küünlad, mis ümber võivad minna
  17. Teeküünal hilisemaks testimiseks

 
 
Kasuks tuleb:
Jootekolb, jootetina traat kampoliga - mootoritele juhtmete külge jootmine tuleks töökindlusele kasuks.
 
 

Teine video: robotiplatvormi ehitus

Roboti papist kere täpse joonise avaldan tulevikus, kui teised jupid on samuti külge pandud ja saan kõige asukohad ära näidata.

H-sillale juhtmete ühendamise skeem allpool pildina.

Kolmas video: Arduino sissejuhatus

Arduino IDE allalaadimine

https://www.arduino.cc/en/Main/Software

Mootori driveri juhtmed

Joonis on allpool.

Mootorite testimise kood

Kustuta Arduino IDEs valge ala täiesti tühjaks ja kopeeri järgnev joonte vahel olev tekst asemele, vaata, et algus ja lõpp ei saaks midagi ülearust ega kaotaks ühtki märki.


void setup() { //Siit algab see osa koodi, mis jookseb alguses üks kord.
  //Ütleme oma ühendatud sisend/väljunditele, et nad hakaku väljunditeks.
  pinMode(3, OUTPUT);//parem edasi
  pinMode(5, OUTPUT);//parem tagasi
  pinMode(6, OUTPUT);//vasak edasi
  pinMode(9, OUTPUT);//vasak tagasi

  //Lülitame nad kõik välja
  analogWrite(3, 0);
  analogWrite(5, 0);
  analogWrite(6, 0);
  analogWrite(9, 0);

  delay(5000);//Enne liikuma hakkamist ootame 5 sekundit
  
}//Siin lõppeb see osa koodi, mis jookseb alguses üks kord.


void loop() {//Siin algab see osa koodi, mis jääb kordama.

  //sõidame otse
  analogWrite(3, 150);//sisend/väljund number 3 on parem edasi
  analogWrite(6, 150);//sisend/väljund number 6 vasak edasi
  // 150 eelmistel ridadel on number skaalalt 0-255, 
  // mis määrab, kas mootor lülitub täie võimsusega (255)
  // või aeglasemale kiirusele sisse. Alla 150 võib juhtuda, et ei jäksa liikuda.
  delay(1500);//Kui kaugele sõita jõuab, sõltub sellest ajavahemikust siin.

  //peatume hetkeks
  analogWrite(3, 0);//Number 0 lülitab mootori välja.
  analogWrite(6, 0);
  delay(500);

  //Pöörame vasakule
  analogWrite(3, 150);//sisend/väljund number 3 on parem edasi
  analogWrite(9, 150);//sisend/väljund number 9 on vasak tagasi
  delay(1000);//Kui palju pöörame, sõltub sellest ajavahemikust siin

  //Peatume hetkeks
  analogWrite(3, 0);
  analogWrite(9, 0);
  delay(500);

}//Siin lõppeb see osa koodi, mis jääb kordama.

Neljas video: Sensorid

Joonesensorite ühendused

Vasakpoolne sensor:

Sensori pin Arduino / protoshiledi ühendus
VCC 5V (protoshiledi 5-ne pesa)
GND GND (protoshiledi 5-ne pesa)
DO 7
AO (jääb ühendamata)

Parempoolne sensor:

Sensori pin Arduino / protoshiledi ühendus
VCC 5V (protoshiledi 5-ne pesa)
GND GND (protoshiledi 5-ne pesa)
DO 8
AO (jääb ühendamata)

Joonesensorite testimise kood

/**
 * Joone andurite testimise kood. Saadab lugemi seeriamonitori.
 */
 
 /*Defineerime muutujad millesse salvestame pinide numbrid, kuhu andurid ühendatud on.
 Need aitavad inimesel koodi lugedes sellest palju kergemini aru saada.*/
 int jooneandur_vasak = 7;
 int jooneandur_parem = 8;  
 
void setup() {
  /*Määrame jooneandurite pinid sisenditeks.*/
  pinMode(jooneandur_vasak, INPUT);
  pinMode(jooneandur_parem, INPUT);

  /*Paneme tööle arvutiga suhtluse seeriamonitori kaudu.*/
  Serial.begin(9600);
}

void loop() {
  /*Defineerime muutujad anduri hetkeväärtuse sisselugemiseks.*/
  int joon_vasak;
  int joon_parem;//Esialgu neisse pole väärtust salvestatud.
  
  /*Loeme andurite seisu ja salvestame oma muutujasse.*/
  joon_vasak = digitalRead(jooneandur_vasak);
  joon_parem = digitalRead(jooneandur_parem);
  /* digitalRead() on fuktsioon, mis loeb pini digitaalse väärtuse - annab
  vastuseks kas 0 või 1.*/

  /*Saadame salvestatud andurite lugemi seeriamonitori.*/
  Serial.print("vasak: ");//Jutumärkides on string ehk tekst
  Serial.print(joon_vasak);//ilma jutumärkideta on muutuja nimi, see asendub muutuja väärtusega
  Serial.print("  parem: ");//print kirjutab ilma reavahetuseta
  Serial.println(joon_parem);//println lisab lõppu reavahetuse

}

Kaugussensorite ühendused

Vasakpoolne (paremale vaatav) sensor

Sensori pin   Arduino / protoshiledi ühendus
VCC   5V (protoshiledi 5-ne pesa)
Trig ühenduvad omavahel samale breadboardi reale 11
Echo
GND   GND (protoshiledi 5-ne pesa)

Parempoolne (vasakule vaatav) sensor

Sensori pin   Arduino / protoshiledi ühendus
VCC   5V (protoshiledi 5-ne pesa)
Trig ühenduvad omavahel samale breadboardi reale 12
Echo
GND   GND (protoshiledi 5-ne pesa)

Kaugussensorite testimise kood

/**
 * Kaugusandurite testimise kood. Saadab lugemi seeriamonitori.
 */

/*Kaugusandurid on erinevad näiteks joone anduritest selle poolest, et nad ei
edasta arduinole igal ajaheltkel pinge taset vastavalt sellele, kas näevad midagi või ei.
Vaid nad esiteks võtavad vastu käskluse, et nüüd hakaku mõõtma. Ja peale seda
tagastavad signaali, et nüüd tuli kaja tagasi. Arduino peab ise arvet pidama, kui
pikk aeg möödus sellest, kui ta andis käskluse mõõtma hakata kuni selleni, kuni
andus kaja saamisest märku andis. Selle ajavahemiku järgi ja heli levimise kiiruse
põhjal arvutatakse välja, kui kaugelt kaja tagasi tuli, mis ongi distants lähima objekini.
Aga selle keerulise protsessi on teised inimesed juba valmis programmeerinud ja
pakkinud selliseks ajsaks nagu library ehk teek. Library kasutamiseks tuleb see 
1. installeerida (vt Sketch->Include libraries->Manage libraries. Otsi
NewPing nimeline ja installeeri see.
2. Leida File->Examples->[library nimi] alt näidiskood ja sealt vajalikud osad enda
koodi ümber kopeerida.
Esimene asi, mis tuleb kopeerida on library include rida:*/
#include 

/*Teine asi, mis kopeerida, on libaray objekti loomise rida. Meil on 2 sensorit,
peame teisele tegema teise rea juurde. */
NewPing sonarParemale(11, 11, 200);//11 on Arduino pin, kuhu anduri ühendasime, 200 on max kaugus
NewPing sonarVasakule(12, 12, 200);//12 on Arduino pin -,,-



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

void loop() {
  Serial.print("Paremal on ruumi ");
  Serial.print(sonarParemale.ping_cm());//sonarParemale.ping_cm() on siin funktsioon, mis tagastab
  //mõõdetud kauguse numbri
  Serial.print(" cm. \t");
  delay(100);
  Serial.print("Vasakul on ruumi ");
  Serial.print(sonarVasakule.ping_cm());
  Serial.println(" cm.");
  delay(900);
}

Leegisensorite ühendused

Vasakpoolne sensor:

Sensori pin Arduino / protoshiledi ühendus
VCC 5V (breadboardile laiendatud riba)
GND GND (breadboardile laiendatud riba)
DO (jääb ühendamata)
AO A2

Keskmine sensor:

Sensori pin Arduino / protoshiledi ühendus
VCC 5V (breadboardile laiendatud riba)
GND GND (breadboardile laiendatud riba)
DO (jääb ühendamata)
AO A1

Parempoolne sensor:

Sensori pin Arduino / protoshiledi ühendus
VCC 5V (breadboardile laiendatud riba)
GND GND (breadboardile laiendatud riba)
DO (jääb ühendamata)
AO A0

Leegisensorite testimise kood

/**
 * Leegi andurite testimise kood. Saadab lugemi seeriamonitori.
 */
 
 /*Defineerime muutujad millesse salvestame pinide numbrid, kuhu andurid ühendatud on.*/
 int leegiandur_vasak = A2;
 int leegiandur_keskmine = A1;
 int leegiandur_parem = A0;  
 
void setup() {
  /*Määrame leegiandurite pinid sisenditeks.*/
  pinMode(leegiandur_vasak, INPUT);
  pinMode(leegiandur_keskmine, INPUT);
  pinMode(leegiandur_parem, INPUT);

  /*Paneme tööle arvutiga suhtluse seeriamonitori kaudu.*/
  Serial.begin(9600);
}

void loop() {
  /*Defineerime muutujad anduri hetkeväärtuse sisselugemiseks.*/
  int infrapuna_vasak;
  int infrapuna_keskmine;
  int infrapuna_parem;//Esialgu neisse pole väärtust salvestatud.
  
  /*Loeme andurite seisu ja salvestame oma muutujasse.*/
  infrapuna_vasak = analogRead(leegiandur_vasak);
  infrapuna_keskmine = analogRead(leegiandur_keskmine);
  infrapuna_parem = analogRead(leegiandur_parem);
  /* analogRead() on fuktsioon, mis loeb analoog pinge väärtuse, ta annab vastuseks
   mingi numbri vahemikus 0-1023. Seda fuktsiooni saab kasutada ainult A[x] pinidel.*/

  /*Saadame salvestatud andurite lugemi seeriamonitori.*/
  Serial.print("vasak: ");
  Serial.print(infrapuna_vasak);
  Serial.print("\t keskmine: "); // \t on "tab", lisab tühikud teatud tulbalaiuse saavutamiseni
  Serial.print(infrapuna_keskmine);
  Serial.print("\t parem: ");
  Serial.print(infrapuna_parem);
  Serial.print(" Kõige lähemal leegile on arvatavasti: ");

  /*If ja else sellised "laused" programmeerimises, kus vastavalt tavalistes sulgudes
  kirjeldatud tingimuse täidetusele tehakse kas üht või teist asja, mis on loogelistes 
  sulgudes if-i (tingimus tõene) või else-i (tingimus polnud tõene) järel.*/
  if(infrapuna_vasak < infrapuna_parem && infrapuna_vasak < infrapuna_keskmine) {
    /*Vasak andur näitab väiksemat numbrit kui parem ja väiksemat kui keskmine.
    Meid huvitab kõige väiksem number, sest leegi läheduses läheb näit allapoole.*/
    Serial.println(" vasak.");
  }
  else {
    /*Vasak andur oli kas paremast või keskmisest siiski suurema numbriga*/
    
    /*If-else lauseid saab ka üksteise sisse panna.*/    
    if(infrapuna_parem < infrapuna_vasak && infrapuna_parem < infrapuna_keskmine) {
      /*Parem andur näitab nii vasakust kui keksmisest väiksemat numbrit.*/
      Serial.println(" parem.");
    }
    else {
      /*Kui eelmised võrdlused tõele ei vastanud, siis on järel vaid variant, et 
      keskmine andur näitab kõige väiksemat numbrit.*/
      Serial.println(" keskmine.");
    }
      
  }

}

 

Lisa jupid vanema vanuserühma roboti jaoks, mida esimeses videos ei mainitud:

2 väikest servomootorit (https://www.aliexpress.com/item/2Pcs-EMAX-ES08MA-II-Mini-Metal-Gear-Anal... 7.8€)