Hoovercraft/ilmatyynyalus. Koodi?

Morjens.

Meillä on yliopistossa projektina valmistaa arduinopohjainen kaukoohjattava ilmatyynyalus. Hirvittävän kiireen ja osaamattomuuden vuoksi koodaaminen ei onnistu. Laitteemme toimii arduino uno ja lähettimessä on arduino nano.

Käytämme työssämme tälläisiä vastaanottimia ja lähettimiä.
instructables.com/id/RF-3154 … -and-Ardu/

Yleisesti ilmatyynyalus on rakenteeltaan paljon seuraavan kaltainen:
instructables.com/id/RC-Hovercraft/

Työntö ja nostomoottoreina toimivat kaksi harjatonta sähkömoottoria ja ohjaus toimii yhden servun avulla.

Ohjauksesta emme oikein tiedä. Olisiko siihen ehdotuksia? Jollain napeilla ajattelimme sen hoitaa, mutta koska ilmatyynyaluksessa ei ole jarruja, onko napeilla ohjaaminen liian hidasta?

Eli koodiin tarvitsisimme paljolti apua, jotta saisimme projektin valmiiksi.

Tässä koodiamme, jossa taitaa olla hyvin vähän järkeä:

int nosto = 0;
int eteen = 0;
int taakse = 0;
int oikealle = 0; // jännitteen arvo tallentaan tähän muuttujaan
int vasemmalle = 0;

#include <Servo.h>

#include <VirtualWire.h>

Servo servo; // peräsimen servo

//SETUP ALKAAA!!!
void setup() {

Serial.begin(9600);

servo.attach(2); //käynnistää servo nimisen pinnissä (tuntematon)

servo.write(90); // asettaa servon keskelle, 90 asteen kulmaan, ELI keskittäää servon keskelle

// VASTAANOTIN
Serial.begin(9600); // Debugging only
Serial.println(“setup”);

// Initialise the IO and ISR
vw_set_ptt_inverted(true); // Required for DR3100
vw_setup(2000);	 // Bits per sec

vw_rx_start();       // Start the receiver PLL running

delay(1000);

}

//PÄÄOHJELMA ALKAA

void loop()
{

ojaus();

Serial.print("Jännite = " );

Serial.println(nosto); // "Serial.println" komento vaihtaa riviä tulostuksen jälkeen

Serial.print("Jännite2 =  " );

Serial.println(eteen); // "Serial.println" komento vaihtaa riviä tulostuksen jälkeen

Serial.print("Jännite3 = " );

Serial.println(taakse); // "Serial.println" komento vaihtaa riviä tulostuksen jälkeen

uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;

if (vw_get_message(buf, &buflen)) // Non-blocking
{
int i;

    digitalWrite(13, true); // Flash a light to show received good message
// Message with a good checksum received, dump it.
Serial.print("Got: ");

for (i = 0; i < buflen; i++)
{
    Serial.print(buf[i], HEX);
    Serial.print(" ");
}
Serial.println("");
    digitalWrite(13, false); 



delay(1500);

}

//PÄÄOHJELMA LOPPUU

void ohjaus()

{

nosto.write(digitalInput1); //

eteen.write(digitalInput2); //

servo.write(digitalInput3); //

return;
}

Myös teille sama homma. On joitain asioita jotka kannattaa opetella heti eikä vasta sitten joskus…

Niin mikä siinä nyt ei oikein onnistu? Täältä löytyy monenmoista tekijää ja osaajaa, mutta kristallipallo meiltä kaikilta puuttuu. Pelkästään osaluettelon kertominen ei vain yksinkertaisesti riitä, sillä ainakaan minulla ei ole mahdollisuuksia kirjoittaa koko ohjelmaa teidän puolestanne :slight_smile:

Purkakaa ongelma palasiin ja koittakaa ratkaista ne yksi kerrallaan. On ihan turha ottaa koko roskaa pureksittavaksi kerralla, sillä silloin siitä ei tule ikinä valmista. Ottakaa vaikka ensin ne RF-lähetinvastaanottimet käyttöön, lähetelkää dataa arduinosta toiseen ja testatkaa se. Sitten servot ja niiden ohjaus, miten ne oikeasti toimii ja pyörii. Lopulta ne nappulat, miten niitä luetaan, kytketään yms. Toki järjestys kannatta miettiä itse.

Mutta edelleen. Ongelma kerrallaan. Mikä tämä on? Miten tämä toimii? MIten tätä käytetään/kytketään/ohjataan? Ja sen jälkeen teette ohjelman jonka toimivuuden voitte varmistaa.

Juu u… Kiitos kommenteista. Koitetaan lähetä purkamaan ongelmaa ja katsotaan sitten, jos vaikka osaisimme kysyä oikeita kysymyksiä.