Vain robotti

Kaikki keskustelu koskien muita ajoneuvoja, kuten mm. moottoripyöriä.
Post Reply
User avatar
vain
SUPPORTER
SUPPORTER
Posts: 378
Joined: 06. May 2011 22:35
Location: Tampere

Vain robotti

Post by vain » 18. Jan 2014 16:03

Arduino megalla ohjattu omavalmiste robotti

Koko idea lähti tästä. Testailin noita servoja. Mietiskelin mitä näillä tekee seuraavaksi. Lopulta ajatukset harhaili kävelevään robottiin.
[youtube]PQKPb-xOiiU&[/youtube]


Versio 1

Alkuun oli pelkkä alumiinista kantattu laatikko johon piti räiskiä jalat kiinni. Sekä bilteman lyijyakulla tarjoilla koko vehkeelle virta.
Image
[youtube]grDzPS-t3tk&[/youtube]

Jalat löysi paikalleen. Sekä muiden osien hahmottelua. Vertailuksi rock crawleri.
Image

Taka jalkojen johdot vielä lyhyet.
Image

Servojen virranjakelua toimitti oma valmiste johtohässäkkä piirilevy yhdistelmä. Jokaiselle servolle tarvii virta, maa ja singaali. Joten virrat ja maat voi yhdistää. Näin säästyy turhilta johdoilta.
Image

Kokonais kuvaa sen hetkisestä tilanteesta. Ultraääni tutkaa testailtu ja heitetty kiinni.
Image

Tämän vekottimen idea on kertoa etäisyyksiä. Idea on ääni aallon lähettäminen ja mitataan aikaa kun se heijastuu takasi jostain. Ajasta pystytään laskemaan etäisyys. Alla pari videoo.
[youtube]DwchPdFp5CE&[/youtube]
Tämän idea on ensiksi mitata kääntyessään koko alue ja kääntyä lähimpää kohtaan jonka näki.
[youtube]icB-a6U7-Hw&[/youtube]

Akku sai kunnon kiinnityksen. Sekä runkoa muokkasin tukevammaksi vääntelemällä lisää kulmia.
Image

Lopullinen viritelmä Tässä kohtaa pääsi koittaa miten tuo toimii. No ongelmaksi muodostui vanha akku joka ei muutenkaan pysty antamaan riittävää virtaa.
Image

Ensimmäinen kävely testi. Lyijy akku sai lentää jordaaniaan ja tilalle tuli pieni lipo akku.
[youtube]iGkvQPIRdng&[/youtube]

Joystick kytkettynä roboon. Liikkuu tatin osottamalla tavalla.
[youtube]HANNiW_zeNw&[/youtube]

Robotti muuten miellytti, mutta tuo nykyinen akku ei ollut ihan sopiva. Sekä turhan iso runko. Seuraavaksi suunnitelin uuden rungon joka olisi kompakti ja yksinkertainen.

Versio 2

Siitä se lähtee. 250x250mm alumiini levy.
Image

Kaikki tarpeelliset sopii hienosti.
Image

Leikkailua, kanttailua ja niittailua. Uusi runko. :D
Image

Paljon tukevampi kuin edellinen.
Image

Jalkojen kiinnitykset porailtua heitin ne paikalleen. Alkaa muistuttaa taas roboo.
Image

Rojut takasi sisälle. Akut löysi paikan sivuilta. Ohjainkortti keskellä.
Image

Tässä sitä nyt ollaan. Tarkotus olis laittaa johdotukset siististi tuonne ja niputtaa. Sekä tapella koodien kanssa lisää. Ensimäinen versio tekoälystä on melko vajaa vielä. Robotti menee vaan eteenpäin ja seinän kohdattua kääntyy ja jatkaa taas matkaa.

Kysyä saa vapaasti jos kenties kiinnostus heräsi ja halua on tehdä oman.

User avatar
vain
SUPPORTER
SUPPORTER
Posts: 378
Joined: 06. May 2011 22:35
Location: Tampere

Re: Vain robotti

Post by vain » 22. Jan 2014 20:06

Pientä päivitystä. Johtoja vetelin uusista paikoista ja niputin.

Image
Image


Kokeilua. Suorituskykyä piisaa, robotin oma paino on 1.2kg nyt ja lisäpainona 5kg. Vähän vaivalloisesti nousee mutta kyllä se sit kulkee. Sekä hidastettuna kuvattua robotin toimintaa. Selkeyttää tuon logiikkaa. :D



Robotin koodi tällä hetkellä. Jos joku haluaa nähdä miten tuo on koodattu nyt. Aika paljon jääny kaikkee turhaa tuonne sekaan.:?
#include <Servo.h>

Servo rbinjoint; // Oikea taka jalka sisempi
Servo rboutjoint; // Oikea taka jalka ulompi

Servo rfinjoint; // create servo object to control a servo
Servo rfoutjoint; // a maximum of eight servo objects can be created

Servo lbinjoint; // create servo object to control a servo
Servo lboutjoint; // a maximum of eight servo objects can be created

Servo lfinjoint; // create servo object to control a servo
Servo lfoutjoint; // a maximum of eight servo objects can be created

Servo eyejoint; //Silmä

int time = 0;
int time_eye = 0;
int eye_data[] = {20, 0, -20, 0};
int eye_dis = 0;
int avoid = false;
int check = true;

//Jalat
int rbinjoint_angle = 90;
int rboutjoint_angle = 70;

int rfinjoint_angle = 90;
int rfoutjoint_angle = 70;

int lbinjoint_angle = 90;
int lboutjoint_angle = 70;

int lfinjoint_angle = 90;
int lfoutjoint_angle = 70;

int finjoint_angle = 90;
int binjoint_angle = 90;

int joint_up = 70;
int joint_down = 90;

int rjoint_angle = 40;
int ljoint_angle = 40;

int eyejoint_angle = 90;

// Kaiku
const int pingPin = 53;
const int echoPin = 52;

long duration, mm, mm_last;

void setup()
{
Serial.begin(9600);
rbinjoint.attach(8);
rboutjoint.attach(9);

rfinjoint.attach(6);
rfoutjoint.attach(7);

lbinjoint.attach(3);
lboutjoint.attach(2);

lfinjoint.attach(5);
lfoutjoint.attach(4);

eyejoint.attach(10);
}


void loop()
{

if (check == true)
{
// Etäisyys mittaus

pinMode(pingPin, OUTPUT);
digitalWrite(pingPin, LOW);
delayMicroseconds(2);
digitalWrite(pingPin, HIGH);
delayMicroseconds(5);
digitalWrite(pingPin, LOW);

// The same pin is used to read the signal from the PING))): a HIGH
// pulse whose duration is the time (in microseconds) from the sending
// of the ping to the reception of its echo off of an object.
pinMode(echoPin, INPUT);
duration = pulseIn(echoPin, HIGH);

// convert the time into a distance
mm = microsecondsToCentimeters(duration);
check = false;

}

// Äly
if (avoid==false)
{
check = true;
if (time_eye == 3)
{time_eye = 0;

//if (eye_dis<0)
//{
rjoint_angle = 30+eye_dis;
ljoint_angle = 30;
//}
//else
//{
//rjoint_angle = 0;
//ljoint_angle = 0+eye_dis;
//}

Serial.print(eye_dis);
mm_last = 0;
}
else
{time_eye+=1;}
eyejoint_angle = 90+eye_data[time_eye];

if (mm>mm_last) {eye_dis=eye_data[time_eye];
mm_last=mm;}
Serial.println(eye_dis);
Serial.print(mm);
Serial.print("mm");
if (mm<400){avoid=true;}
}

if (avoid==true)
{
rjoint_angle = 30;
ljoint_angle = -30;
if (mm>1000){avoid=false;}
check = true;
}


// Kävely systeemi
if (time==5)
{
time=2;
}
else
{
time=time+1;
}


if (time == 1)
{
rbinjoint_angle = binjoint_angle;
rboutjoint_angle = joint_down;

rfinjoint_angle = finjoint_angle;
rfoutjoint_angle = joint_down;

lbinjoint_angle = binjoint_angle;
lboutjoint_angle = joint_down;

lfinjoint_angle = finjoint_angle;
lfoutjoint_angle = joint_down;
}

if (time == 2)
{
rbinjoint_angle = binjoint_angle-rjoint_angle;
rboutjoint_angle = joint_up;

rfinjoint_angle = finjoint_angle+rjoint_angle;
rfoutjoint_angle = joint_down;

lbinjoint_angle = binjoint_angle+ljoint_angle;
lboutjoint_angle = joint_down;

lfinjoint_angle = finjoint_angle-ljoint_angle;
lfoutjoint_angle = joint_up;
}

if (time == 3)
{
rbinjoint_angle = binjoint_angle-rjoint_angle;
rboutjoint_angle = joint_down;

rfinjoint_angle = finjoint_angle+rjoint_angle;
rfoutjoint_angle = joint_down;

lbinjoint_angle = binjoint_angle+ljoint_angle;
lboutjoint_angle = joint_down;

lfinjoint_angle = finjoint_angle-ljoint_angle;
lfoutjoint_angle = joint_down;
}

if (time == 4)
{
rbinjoint_angle = binjoint_angle+rjoint_angle;
rboutjoint_angle = joint_down;

rfinjoint_angle = finjoint_angle-rjoint_angle;
rfoutjoint_angle = joint_up;

lbinjoint_angle = binjoint_angle-ljoint_angle;
lboutjoint_angle = joint_up;

lfinjoint_angle = finjoint_angle+ljoint_angle;
lfoutjoint_angle = joint_down;
}

if (time == 5)
{
rbinjoint_angle = binjoint_angle+rjoint_angle;
rboutjoint_angle = joint_down;

rfinjoint_angle = finjoint_angle-rjoint_angle;
rfoutjoint_angle = joint_down;

lbinjoint_angle = binjoint_angle-ljoint_angle;
lboutjoint_angle = joint_down;

lfinjoint_angle = finjoint_angle+ljoint_angle;
lfoutjoint_angle = joint_down;
}


rbinjoint.write(rbinjoint_angle);
rboutjoint.write(rboutjoint_angle);

rfinjoint.write(rfinjoint_angle);
rfoutjoint.write(rfoutjoint_angle);

lbinjoint.write(lbinjoint_angle);
lboutjoint.write(lboutjoint_angle);

lfinjoint.write(lfinjoint_angle);
lfoutjoint.write(lfoutjoint_angle);

eyejoint.write(eyejoint_angle);


//Serial.println(time);

delay(250);
}

long microsecondsToCentimeters(long microseconds)
{
// The speed of sound is 340 m/s or 29 microseconds per centimeter.
// The ping travels out and back, so to find the distance of the
// object we take half of the distance travelled.
return microseconds / 2.9 / 2;
}

User avatar
vain
SUPPORTER
SUPPORTER
Posts: 378
Joined: 06. May 2011 22:35
Location: Tampere

Re: Vain robotti

Post by vain » 09. Oct 2014 18:09

Robotti sai hieman päivitystä. Koko laitoksen ohjaus tapahtuu nyt rc:eenä. Tuli tehtyä ohjattava käsi robotille. Siihen vielä ropelli jolla saa hieman ilmaa siirrettyä.
Image
Image
Image

Komee video vielä koko laitoksesta. Hieman sais olla lisää puhallusta. :(

Post Reply

Who is online

Users browsing this forum: No registered users and 8 guests