Odeslat nové téma Odpovědět na téma  [ Příspěvků: 22 ]  Přejít na stránku 1, 2  Další
Autor Zpráva
 Předmět příspěvku: Arduino a RC přijímač
PříspěvekNapsal: pát 31.05.2013 12:16 
Zkušený debatér
Zkušený debatér
Uživatelský avatar

Registrován: 9.2.2012
Příspěvky: 326
Bydliště: Louny
Po stavbě dvou quadcopter jsem se rozhodl zas jednou zůstat na zemi. I díky počasí. Dorazilo objednané ARDUINO MEGA, záměrem je robot vyhýbající se překážkám a protože ruce svrbí bude možnost mu do toho trošku "hrabat" RC soupravou. Snad se někomu bude hodit následující kod,pro čtení hodnot z přijímače:

#include <LiquidCrystal.h>



LiquidCrystal lcd(7, 6, 5, 4, 3, 2);


int ch1;
int ch3;
int ch5;

void setup() {

pinMode(31, INPUT);
pinMode(33, INPUT);
pinMode(35, INPUT);

lcd.begin(16, 2);

}

void loop() {

ch1 = pulseIn(31, HIGH, 220000);
ch3 = pulseIn(33, HIGH, 220000);
ch5 = pulseIn(35, HIGH, 220000);




lcd.setCursor(0, 0);
lcd.print("PLYN");
lcd.setCursor(5, 0);
lcd.print(ch3-880);

lcd.setCursor(0, 1);
lcd.print("SMER");
lcd.setCursor(5, 1);
lcd.print(ch1-1492);


lcd.setCursor(10, 1);
lcd.print("PREPINAC");
lcd.setCursor(13, 1);
lcd.print(ch5-993);




delay(200);
lcd.clear();
}

... komentář uvádím jen k zobrazení výpočtu zobrazované hodnoty,
chtěl jsem na display něco rozumějšího, než hodnoty přímo čtené na
pinech...kód bude chtít trošku doladit, ale bude to asi použitelné...
hodnotu Time out asi bude nutné pro každý přijímač trošku upravit, toto jede s TURNIGY XR7000S.

_________________
Turnigy 9x, V 911, V 939, Quad 230 KK.2 LCD , Quad 470 APM 2.5, BIXLER 2


Nahoru
 Profil {RCalbum.cz}  
 
 
 Předmět příspěvku: Re: Arduino a RC přijímač
PříspěvekNapsal: pát 31.05.2013 14:24 
Zkušený debatér
Zkušený debatér
Uživatelský avatar

Registrován: 19.6.2009
Příspěvky: 235
Bydliště: Plzeň, ČR
Přitom stačilo napsat, že hodnota PWM se na pinu zjistí funkcí pulseIn() a odkaz na nápovědu k Arduino, kde je to včetně příkladu.

_________________
Toro900,SuperZoom,Siesta,Trempík,Fantasy TopmodelCZ,Multiwii QC
Optic 6 Sport 2,4GHz FrSky modul


Nahoru
 Profil {RCalbum.cz}  
 
 Předmět příspěvku: Re: Arduino a RC přijímač
PříspěvekNapsal: pát 31.05.2013 14:27 
Zkušený debatér
Zkušený debatér
Uživatelský avatar

Registrován: 6.9.2009
Příspěvky: 396
Bydliště: Ostrava-Poruba
Obrázky: 10
proč se odečítá pokaždé něco jiného, 1492, 993, 880 ?

Než dopiji odpoledni kávu, tak taková malá nedodělaná variace. Otazníky?
Kód:
#include <LiquidCrystal.h>

LiquidCrystal lcd(7, 6, 5, 4, 3, 2);

void setup() {
uint8_t   i;

   for(i=0;i<8;i++)      
      pinMode(i, INPUT);

   lcd.begin(16, 2);
}

void loop() {
   uint8_t   i;
   int16_t ch[8];
   int16_t minus[8];  //inicializovat

   for(i=0;i<8;i++)
   {
      ch[i]=pulseIn(i, HIGH, ????);
      lcd.setCursor(?, ?);
      lcd.print(text[i]?);
      lcd.setCursor(?, ?);
      lcd.print(ch[i]-minus[i]);   
   {

delay(200);
lcd.clear();
}


Nahoru
 Profil Soukromé album  
 
 Předmět příspěvku: Re: Arduino a RC přijímač
PříspěvekNapsal: pát 31.05.2013 16:37 
Zkušený debatér
Zkušený debatér
Uživatelský avatar

Registrován: 9.2.2012
Příspěvky: 326
Bydliště: Louny
Pokaždé se odečítá něco jiného, protože jsem jen na vysílači pojmenoval nový model, vyhodil reverzy a nenastavoval žádné "koncové" polohy....Byl to prostě jen test kódu....

_________________
Turnigy 9x, V 911, V 939, Quad 230 KK.2 LCD , Quad 470 APM 2.5, BIXLER 2


Nahoru
 Profil {RCalbum.cz}  
 
 Předmět příspěvku: Re: Arduino a RC přijímač
PříspěvekNapsal: pát 31.05.2013 18:43 
Zkušený debatér
Zkušený debatér
Uživatelský avatar

Registrován: 6.9.2009
Příspěvky: 396
Bydliště: Ostrava-Poruba
Obrázky: 10
Já jen jestli mi něco neuniklo.
Dorazil jsem domů, tak ten svůj návrh snad v noci doladím.


Nahoru
 Profil Soukromé album  
 
 Předmět příspěvku: Re: Arduino a RC přijímač
PříspěvekNapsal: pát 31.05.2013 19:01 
Mazák
Mazák
Uživatelský avatar

Registrován: 22.2.2010
Příspěvky: 12370
Bydliště: ČR
Obrázky: 1
Datel píše:
Přitom stačilo napsat, že hodnota PWM se na pinu zjistí funkcí pulseIn() a odkaz na nápovědu k Arduino, kde je to včetně příkladu.

Řešení přes funkci pulseIn() zdaleka nemusí být vždy vhodné zejména když má Arduino provádět i další časově kritické operace. Problematika použití pulseIn() a jiná možná alternativa ve smyslu vlastní obsluhy přerušeni jsou stručně zmíněny viz tento odkaz.


Nahoru
 Profil Soukromé album  
 
 Předmět příspěvku: Re: Arduino a RC přijímač
PříspěvekNapsal: pát 31.05.2013 22:00 
Zkušený debatér
Zkušený debatér
Uživatelský avatar

Registrován: 19.6.2009
Příspěvky: 235
Bydliště: Plzeň, ČR
Ano, to je samozřejmě pravda ale tady to řeší pomocí pulseIn().

_________________
Toro900,SuperZoom,Siesta,Trempík,Fantasy TopmodelCZ,Multiwii QC
Optic 6 Sport 2,4GHz FrSky modul


Nahoru
 Profil {RCalbum.cz}  
 
 Předmět příspěvku: Re: Arduino a RC přijímač
PříspěvekNapsal: ned 02.06.2013 0:13 
Mazák
Mazák
Uživatelský avatar

Registrován: 22.2.2010
Příspěvky: 12370
Bydliště: ČR
Obrázky: 1
Datel píše:
Ano, to je samozřejmě pravda ale tady to řeší pomocí pulseIn().

Uvedl jsem to pro případ, že by se ať už vlkodlak nebo někdo jiný rozhodl program rozšířit a měl by s tím problémy tj. pak zde má informaci jak by to mohl řešit jinak než s pulseIn().


Nahoru
 Profil Soukromé album  
 
 Předmět příspěvku: Re: Arduino a RC přijímač
PříspěvekNapsal: ned 02.06.2013 16:50 
Zkušený debatér
Zkušený debatér
Uživatelský avatar

Registrován: 6.9.2009
Příspěvky: 396
Bydliště: Ostrava-Poruba
Obrázky: 10
vlkodlak píše:
...Snad se někomu bude hodit následující kod,pro čtení hodnot z přijímače:...

Jak jsem psal, tak jsem večer upravil programek podle sebe, vyzkoušel a věnoval jsem se jiným věcem. Protože jsem bordelář a uklízím až pod nátlakem tak to zůstalo celé na stole. Ráno volal známý že má nějaké problémy s rádiem a jestli se může stavit. Když přišel tak po krátké prohlídce se ukázalo že to co zůstalo od večera na stole bude dobrý diagnostický nástroj. Nakonec to byl zapnutý "utajený mix" z jiného nastavení, které bylo překopírováno".

Takže díky vlkodlaku, hodilo se.
Člověk někdy něco zkusí a má takový dojem že by se to mohlo hodit někomu jinému a ke všemu je to za málo práce celkem dost muziky. Tak proč se nepodělit. Mne to zaujalo proto, že jsem doposud takovou funkci nepotřeboval a ani nevěděl že je v rámci Arduina implementována. Pokud jsem nějaké obdobné měření dělal tak jsem používal, obsluhoval, přímo čítače.

Obrázek

Snad se někomu bude hodit... to samé přiohnuté. :D Trochu jsem ošulil obsluhu tlačítka.
Peníze neočekávám, kritiku nepřijímám. 8O
Kód:
#include <LiquidCrystal.h>

uint8_t   i, zobrazeny=2;             // Na zacatku zobrazuj plyn
int16_t ch[8];
int16_t minus[8]={0,0,0,0,0,0,0,0};   // pro jednotlive porty
char text[17];                        // pomocny pro vypis textu

// pojmenuj si podle sebe
const char K0[] PROGMEM = {"K1: Kridelko Lev\0"};
const char K1[] PROGMEM = {"K2: Vyskovka    \0"};
const char K2[] PROGMEM = {"K3: Plyn        \0"};
const char K3[] PROGMEM = {"K4: Smerovka    \0"};
const char K4[] PROGMEM = {"K5: Kridelko Pra\0"};
const char K5[] PROGMEM = {"K6:             \0"};
const char K6[] PROGMEM = {"K7:             \0"};
const char K7[] PROGMEM = {"K8:             \0"};
PGM_P texty[8] PROGMEM = {K0,K1,K2,K3,K4,K5,K6,K7};
PGM_P _p;

uint8_t port[8]={A1,A2,2,3,11,12,13,A3};   // cisla portu Arduina pro RC kanaly 1 az 8, postupne

// prirazeni pro "LCD Keypad Shield"
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

void setup()
{
   uint8_t   i;
   for(i=0;i<8;i++) pinMode(port[i], INPUT);
   lcd.begin(16, 2);
}

void loop()
{
    // vycitani impulsu
    for(i=0;i<8;i++)
    {
        ch[i]=pulseIn(port[i], HIGH, 30000);    // nacti delku imp
    }
   
        memcpy_P (&_p, &texty[zobrazeny], sizeof(PGM_P));  // z prog mem do ram
        strcpy_P (text, _p);                               

        lcd.setCursor(0, 0);        // vypis text k prislusnemu kanalu
        lcd.print(text);            // vypis text
   
        lcd.setCursor(0,1);
        lcd.print("      ");            // vypis text
        lcd.setCursor(0,1);
        lcd.print(ch[zobrazeny]);//-minus[zobrazuj]);   

    // obsluha tlacitka
    if (analogRead(0)<900)
    {
        zobrazeny++;
        zobrazeny= zobrazeny<8 ? zobrazeny : 0;
    }   
    delay(100);
}


Nahoru
 Profil Soukromé album  
 
 Předmět příspěvku: Re: Arduino a RC přijímač
PříspěvekNapsal: ned 02.06.2013 18:07 
Moderátor serveru
Moderátor serveru

Registrován: 28.2.2005
Příspěvky: 17333
Bydliště: Rakovník, CZ
Obrázky: 0
ony tyhle implementovane funkce funguji do doby, kdy se clovek pokusi je kombinovat s vlastnimi rutinami pri praci s citaci a/nebo prerusenim, pak se to pere a neni poradne videt kde.. znam to z picu, tam jsou ty fce obdobne...

_________________
Aby mně mé záliby bavily, nemusím je brát kdovíjak vážně - jyrry.cbcnet.cz


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Arduino a RC přijímač
PříspěvekNapsal: ned 02.06.2013 19:58 
Zkušený debatér
Zkušený debatér
Uživatelský avatar

Registrován: 6.9.2009
Příspěvky: 396
Bydliště: Ostrava-Poruba
Obrázky: 10
No to je svatá pravda, u těch vestavěných funkcí není řádně popsáno jaký a jak využívají hw a studovat to ze zdrojáku je opruz.


Nahoru
 Profil Soukromé album  
 
 Předmět příspěvku: Re: Arduino a RC přijímač
PříspěvekNapsal: ned 02.06.2013 22:12 
Zkušený debatér
Zkušený debatér
Uživatelský avatar

Registrován: 19.6.2009
Příspěvky: 235
Bydliště: Plzeň, ČR
spetrs píše:
No to je svatá pravda, u těch vestavěných funkcí není řádně popsáno jaký a jak využívají hw a studovat to ze zdrojáku je opruz.


Opruz je dávat do diskuze kód kterému nerozumím. Ze zdrojáku by ses dozvěděl, jak funkce pracuje a i to, že nepoužívá žádné přerušení. Což sebou nese i pár omezení na které je třeba pamatovat. Rozhodně bych to nepoužíval v realtime aplikaci.

_________________
Toro900,SuperZoom,Siesta,Trempík,Fantasy TopmodelCZ,Multiwii QC
Optic 6 Sport 2,4GHz FrSky modul


Nahoru
 Profil {RCalbum.cz}  
 
 Předmět příspěvku: Re: Arduino a RC přijímač
PříspěvekNapsal: stř 09.10.2013 13:00 
Nováček serveru
Nováček serveru

Registrován: 9.10.2013
Příspěvky: 43
Ahoj,

chci se zeptat, výstup RC příjimače je předpokládám analogový. Chtěl bych použít RC k dorozumíváním se s quadracoptérou, ta bude řízená arduinem, protože RC má lepší dosah než třeba Wifi nebo zigbee.

Tak se chci zeptat jestli ovládání modelu přes arduino tímto způsobem dobře funguje a nejsou s tím nějaké potíže :-)

Děkuji


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Arduino a RC přijímač
PříspěvekNapsal: stř 09.10.2013 13:13 
Mazák
Mazák
Uživatelský avatar

Registrován: 22.2.2010
Příspěvky: 12370
Bydliště: ČR
Obrázky: 1
georgeld píše:
chci se zeptat, výstup RC příjimače je předpokládám analogový...

Nikoli. Na výstupech přijímače není analogový, ale digitální signál ve formátu PWM na úrovni TTL. Šířka impulsu na příslušném výstupu RC přijímače obvykle v rozmezí od 1 do 2ms (střed 1,5ms) odpovídá např. u serva příslušné úrovni výchylky mezi krajními polohami nebo rozmezí plynu od minima po maximum u regulátoru apod.


Nahoru
 Profil Soukromé album  
 
 Předmět příspěvku: Re: Arduino a RC přijímač
PříspěvekNapsal: stř 09.10.2013 13:30 
Nováček serveru
Nováček serveru

Registrován: 9.10.2013
Příspěvky: 43
Aha, a je pak rizeni jedinym arduinem ok? Kdyz budu mit dejme tomu k arduinu připojených 6 PWM signalu z prijimace, a budu muset na portech stále odposlouchávat PWM signál z těch kanálů, věnovat každému alespoň 2ms, do toho zpracovávat ruzne informace nutne k rizeni quadkoptery (senzory, motory, vypocty) - bude pak ok odezva od vysilace?


Nahoru
 Profil  
 
Zobrazit příspěvky za předchozí:  Seřadit podle  
Odeslat nové téma Odpovědět na téma  [ Příspěvků: 22 ]  Přejít na stránku 1, 2  Další

 


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 2 návštevníků


Nemůžete zakládat nová témata v tomto fóru
Nemůžete odpovídat v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete přikládat soubory v tomto fóru

Hledat:
Přejít na:  

 

  Powered by phpBB® Forum Software © phpBB Group  Český překlad – phpBB.cz 

 

NAVRCHOLU.cz