Esteitä väistelevä robotti – Prototyypin rakentaminen

Esteitä väistelevä itsestään ajava robotti.

Toteutimme prototyypin rakentaminen-kurssilla itsestään ajavan robotin, joka osaa väistää huomatessaan edessään esteen. Robotti itsessään ei onnistunut niin hyvin kuin olisimme toivoneet, mutta opimme virheistämme ja seuraavalla kerralla onnistumme paljon paremmin.

Tein robotin yhdessä Jori Laineen kanssa. Kurssin pitäjänä toimi Tero Karvinen, jonka verkkosivulta löytyy kurssimateriaali.

Robotti

IMG_20170601_151141694.jpgRobotin testausta

IMG_20170601_161909796.jpgRobotti kasassa ja liikkeellä

Käytetyt osat

  • Arduino UNO
  • HC-SR04 – ultraäänisensori
  • 28BYJ-48 – askelmoottori x2
  • ULN2003 – askelmoottorin hallintapiiri x2
  • 5V virtalähde x2
  • Kasa Legoja
  • Hyppylankoja
  • Koekytkentälevyjä

IMG_20170602_084717696.jpgUltraäänisensori

IMG_20170602_084616785.jpgArduino UNO

IMG_20170602_084647373.jpgULN2003

Virtalähteet

IMG_20170531_150505942.jpgVirtalähteinä toimi kaksi kappaletta puhelimen 5V varavirtalähteitä

IMG_20170531_150511030.jpgKatkaisimme USB-johdon ja otimme sen virtajohdoista virran

3D-tulostettu välikappale

IMG_20170530_143351948.jpgLoimme Blenderillä välikappaleen ja laitoimme sen tulostumaan

IMG_20170530_143238584_BURST000_COVER_TOP.jpgTulostetut kappaleet

Ensimmäinen kappale oli 10mm kokoinen, johon osat eivät mahtuneet. Seuraavan tulostimme 11mm kokoisena, joka oli vielä hieman liian pieni. Viimeisen teimme 12mm kokoisena ja osamme mahtuivat juuri sopivasti.

Mittojen mukaan moottori ja Legoakseli olivat juuri sopivat 10mm versioon, mutta tulostin ei ollut tarpeeksi tarkka näin pienellä kappaleella, joten jouduimme kasvattamaan tulosteen kokoa.

adapterBlend.png

Välikappaleen .blend tiedosto löytyy Google Drivestä ja 3D-tulostukseen valmis .stl tiedosto myös Google Drivessä.

Koodi

#include <AccelStepper.h>
#define HALFSTEP 8

// motor pins
#define motorPin1 2
#define motorPin2 3
#define motorPin3 4
#define motorPin4 5

#define motorPin5 6
#define motorPin6 7
#define motorPin7 8
#define motorPin8 9 

AccelStepper stepper1(HALFSTEP, motorPin1, motorPin3, motorPin2, motorPin4);
AccelStepper stepper2(HALFSTEP, motorPin5, motorPin7, motorPin6, motorPin8);

// defines pins numbers
const int trigPin = 10;
const int echoPin = 11;

// defines variables
long duration;
int distance;
int pingTimer = 250;

int getDistance() {
 digitalWrite(trigPin, LOW);
 delayMicroseconds(2);
 digitalWrite(trigPin, HIGH);
 delayMicroseconds(10);
 digitalWrite(trigPin, LOW);
 duration = pulseIn(echoPin, HIGH);
 distance= duration*0.034/2;
}

void setup() {
 stepper1.setMaxSpeed(1000.0);
 stepper1.setSpeed(1000);
 
 stepper2.setMaxSpeed(1000.0);
 stepper2.setSpeed(-1000);
 
 pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
 pinMode(echoPin, INPUT); // Sets the echoPin as an Input
}

void loop() {
 pingTimer = pingTimer - 1;
 if (pingTimer == 0) {
 getDistance();
 pingTimer = 1000;
 }

if (distance < 25) {
 stepper1.setSpeed(-1000);
 stepper1.runSpeed();
}
 stepper1.setSpeed(1000);
 stepper2.setSpeed(-1000);
 stepper1.runSpeed();
 stepper2.runSpeed();
}

Pääsimme moottorien kanssa alkuun 42bots.com sivuston esimerkin avulla, käytimme lisäksi apuna AccelStepper kirjaston dokumentaatiota. Ultraäänisensoriin löysimme ohjeita howtomechatronics.com artikkelista. Valmis koodi lisensoitu GPLv2-lisenssillä.

Ongelmat

Moottorit

Käyttämämme askelmoottorit eivät sovellu auton tekemiseen. Moottorit vaativat jatkuvia pulsseja liikkuakseen, jolloin ultraäänisensoreiden käyttö pysäyttää moottorit hetkeksi. Päädyimme käyttämään vain yhtä ultraäänisensoria.

Tarvitsimme myös jotain moottorin ja Legoakselin väliin, jotta renkaat pyörisivät. Suunnittelimme välikappaleen Blenderillä ja 3D-tulostimme sen. Tulostus vaati muutaman yrityksen, mutta lopulta saimme sopivat kappaleen. Kappaleet olivat aluksi kuutioita, mutta hioimme niiden kulmat, jotta vältimme niiden osumisen Legoihin.

IMG_20170602_084745517.jpgMoottori, välikappale, akseli ja rengas

Takarenkaat

Käytimme aluksi kahta vapaasti pyörivää Legorengasta takana. Robottimme kääntyy ajamalla eturenkaitaan eri suuntiin, mutta takarenkaat aiheuttivat liikaa kitkaa, jolloin robotti ei jaksanut kääntyä. Kokeilimme laittaa taakse vain yhden renkaan keskelle, mikä ei auttanut tilannetta yhtään. Lopulta laitoimme taakse ohuen tapin, jonka varassa robotin perä on. Pieni kitkapinta mahdollistaa robotin liikkumisen, vaikka takaosa laahaa maata pitkin.

IMG_20170602_084607197.jpgPerätappi

Parannusideat

  • Askelmoottoreiden sijasta olisi paljon parempi käyttää ympäripyöriviä servoja.
  • Bluetooth-ohjaus
  • Useampi ultaäänisensori toimintaan (servoja käyttäen)
Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: