Právě je pon led 22, 2018 1:22 am

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 6 ] 
Autor Zpráva
 Předmět příspěvku: Arduino
PříspěvekNapsal: čtv pro 21, 2017 1:00 am 
Offline
Častý přispěvatel
Uživatelský avatar

Registrován: stř lis 06, 2013 9:28 pm
Příspěvky: 889
Bydliště: Hořice
Docela mě překvapuje, že tu na fóru, nemáme žádny topic o Arduino.
Čekal bych, že si lidi na těhle mikroprocesorech budou dělat třeba světelné moduly a další věci.

Takže co je třeba?
1) Určitě nějaké to Arduino. Doporučuji na vývoj programu koupit třeba na ebayi ci aliexpresu kit Arduino Uno s nepájivým polem a sadou elektronických součástek. Cca 400kč.
2) PC či notebook na kterém budeme programovat.
3) Základní znalosti elektroniky. A nějaké to vybavení.
4) Arduino Nano které je malé a vhodné pro zástavbu ale má všechny porty jako velké Arduino Uno. cca 40kč

Jde se obejít bez Arduino Uno kitu a programovat přímo na Nano ale na vývojovém kitu jde vyzkoušet spousta věcí něž se doladí finální zapojení.

Programováni je poměrně snadné a na spoustu věcí jde na internetu najít už hotový příklad. Stejně tak jako hodně příruček pro začátečníky.
Jedna třeba zde: http://www.hobbyrobot.cz/wp-content/upl ... matora.pdf


Sám s arduinem začínam. Takže zatím mám udělán program pro ovládání MP3 přehrávače umístěného v modelu.


Vstup jsou 3 kanály přijímače. Výstupy Arduina ovládám přes optočleny tlačítka play/pause, next, prev, vol+, vol-. Dále využívám dva výstupy pro dvě diody indikující stav.
Co se týče SW, tak pro diagnostické účely tak mám v programu povolen seriový port a posílám přes něj na PC nasnímané hodnoty z přijímače na vstupech arduina.
Přidal jsem i smyčku která kontroluje nejsou všechny kanály v krajní poloze, což pro mě znamená nezapnutou vysílačku a bez ošetřeni téhle situace bych měl na přehrávači pernamentně sepnutá tlačitka.

Program a zapojení mám odzkoušené na nepájivém poli. Teď přes vánoce to budu nahrávat do Nano a dělat konečné zapojení.

Kód:
unsigned long ch1;
unsigned long ch2;
unsigned long ch3;

int kontrola=0;
int tisk=0;

void setup() {
  // put your setup code here, to run once:
pinMode(11, INPUT); //kanal 1
pinMode(12, INPUT); //kanal 2
pinMode(13, INPUT); //kanal 3

pinMode(2, OUTPUT); //zelena led
pinMode(3, OUTPUT); //cervwna led
pinMode(4, OUTPUT); //hlasitost +
pinMode(5, OUTPUT); //hlasitost -
pinMode(6, OUTPUT); //predchozi v poradi
pinMode(7, OUTPUT); //dalsi v poradi
pinMode(8, OUTPUT); //play/pause
pinMode(9, OUTPUT); //testovaci

Serial.begin(9600);

}

void loop() {
  // put your main code here, to run repeatedly:

digitalWrite(2, HIGH);
digitalWrite(3, LOW);

delay(50);

ch1 = pulseIn(11, HIGH, 25000);
ch2 = pulseIn(12, HIGH, 25000);
ch3 = pulseIn(13, HIGH, 25000);

 if (tisk>10) //Vypis hodnot kanalu na PC 1x za 20 cyklu
       {
        Serial.print("Channel 1:");
        Serial.println(ch1);
        Serial.print("Channel 2:");
        Serial.println(ch2);
        Serial.print("Channel 3:");
        Serial.println(ch3);
        tisk=0;
       }
       else
       {
       tisk=tisk+1;
       } //konec vypisu hodnot

       if (ch1<10 && ch2<10 && ch3<10)   //detekce vypnute vysilacky
                {
                digitalWrite(4, LOW);
                digitalWrite(5, LOW);
                digitalWrite(6, LOW);
                digitalWrite(7, LOW);
                digitalWrite(8, LOW);
                 
                 delay(150);
                 digitalWrite(2, LOW);
                 digitalWrite(3, HIGH);
                 delay(200);             
                 }
                 else
                 {  //Zacatek cyklu


                          if (ch1>1250 && ch1<1650)  //ch1 hlasitost +/-
                                  {
                                   digitalWrite(4, LOW);
                                   digitalWrite(5, LOW);
                                  }
                                  else
                                  {
                                  if (ch1>1650)
                                        {
                                        digitalWrite(4, LOW);
                                        digitalWrite(5, HIGH);
                                        }
                                        else
                                        {
                                        digitalWrite(4, HIGH);
                                        digitalWrite(5, LOW);             
                                        }
                                  }  //konec ch1 hlasitost +/-
 
                            if (ch2>1250 && ch2<1650)  //ch2 predchozi/dalsi
                                      {
                                      digitalWrite(6, LOW);
                                      digitalWrite(7, LOW);
                                      }
                                      else
                                      {
                                      if (ch2>1650)
                                                {
                                                digitalWrite(6, LOW);
                                                digitalWrite(7, HIGH);
                                                }
                                                else
                                                {
                                                digitalWrite(6, HIGH);
                                                digitalWrite(7, LOW);             
                                                }
                                      }  //konec ch2 predchozi/dalsi
     
                              if (ch3>1650)   //tlacitko play/pause
                                      {
                                      digitalWrite(8, HIGH);
                                      //delay(100);         
                                      //digitalWrite(8, LOW);
                                      }
                                      else
                                      {
                                      digitalWrite(8, LOW);           
                                      } //konec tlacitko play/pause
                     
                     
           
                  } //Konec cyklu a detekce vysilacky 
             


             
}   //konec programu


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Arduino
PříspěvekNapsal: čtv pro 21, 2017 8:16 am 
Offline
Píšu hodně
Uživatelský avatar

Registrován: pon dub 26, 2010 11:00 pm
Příspěvky: 1864
Bydliště: Praha, Kladno
Tohle je pro mě zajímavé téma, jen tomu rozumím jak koza petrželi, tak třeba se tu něco přiučím.
Programovatelnej světelnej modul umožňující personifikaci podle osobních potřeb by byl bezva...

_________________
2,4 Ghz
http://zaxcz.rajce.idnes.cz/
http://modelmarket.cz/detail/?product=6 ... 600&list=1


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Arduino
PříspěvekNapsal: čtv pro 21, 2017 4:19 pm 
Offline
Častý přispěvatel
Uživatelský avatar

Registrován: stř lis 06, 2013 9:28 pm
Příspěvky: 889
Bydliště: Hořice
Zas tak slozity to neni.
Na zacatku definujes promene hodnoty ktere budes pouzivat.
Kód:
unsigned long ch1;
unsigned long ch2;
unsigned long ch3;

int kontrola=0;
int tisk=0;

Pak definujes vstupy a výstupy, které budes pouzivat. Pokud chces ale pouzivat seriovej port pro komunikaci s PC (Serial.begin(9600); ), tak musíš vynechat piny 0 a 1. Ale pokud to nepotřebuješ, tak je můžeš využít..
Piny je možno použivat v různych konfiguracich. Většina je sice digitálních ale některé maji Analog/Digital převodníky. Nám asi bude vetšinou stačit digitální 0 či jedna ale je možnost využít třeba i PWM modulaci.
Kód:
void setup() {
  // put your setup code here, to run once:
pinMode(11, INPUT); //kanal 1
pinMode(12, INPUT); //kanal 2
pinMode(13, INPUT); //kanal 3

pinMode(2, OUTPUT); //zelena led
pinMode(3, OUTPUT); //cervwna led
pinMode(4, OUTPUT); //hlasitost +
pinMode(5, OUTPUT); //hlasitost -
pinMode(6, OUTPUT); //predchozi v poradi
pinMode(7, OUTPUT); //dalsi v poradi
pinMode(8, OUTPUT); //play/pause
pinMode(9, OUTPUT); //testovaci

Serial.begin(9600);

}


Ve smyčce void loop() { pak už pak píšeš vlastní program.

Z programu je asi nejzajímavější část kde měřím délku pulzu dignálu z přijímače.
Proměná = pulseIn(číslo pinu, volba detekovane hrany signálu, max doba měření pulzu);
Kód:
ch1 = pulseIn(11, HIGH, 25000);
ch2 = pulseIn(12, HIGH, 25000);
ch3 = pulseIn(13, HIGH, 25000);


Na mém přijímači jsem naměřil hodnoty cca 250 pro levou výchylku, 1000 pro neutrál a 1750 pro pravou výchylku.

Když vypnu přijímač či vysílač, tak mi naměřené hodnoty padnou na 0 a jelikož jsem nechtěl aby mi to dělalo neplechu, tak jsem vlastní program dal do podminky.
Mám to nastavený tak, že pokud dojde ke splnění podmínek, tak všechny výstupní piny resetuju do 0. Akorat tam mám ještě přidanou indikaci stavu střidavým blikáním zelené a červené. To je ta část se zpožděním (delay). Hodnoty jsem nastavil zhruba tak aby blikaly stejně dlouhou dobu. Kdyby někomu chyběla druhá část blikání tak ta je na začátku loop cyklu.
Kód:
       if (ch1<10 && ch2<10 && ch3<10)   //detekce vypnute vysilacky
                {
                digitalWrite(4, LOW);
                digitalWrite(5, LOW);
                digitalWrite(6, LOW);
                digitalWrite(7, LOW);
                digitalWrite(8, LOW);
                 
                 delay(150);
                 digitalWrite(2, LOW);
                 digitalWrite(3, HIGH);
                 delay(200);             
                 }
                 else
                 {  //Zacatek cyklu programu
ZDE VLASTNI PROGRAM
                  } //Konec cyklu a detekce vysilacky 


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Arduino
PříspěvekNapsal: pát led 12, 2018 9:03 am 
Offline
Uživatel
Uživatelský avatar

Registrován: sob lis 27, 2010 12:00 am
Příspěvky: 489
Bydliště: České Budějovice
Ahoj Woyto,

tak přiznám se, že jsem nad Arduinem hodně přemýšlel a dost mě to zajímá, takže děkuji za založení tématu - budu sledovat.
Zároveň podotýkám, že sám se snažím "vyrábět" světelný modul pro auto z PICAXE 08M2+, ale nepracuje úplně přesně tak, jak bych si představoval.
Lépe řečeno - funguje to docela dobře, ale mám problém s tím, že 08M2+ je dost primitivní a pomalý, takže jsem narazil na 2 základní problémy => jednak nedokážu PIC donutit, aby v rozumné míře odezvy reagoval tak, jak jsem si představoval a jednak jsem omezený malým počtem výstupních pinů.
Přešel jsem tedy na PICAXE 14M a tím jsem odstranil druhý zmiňovaný problém - nedostatek pinů, ale první problém přetrvává.
Vysvětlím:
Na 08M2+ mi jede světelný modul, který umí několikanásobným stisknutím tlačítka vysílačky postupně rozsvěcet jednotlivé světelné okruhy modelu (dlavní, mlhovky, rampu) a následně je zase zhasínám. U druhého modelu jsem si řekl, že by byly fajn brzdové a couvací světla - taky hotovo, funguje to solidně.

Chtěl jsem ale udělat "společný světelný modul, u kterého by fungovaly jak brzdovky a couvačky, tak bych i mohl postupně zapínat světelné okruhy zmíněné výše. Dostal jsem se ale přirozeně k problému s nedostatkem výstupů na 08M2+ a proto jsem přešel na 14M, kde je ale zásadní problém. 14M totiž neumí měnit taktovací frekvenci, jako 08M2+, takže je veškerá reakce na couvání a brzdění velice pomalá.
Jsem schopen paralelně spustit 2 procesy najednou (1)brzdovky+couvačky 2) světelné okruhy), ale vždy s velkým zpožděním, takže je to v praxi nepoužitelné.

A TEĎ PROČ TO VLASTNĚ VŠECHNO PÍŠU:
Umí Arduino výše popsanou funkci? Jak by byl na výše popsané schopný reagovat?

Viděl jsem na YT video osvětlení kompletního modelu, kde například couvá, svítí a ještě k tomu bliká směrovkami, takže teoreticky by to mohlo fungovat dobře už kvůli tomu, že je vnitřní frekvence 16 MHz, jestli se nepletu...


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Arduino
PříspěvekNapsal: pát led 12, 2018 11:11 am 
Offline
Častý přispěvatel
Uživatelský avatar

Registrován: stř lis 06, 2013 9:28 pm
Příspěvky: 889
Bydliště: Hořice
Zas tolik ještě neumím ale myslím že bych to v rámci smyčky dal.

Pokud nebudu používat pro blikání funkci delay ale použiju ve funkci nějakou hodnotu kterou každou smyčku povýšim o 1 než dosahnu požadované hodnoty a pak ji vyresetuji.
Celý cyklus mi tak bude běhat rychle a nebude se nikde čekat.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Arduino
PříspěvekNapsal: pát led 12, 2018 1:37 pm 
Offline
Veterán fóra
Uživatelský avatar

Registrován: pon kvě 20, 2013 2:31 pm
Příspěvky: 3708
Bydliště: Rudolfov
Michale,
Presne na tohle arduino pouzivam v rangeem. Couvacky, brzdovky si delaj svoje podle packy plynu (okamzita reakce), v programu se mysli i na razeni, pri jizde dopredu zustava zarazeno D, pri stani po par vterinach zaradi P, kdykoliv se couva tak R. Tri polohy serva, neovlada se nic, nepodarilo se mi zatim dokonce ani zacyklit, vsechny prechody rezimu to spolehlive strida podle pozice packy. Blinkry extra tlacitko a svetla jednim knoflikem projizdim postupne (obrys, tlum, dalk, zhas, atd).
Napisu Honzikovi co mi to delal, at navali ten program, cast na svetla jiste rad vyuzijes

_________________
http://expeditionrc.rajce.idnes.cz/


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ů: 6 ] 

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 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:  

Copyright © 2012 Modelářské fórum RC4x4.cz - Forum pro všechny příznivce pomalé jízdy terénem.
Jedeme na phpBB. Máme rádi expediční rc modely a vlastně vše, co má alespoň čtyři kola.