idea, hovimestari botti

Eli sain näin lauantai iltana tälläaisen hullun idean rakentaa hovimestari robotti. Tämä on ainakin näin aluksi ihan vielä idea, katsoo millon jaksan aloittaa toteutuksen.

Robotin tulisi suoriutua seuraavista tehtävistä:
-Tuoda juoma “isännän” luo, ja pitää tuo juoma kylmänä.
-Imuroida ja kuljeskella etie päin.
-näyttää siistiltä. :smiley:
-Antaa joku tervehdys jomaa antaessa.

Toteutus tulee olemaan arduino pohjainen, ja tuumin että relekortti olisi tähän sopivin.

Eli ensin pitäisi bongata jostain akkukäyttöinen pienehkö imuri. Tähän tehtävään sopisi varmaan joku noista robokeskuksessa myytävistä rikkinäisistä. entä rikkaimuri?

Moottoreiksi meinasin kahta porakoneen moottoria, ihan suoraan sanoen sen helppouden takia. Jos ennen tämän projektin aloitusta ehtisin tuon fetillä tapahtuvan ohjauksen keksiä, niin sitten käyttäisin sitä. :slight_smile:

Rungon aion tehdä ehkä ilmanvaihto putkesta, sellaisesta isosta ja paksusta. Sitten mustaksi. ja joko isot renkaat taikka telaketjut.

Koska tulen varmaankin käyttämään tuota relekorttia, olisi helppo ratkaisu tuolle äännähdykselle hommatta jostain “lelu” johon äänitetään tervehdys ja sitten se toistaa sen. Ja modata tuota. Toinen tapa olisi varmaan arduinoon joku musiikkikilpi?

Tuo juoman tuominen on asia joka mietityttää. Kun tuota pitäisi saada kutsuttua kuten hovimestaria, “james tuo soodaa” , tämän voisi toteuttaa jollain nappulalla ja vastaaanottimella, en tiedä?Ehdotuksia?

Robottihan tulee siis olemaan pystyssä oleva putki, tavallaan. Runkoon tulisi reikä johon luukku, jonka takana olisi juoma. Juoman kylmänä pitämiseen peltier elementti, vai löytyykö parempia ehdotuksia? sitten vielä vaikka vanhasta cd asemasta mekanismi joka tavallaan työntää tuon luukun auki ja ojentaa juoman.

Kaikkia ajatuksia ja ehdotuksia otetaan avoimin mielin vastaan :slight_smile:
Ulkona tropiikista; jotain hyvää 3d suunnittelu ohjelmaa bubuntulle?

Kappas vaan. Onhan tällaisia tehtykkin, kun netistä selailin.
Tuota vaan en tajua että kuinka saisin tuon antamalla jonkun käskyn tulemaan luokseni.
Robotin tulisi siis imuroida huonetta kunnes tulee käsky siirtyä paikkaan x ja ojentaa juoma.
Mutta kuinka tuio robotti osaisi siirtyä “paikkaan x” ?

tuumailin että jos laittaisin tuon yksinkertaisesti kulkemaan jonkun radan. Toinen vaihtoehto olisi kai käyttää ultraääni/infrapuna sensoria,tosin tästä taitaisi tulla se että saattaisi imuroida saman paikan moneen kertaan.

koska käytttäisin relekorttia simppelisoitu koodi menisi näöin.::

raley 1 (high)
relay 2 (high) // käynnistää molemmat moottorit releen avulla= liikkuu eteenpäin
delay (???) //eli kulkee eteenpäin jonkun tietyn ajan, eli jos metrin matkaan menee sekunti ja kuljettava matka on vaikka 10 metriä olisi tuo arvo 10 sekunttia
relay 2/1 (low) // elikkä sammuttaa jommankumman moottorin, ja koska toinen jatkaa pyörimistä=kääntyy
delay (??) // tähän se mitä tuohon kääntymiseen menee, onko se sitten seknti vai viisi
relay2/1 (HIGH) //käynnistää äske suljetun moottorin, ja matka eteenpäin jatkuu
jne. // ja niin edelleen kunnes koko alue olisi käyty läpi.

if
??? (HIGH) // eli joku vastaanotin antaa singnaalin, tähänhän sopisi tuolta robomaasta ostamani kaukosäädin ja vastaanotin arduinolle. Eri asia on sitten saanko sen toimimaan.
??? // Sitten laitteen pitäisi osata siirtyä paikkaan x, eli nojatuolin vierelle :slight_smile:

En vain saa päähhäni että miten saan siirrettyä tuon laitoksen tuohon paikkaan x? Jos tuo imuroimis koodi on vaikka puoli välissä, ja tulee käsky siirtyä paikkaan x, niin miten se osaisi siirtyä oikeaan paikkaan? :question:

-Tuli todella epäselvä viesti, yrittäkää saada selvää… :slight_smile:

Vastaanpa itselleni toistamiseen, vastaan nyt phelimen välityksellä joten en jaksa välittää pisteiatä jne. anteeksi.
Lisää nettiä lueskeltuani huomasin että monet olivat käyttäneet kompassi kilpeä toteutuksessa. tuo kuullostaa jokseenkin hankalalta vaikka en vielä tuota koodia ole ehtinyt tutkimaankaa.

joten suunnittelin että oma toteutuksen menisi niin että kaukosäätimellä lähetetään käsky ropotille toimia ja tämän jälkeen robotti “huutaisi: ihan heti” ja lähtisi imuroimaan tuon ohjelmodun radan kunnes saapuu tähän nojatuolin viereen ja tarjoaa juoman lausahtaen “juomanne söör”. ja taas nappia painamalla lähtisi ropoti omalle paikalleen odottamaan seuraava kierrosta.

tuo äänien toteutus askarruttaa. voiko relekortti ja jotain musiikki kilpeä käyttää samaan akaan?

Projekti etenee. Robomaasta on tulossa servo ja relekilpi, lisäksi musiikki kilpi. Jota tosin en varmaankaan voi käyttää tuon relekorin kanssa , joten taidan tehdä vaan jonkun piippausäänimerkin kuulumaan silloin tällöin, tuolla 8 ohmin kajarilla.

Aloitin projektin ostamalla tuttavaltani kaukoohjauttavan auton, josta tosin puuttui ohjain ja laturi sekä muutakin puutteita oli. No eipä maksanut kun 7 euroa ja renkaat on nyrkin kokosia niin hyvä näin. Ensi huomio autosta että sen kääntymis säde on turmiollisen pitkä. => lyhensin autoa. tästä kuva myöhemmin.

Myös muita osia olen alkanut haalia. Pari cd asemaa joista tonen työntää juoman ulos ja toinen toiseksi kädeksi näyttämään hienolta :smiley: Ns. pohjahan tuohon tulee tuosta kauko ohjattavasta autosta, mutta korkeutta aion tuohon saada tuollasella jumalattoman kokoisella pesuaine purkilla (about puolmetriä korkea). tottakai jokasella hovimestarilla hattu pitää olla. Olen laittanut “hakuun” josko silinteriä tai knallia löytyisi. Mutta mikäli ei niim tulee tuon päähän joko sombrero venäjän armeijan komentajanhattu mikälie tai lippis :smiley:

http://seeedstudio.com/wiki/Music_Shield
http://www.dfrobot.com/wiki/index.php?title=Relay_Shield_for_Arduino_(SKU:DFR0144)

osa pinneistä näyttäisi menevän “päällekkäin” riippunee montako relettä tarvitset/mitä toimintoja musalätkästä.
toisaalta voithan värkätä tuohon väliin vielä shieldin jolla kääntyy relekortin pinnit sellisin jotka eivät ole käytössä musalätkässä

Niinhän ja voinnhan aina laittaa kaksi arduinoa :wink: :unamused:
Nooh, nyyt kun löysin tuollaisen mukavan koodin jolla tuottaa ääntä suoraan arduinosta 8 ohmin kajariin, luulen että pärjään tällä… :slight_smile:

Osia on haalittu kirppareilta vanhoista leluista. Nyt ongelmana on se etten tiedä tuosta arduinon virta (ac?) liittimestä, kumpaan kytkeä plussa ja kumpaan miinus.

Pari cd asemaa vaihtoistonsa ansiosta jaksaa toimia robotin käsinä joista toinen antaa juoman, toisaalta puppu ja lasi systeemikin olisi voinut olla ihan hieno

Yleinen käytäntö on laittaa jännite keskelle ja maa reunalle, kuten myös Arduinossa.

arduino.cc/en/Main/arduinoBoardUno

Kiitoksia tästä. testaan kuhan kerkiän. :slight_smile:

Projekti kuitenkin etenee. Tosin koska tuosta robomaan tilauksesta ei VIELÄKÄÄN kuulu mitään ostin paikalliselta komponenttimyyjältä yhden L293D moottorinohjauspiirin. Ostin tuon vähän ajatellen että “noh tuosta mitään kuitenkaan tule” Yllätyksekseni kuitenkin tuohon löytyi todella paljon ohjeita ja sain jopa toimimaan heti ensimmäisellä yrittämällä!
-Nyt saan etupyöriä käänneltyä. Jos jaksaisi, ja olisi aikaa kokeilta voisin kokeilla saanko tuolla yhdellä piirillä ohjattua noita “työntäviä” pyöriäkin. Noh pitää kuitenkin ostaa peri noita siruja lisää, kun noilla dc moottoreilla tekee aina vaikka mitä hienoa. :slight_smile: Ja eipä nuo kalliitakaan ole…

Käytin näitä ohjeita; http://www.miklos.blog.br/2009/11/controlar-motores-dc-com-l293d.html
HUOM: tuossa koodissa näkyy olevan pieniä virheitä, korjaa ne jos aiot tätä käyttää.

Ainakin aluksi aion laittaa robottiin pelkän piezon tuottamaan ääntä. Katsellaan tuota musiikki shieldiä sitten “vähän isompana”.
Yksi led on nyt myös mukana vähän demostroimassa noita tulevia “silmiä”
Kuva kertokon jotain;

Tuon dc virran arduinolle sain toimimaan hyvin. Myös 2 moottorin ohjaus 1 sirulla onnistuu. Voi laittaa tästä koodin myöhemmin.

sittenkytkin 6 aika heikkoa. aaa paristoa ja kokeilin pyörittää moottori noilla. Noh, ohjaus toimi hyvin mutta työntävät eivät jaksa pyöriä.Mikä neuvoksi? 600ma tuo näyttää kestävän, mutta mulla ei ole mitään hajua että minkä verran tuohon saa pattereita tuupata että on riittoisasti ja että ei kärähdä?

EDIT; pienellä muuntajalla leikkimisen jälkeen selvisi että 350-500 mA virta lienee hyvä. En ole ollenkaan perillä siitä että minkä verran tuollaisesssa aaa paristossa on? -Jossain sanottiin että 25 mA, mutta tiedä sitten. Laitoin kavereilta kyselyyn että löytyykö ylimääräsiä akkuja ja latureita. Tuon patterihässäkän taidan suortilla hylätä.

Kun ei muutakaan tekemistä ole niin kerron kuinka tämä etenee. :slight_smile:
Olen siis nyt yhdistänyt tuon kaiuttimen ledit ja yhden moottorinohjaimen, jolla saan kahta moottoria ohjattua. Olen itseeni erittäin tyytyväinen. :smiley: Jos vuosi sitten olisi sanottu että osaisin tällaista tehdä, niin olisin naureskellut vain.

Seuraava “iso” askel olisi selvittää huomenna kunka yhdistää tähän tuo “ir kit for arduino”
Huomenna saan siis postista tuon ir kitin, musiikki kilven ja öm. jotain(?), en muista enään mitä. Pidän yllätyksistä. :smiley:

Ir kittiin löytyi mielestäni aika hyvä opastus video; http://www.youtube.com/watch?v=L3-oQXe9Gns Tuossa ladattavassa paketissa tulee mukana ohjaussysteemi releelle. Tämä lienee hyvä lähtökohta.

Ainiin, akku ja laturiasiakin on hoidossa. :slight_smile: Tuttavalta löytyy.

Ajattelin pitää tätä viestiketjua ns. “blogina” jossa nimenomaan kerron kuinka etenee (niinkuin tähänkin asti). Tästä suurta apua itselle ja toivottavasti antaa ideoita muillekkin. Ette pahastune?

Päivän aihe; eitoimi

Tei kaiken niinkuin ylläolevassa linkissä (tuon kirjaston asennus ubuntussa tosin tuotti ongelmia.) Mutta eihän se toimi, vaikka mitä näppäilee niin serialmonitor pysyy tyhjänä.
Mitäään ideaa missä vika saattaisi olla?

Onko kellään mitään esimerkki koodia/videota tuon musiikkikilven käyttöön?

testaa erikseen missä mättää.
revi kaikki ylimääräinen pois ja testaa ir juttu, tee vaikka softa joka esm. vilkuttelee lediä kun syötetään ir signaalia. toiseksi testaa sen serialmonitorin toiminta eli simppeli softa joka pukkaa hello worldia.
kun molemmat toimii niin muokkaa ledin vilkutuksen tilalle helloworld.

Ihan en ymmärtänyt mitä tarkoitit, mutta sain lopulta toimimaan. En loppujenlopuksi tiedä missä mättäsi mutta tarkistin nimenomaan kytkennät vielä pariiin kertaan uudelleenkäynnistin ohjelman, no lopulta toimi. Testasin rele koodia; toimii! Henoa. seuraavaksi pitäisi ruveta tuota yhdistämään tuohon moottorinohjauskoodia.

Tuohon musiikkikilpeenkin löysin ohjetta; seeedstudio.com/wiki/Music_Shield
Toisaalta, luin jostain muualta että jos on vaan kortilla musiikkia ja kytkee kiinni ja painaa play niin pitäisi toimia. Saa nähdä kuhan joskus on aikaa niin kerkeää testaamaan.

Edit, olitkin uk350 jo laitaanut tuon linkin. Olinpa huolimaton…

ir kit apua?

Eli ir kit toimii niinkuin pitääkin. Relettä/lediä olen saanut vilkuteltua tämän koodin mukaisesti;

[code]/*

  • IRremote: IRrecvDemo - demonstrates receiving IR codes with IRrecv
  • An IR detector/demodulator must be connected to the input RECV_PIN.
  • Version 0.1 July, 2009
  • Copyright 2009 Ken Shirriff
  • http://arcfn.com
    */

#include <IRremote.h>

int RECV_PIN = 11;
int RELAY_PIN = 4;

IRrecv irrecv(RECV_PIN);
decode_results results;

// Dumps out the decode_results structure.
// Call this after IRrecv::decode()
// void * to work around compiler issue
//void dump(void *v) {
// decode_results *results = (decode_results *)v
void dump(decode_results *results) {
int count = results->rawlen;
if (results->decode_type == UNKNOWN) {
Serial.println(“Could not decode message”);
}
else {
if (results->decode_type == NEC) {
Serial.print("Decoded NEC: ");
}
else if (results->decode_type == SONY) {
Serial.print("Decoded SONY: “);
}
else if (results->decode_type == RC5) {
Serial.print(“Decoded RC5: “);
}
else if (results->decode_type == RC6) {
Serial.print(“Decoded RC6: “);
}
Serial.print(results->value, HEX);
Serial.print(” (”);
Serial.print(results->bits, DEC);
Serial.println(” bits)”);
}
Serial.print(“Raw (”);
Serial.print(count, DEC);
Serial.print(”): ");

for (int i = 0; i < count; i++) {
if ((i % 2) == 1) {
Serial.print(results->rawbuf[i]*USECPERTICK, DEC);
}
else {
Serial.print(-(int)results->rawbuf[i]*USECPERTICK, DEC);
}
Serial.print(" “);
}
Serial.println(”");
}

void setup()
{
pinMode(RELAY_PIN, OUTPUT);
pinMode(13, OUTPUT);
Serial.begin(9600);
irrecv.enableIRIn(); // Start the receiver
}

int on = 0;
unsigned long last = millis();

void loop() {
if (irrecv.decode(&results)) {
// If it’s been at least 1/4 second since the last
// IR received, toggle the relay
if (millis() - last > 250) {
on = !on;
digitalWrite(RELAY_PIN, on ? HIGH : LOW);
digitalWrite(13, on ? HIGH : LOW);
dump(&results);
}
last = millis();
irrecv.resume(); // Receive the next value[/code]

Mutta, kun en ymmärrä kaikkea täysin niin en hokaa että mitä pitäisi lisätä että jotakin tiettyä nappulaa painapalla tapahtuisi haluttu toiminto, kun nythän tuo on ihan sama mitä painaa, kuhan kaukosäädin vain on oikea. Pitäisi siis saada enemmän noita käskyjä, yksi eteenpäin liikkumiseen yksi taakse jne. Toivottavasti joku osaisi auttaa!? :question:

Saattaapi mennä päin peetä mutta yritetään, koodaus taidot ovat hieman ruosteessa joten joku aktiivisesti koodia vääntävä, arduinon tunteva todennäköisesti kumoaa/korjaa seuraavat väitteet.

tämä rivi koodissa ilmeisesti pukkaa napinpainalluksen koodin sarjaportin kautta pc:n pääteohjelmaan: Serial.print(results->value, HEX)
tutki siis pääteohjelmalla mitä merkkejä kukin nappi tulostaa. ota vaikka ensin vain 1 napin koodi ylös, oletetaan että se on DF pääteohjelmassa…

Kokeile lisätä void looppiin … ööh no testaa nyt ensin tuota…

Kiitos heti alkuun.
Ömm. Tarkoititko että kokeilisin tuolla arduinon serialmonitorilla noita nappien arvoja? No ykköstä painamalla tuli tällaista;

Decoded NEC: FD0857 (32 bits) Raw (68) : (ja suunnattoman pitkä rivi numeroita joilla ei tosin liene merkitystä?)

Jos oikein ymmärsin niin tuo fd0857 on se nappulan koodi, mutta miten liitän sen tuohon koodiin?

digitalWrite(13, on ? HIGH : LOW); <<< ledikö sulla tuossa on mitä sytytetään?

tämän voip tehdä ziljoonalla eri tapaa ja tämä ei ehkä ole se paras tapa , jos edes toimii, mutta oisko tästä kuitenkin jotain apua… tutki itsekseen tuota if else lauserakennetta dokumentaatioista miten se toimii.

int RELAY1_PIN = 4; //määrityksiä mikä rele missäkin pinnissä…
int RELAY2_PIN = 5;
int RELAY3_PIN = 6;
int RELAY4_PIN = 7;

if(results = FD0857)
{
digitalWrite(RELAY1_PIN, on ? HIGH : LOW);
}
else if(results = FD0858)
{
digitalWrite(RELAY2_PIN, on ? HIGH : LOW);
}

jne…

Kiitos jälleen!
Itsekkin vähän ihmettelin tuota rakennetta ja mietin että mitenkähän tuon saisi järkevämmäksi? Tuossa siis syttyy ledi, uudelleen painettaessa sammuu.

Mutta mihin kohtaan lisään tämän? “”““if(results = FD0857)
{
digitalWrite(RELAY1_PIN, on ? HIGH : LOW);
}
else if(results = FD0858)
{
digitalWrite(RELAY2_PIN, on ? HIGH : LOW);
}
“”””

Ääh. Voisiko tuon tehdä helpomminkin? Menee niin pirskatin monimutkaseks ja pitkäks tuo koodi. Eli entä jos käyttäisi pohjana tätä koodia; (tuli myös mukana)

[code]/*

  • IRremote: IRrecvDemo - demonstrates receiving IR codes with IRrecv
  • An IR detector/demodulator must be connected to the input RECV_PIN.
  • Version 0.1 July, 2009
  • Copyright 2009 Ken Shirriff
  • http://arcfn.com
    */

#include <IRremote.h>

int RECV_PIN = 11;

IRrecv irrecv(RECV_PIN);

decode_results results;

void setup()
{
Serial.begin(9600);
irrecv.enableIRIn(); // Start the receiver
}

void loop() {
if (irrecv.decode(&results)) {
Serial.println(results.value, HEX);
irrecv.resume(); // Receive the next value
}
}[/code]

Sitten tuohon liittäisi serialread :in ja if else rakenteen… mahdollista?