Blikání ledkou

Wiring, C++, C, Java, ...
Pravidla fóra
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
Awandalor
Příspěvky: 11
Registrován: 30 čer 2019, 17:41
Reputation: 0

Blikání ledkou

Příspěvek od Awandalor » 08 lis 2020, 17:44

Ahoj, můžete mi prosím poradit jak tohle blikání udělat bez delay? např přes millis? Ono toho blikání potom bude v kódu vícero. Stavím osvětlení RC modelu - některá světla svítí stále, některá jsou záblesková jako v kódu níže, jedna ledka bude "maják", a to celé by mělo jít zapnout/vypnout vysílačkou.


Kód: Vybrat vše

void setup() {
  pinMode(2, OUTPUT);
}

void loop() {
  digitalWrite(2, HIGH);   
  delay(100);
  digitalWrite(2, LOW);
  delay(40);
  digitalWrite(2, HIGH);
  delay(100);                 
  digitalWrite(2, LOW);    
  delay(1000);                       
}

Uživatelský avatar
pavel1tu
Příspěvky: 2040
Registrován: 26 říj 2017, 08:28
Reputation: 0
Bydliště: Trutnov
Kontaktovat uživatele:

Re: Blikání ledkou

Příspěvek od pavel1tu » 08 lis 2020, 18:56

UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

Awandalor
Příspěvky: 11
Registrován: 30 čer 2019, 17:41
Reputation: 0

Re: Blikání ledkou

Příspěvek od Awandalor » 08 lis 2020, 18:58

Super Pavle, těchto návodů jsem našel několik ale nepřišel jsem na to jak udělat ten "rychlej dvojblik" jako mám já pomocí delay.

Uživatelský avatar
pavel1tu
Příspěvky: 2040
Registrován: 26 říj 2017, 08:28
Reputation: 0
Bydliště: Trutnov
Kontaktovat uživatele:

Re: Blikání ledkou

Příspěvek od pavel1tu » 08 lis 2020, 19:13

Nevím kolik toho máš, já blikám takovými "pulzy" na větroni, pomocí ATtiny.

Pokud je těch blikátek povícero, s různými časy (řešil jsem jich 8) - řešil jsem to vícero ATtiny:
- jedno ATtiny jeden druh blikání
- Arduino Micro mi to vše řídí - log. "1" zapíná jednotlivé ATtiny

PS: ale pokud toho není moc - jde to na jednom Arduinu - jen se to musí správně poskládat, aby se NIKDY na nic nečekalo.
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

AstroMiK
Příspěvky: 476
Registrován: 08 pro 2017, 19:05
Reputation: 0

Re: Blikání ledkou

Příspěvek od AstroMiK » 08 lis 2020, 19:57

Není to úplně ideální, ale kdysi jsem něco podobného řešil takhle:
Místo millis() jsem měl pevně danou dobu trvání jedné smyčky (pro příklad 10ms).
A pak na základě počtu uběhnutých smyček rozsvěcím nebo zhasínám příslušné LED.

Kód: Vybrat vše

unsigned long cyklus;     // globalni promenna pro pocitani smycek

void setup(void)
  {
    pinMode(2,OUTPUT);    // pin s prvni LED
    pinMode(3,OUTPUT);    // pin se druhou LED
    pinMode(4,OUTPUT);    // pin se treti LED
  }


void loop(void)
  {
    
    if (cyklus % 124 ==   0)  rozsvit_LED(2);    // LED 1 (pin D2) blika nepravidelnym dvojblikem s periodou 124 cyklu (1,24 sekundy)
    if (cyklus % 124 ==  10)   zhasni_LED(2);    //               to je ten priklad ze zadani prvniho prispevku vlakna
    if (cyklus % 124 ==  14)  rozsvit_LED(2);
    if (cyklus % 124 ==  24)   zhasni_LED(2);

    if (cyklus % 100 ==   0)  rozsvit_LED(3);    // LED 2 (pin D3) blika pravidelne s 50% stridou s periodou 100 cyklu (1 sekunda)                                       
    if (cyklus % 100 ==  50)   zhasni_LED(3);                                       
    
    if (cyklus % 510 ==   0)  rozsvit_LED(4);    // LED 3 (pin D4) blikne 1x za 5 sekund na 0,1 sekundy (perioda 5,1 sekundy = 510 cyklů)                                       
    if (cyklus % 510 ==  10)   zhasni_LED(4);                                       



    cyklus ++;
    if (cyklus == 6324000UL) cyklus = 0;         // celkova spolecna delka jedne periody vsech blikani (124 x 100 x 510 = 6324000)
    delay(10);                                   //    (mozna by se dal najit i mensi spolecny nasobek)
  }


void rozsvit_LED(int pin_led)
  {
    digitalWrite(pin_led,HIGH);
  }

void zhasni_LED(int pin_led)
  {
    digitalWrite(pin_led,LOW);
  }


Ta celková společná délka jedné periody blikání znamená, za jak dlouho se všechny cykly všech LED sesynchronizují do úvodní pozice.
Nejjednodušší je vynásobit všechny periody mezi sebou, ale zkušený matematik by možná našel i menší společný násobek.

Awandalor
Příspěvky: 11
Registrován: 30 čer 2019, 17:41
Reputation: 0

Re: Blikání ledkou

Příspěvek od Awandalor » 08 lis 2020, 22:12

Pavel:

Použít několik atin a řídit je jedním arduinem a v těch atinách používat na blikání delay je jedna z možností ale příjde mi zybtečný kuli pár ledkám mít v letadle několik počtačů. Je to řešení které mě opravdu nenapadlo a fungovalo by.

AstroMik:

Dík tohle je kód kterej dělá co chci, rozumím mu, dokážu ho upravit a implementovat do svého projektu.

AstroMiK
Příspěvky: 476
Registrován: 08 pro 2017, 19:05
Reputation: 0

Re: Blikání ledkou

Příspěvek od AstroMiK » 09 lis 2020, 09:02

Mimochodem,jestli ti to pomůže, tak rozsvěcování a zhasínání blikače v modelu letadla přes PWM signál od vysílačky pomocí ATtiny13 jsem dělal tady:
http://www.astromik.org/raspi/pozicni_svetla/

ohruska
Příspěvky: 228
Registrován: 08 pro 2017, 20:56
Reputation: 0

Re: Blikání ledkou

Příspěvek od ohruska » 09 lis 2020, 09:46

Zdravím.
Zkus se podívat na moje stránky: https://sites.google.com/site/modelyota ... eni-modelu
Používám to na několika modelech letadel a jednom modelu traktoru a funguje to.
Také jsem dělal aplikaci pro vrtulník se zavíráním podvozku a zpožděným zavíráním krytů podvozku.
Kdybys nenašel knihovnu "UniPWMControl", můžu poslat.
Ota

Awandalor
Příspěvky: 11
Registrován: 30 čer 2019, 17:41
Reputation: 0

Re: Blikání ledkou

Příspěvek od Awandalor » 09 lis 2020, 19:53

Oto to je pecka, mám doma 1w ledky a měl jsem v plánu je krmit přes N-fety, ale tvoje použití ULN2003 mě nenapadlo. Mám doma několik ULN2003AN, nenapadlo mě že mohu spojit výstupy a tím získat vyšší proud. Tak že uln budu krmit PWM, ledky spočítám jen na předřadný odpor - drivery doma nemám.

Letadlo bude dvoumotorové elektro - tím pádem budu mít 2 stejné regly s BECem (5,5V 4A) . 1. BEC pro serva a přijímač, 2. BEC může být pro některé ledky. Např. zábleskové mám teď pokusně 3 v sérii (křídla + ocas) a krmím to přes n-fet a předřadnej odpor přímo z 3S lipolky a to je ok.

V plánu je 2x červený maják, 3x bílý dvojzáblesk, červená + zelená - stálý svit na koncích křídel, 2 - 3 ledky s reflektorem jako přistávací (2x v náběžné hraně nebo na spodku křídla, 1x přední podvozková noha).

Letadlo bude FT Guinea Pig - stavím z XPS desek Starlon 6mm.

ohruska
Příspěvky: 228
Registrován: 08 pro 2017, 20:56
Reputation: 0

Re: Blikání ledkou

Příspěvek od ohruska » 09 lis 2020, 22:55

Použití ULN2003 byla první volba. A asi ne ta správná. Dává totiž pwm , ale pro přivedená napětí. Každá barva ledky má jiné napětí a takové topící srážecí odpory v letadle, to je blbost.

Je daleko lepší použít toto:
Proudový převodník s řídícím obvodem PT4115 pracuje v rozmezí 6-30V (po odletování usměrňovače funguje od 5.2V na plný výkon, od 4,8V na omezený proud), proud se řídí odporem, na obrázku R300 -0.3ohm. Při tomto nastavení dává elektronika 333mA (LEDka 1W). Spínat tento převodník můžeme přímo z arduina nebo z přijímače přes sekvencer. Výpočet proudu pro LEDku I=0.1/R. Změnou odporu je tedy možno měnit proud LEDky. Řízení, ovládání PWM je možno připojit na nožičku 3.
SAM_1280.JPG
Navíc, při použití PT4115, může být použito sériové zapojení ledek. Pro trojčlánek až 3 kusy (třeba všechny pozičky a taky všechny přistávací světla).
Stroboskopy mám programované s posunutím a majáky nahoře a dole taky.

Jen malá ukázka - první pokus na letadle: https://www.youtube.com/watch?v=s-qtwMKX6i8

Pokud chceš svítit na max. výkon je lepší použít ledku 3W, s proudovým převodníkem 1W. Výhoda je, ledka 3w má větší čip a při 1W se méně hřeje a více svítí. Pro ledky se dá koupit 12mm chladič, případně na něj ještě žebrovaný chladič 12x12mm.

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 6 hostů