Close

Vojtěch Vosáhlo

Vytvořené odpovědi

Aktuálně je na stránce zobrazeno 15 příspěvků - 1. až 15. (celkem z 252)
  • Autor
    Příspěvky
  • odpověď na: Arduino mini pro + NRF24L01+ – napajení #12128
    Vojtěch Vosáhlo
    Účastník

    Spotřeba závisí na tom jak vše budete používat, NRF i arduino mají možnosti spánku které mohou snížit odběr třeba 100x a více. Vše teda závisí na tom jak si kód napíšete. Kdybychom se podívali na nejhorší možnost, zřalo by NRF nonstop 12mA a arduino kolem 10mA. To je 22mA, na 3 hodiny by byla tedy potřeba baterie > 66mAh.
    Chce to samozřejmě větší baterii aby napětí při vybití nekleslo na hodnotu menší než 3.3V, to je vše v datasheetu.

    Pokud je v datasheetu max 3.,6V tak bych do toho 3,7V nepouštěl, dobře to tomu určitě neudělá…

    PROSÍM POUŽÍVEJTE NOVÉ FÓRUM, TOTO BUDE BRZY VYPNUTÉ.

    odpověď na: Napájení arduina konektorem #12028
    Vojtěch Vosáhlo
    Účastník

    Nefunguje protože byl špatný, tady je pro úplnost ten správný http://playground.arduino.cc/Learning/WhatAdapter

    odpověď na: Napájení arduina konektorem #12024
    Vojtěch Vosáhlo
    Účastník

    Je to souosý konektor s vnitřním průměrem 2.1mm a + uvnitř. Na GME třeba toto: https://www.gme.cz/napajeci-souosy-konektor-dci-scp-2009b
    Pak už stačí jen klipsa na 9v baterii.
    Arduino o tom má i článek ? zde.

    odpověď na: proměnný název proměnné #11944
    Vojtěch Vosáhlo
    Účastník

    Pole musíte mít nadefinované mimo smyčku, třeba na začátku programu. Takhle s ním může pracovat jen smyčka ve které bylo pole „stvořené“.

    odpověď na: Otáčení solárního panelu za sluncem #11926
    Vojtěch Vosáhlo
    Účastník

    No nevím jestli v nejlepších rukou, k takovým funkčním diagramům mám ještě kousek cesty. Mimo to kde je kreslíš? Nějaký osvědčený soft by se hodil.

    Každopádně vložte sem prosím kód jak psal jirka. Použijte možnost textu code. Takhle se to opravdu velmi těžko čte. Nebo to vložte třeba na pastebin a pak pošlete odkaz, je to jedno. Člověk se v tom akorát nemůže vyznat…

    odpověď na: Otáčení solárního panelu za sluncem #11920
    Vojtěch Vosáhlo
    Účastník

    Pane si prosím nechte, na to ještě věk nemám 😉 a odpovím trošku za jirku, snad to nebude vadit
    DS18B20 jsou totiž digitální senzory – jednoduše řečeno vysílají jedničky a nuly s určitou časovou prodlevou (běží na protokolu onewire). Arduino si vlastně měří časy po které je pin na 1 a nebo na 0 a podle toho sestaví bity, z nich pak stvoří data. O tohle všechno se stará jedna knihovna která udělá vše za vás a vrátí vám teplotu. Proto se pro tyto čidla používají digitální piny.

    Zkuste na ten kód kouknout, něco poupravit a ozvěte se.

    odpověď na: Nejdou mi nainstalovat ovladače Arduino UNO #11913
    Vojtěch Vosáhlo
    Účastník

    Pak by se dalo vypnout vyžadování digitálního podpisu a naistalovat ovladače ale být vámi ještě počkám. Nejspíš se tu ozve někdo kdo bude vědět víc než já. To co jsem navrhoval byly nejstandardnější řešení.

    odpověď na: Nejdou mi nainstalovat ovladače Arduino UNO #11910
    Vojtěch Vosáhlo
    Účastník

    No jediné co mě přijde divné je že se ve správci zařízení zobrazuje arduino jako USB Serial Port. Kdyby byl na čipu správný firmware nebo byly naistalované správné ovladače mělo by se projevovat jako Arduino UNO. Možná je to ale jen tím že je neoriginální. Vy jste zkoušel přeinstalovat ovladače? Zkuste je odstranit a nainstalovat ty výchozí od arduina. COM port nechte na COM9.

    odpověď na: Nejdou mi nainstalovat ovladače Arduino UNO #11904
    Vojtěch Vosáhlo
    Účastník

    A jste si jistý že je to opravdu arduino? Např když ho odpojíte, zmizí COM1 ze správce zařízení? Osobně bych čekal že to bude spíš COM7. Nevšiml jsem si pojmenování, je to COM1. Postupujt tedy jak popsáno níže.

    Pokud jste si jistý že to arduino je tak bych postupoval podle tohoto návodu. Pravym na ten port o kterym si myslíte že je to arduino, proklikejte se jako v návodu a změňte COM1 na něco jiného. Třeba COM9.

    odpověď na: Nejdou mi nainstalovat ovladače Arduino UNO #11900
    Vojtěch Vosáhlo
    Účastník

    Důležitá je tato linka:

    avrdude: ser_open(): can’t open device „\\.\COM1“: Přístup byl odepřen.

    Arduino IDE očividně nemá přístup k danému portu.
    Používáte správný port? Screenshot ze „správce zařízení“ (pokud máte windows)by mohl pomoci.
    Zkuste arduino IDE spustit jako správce a pak programovat.
    Zkuste vypnout jakékoliv programy které by mohly port blokovat.

    odpověď na: Nejdou mi nainstalovat ovladače Arduino UNO #11896
    Vojtěch Vosáhlo
    Účastník

    Stejná otázka, co vypíše arduino IDE? Nejlepší by bylo v nastavení zapnout slovní výstup (verbose output) a pak poslat co vypíše konzole při nahrávání.

    odpověď na: Otáčení solárního panelu za sluncem #11887
    Vojtěch Vosáhlo
    Účastník

    A teď k poslední otázce. Problém je že otáčenoím poťákem ničeho nedocílíte. Digitální piny umí číst jen hodnotu 0 nebo 1 a to vše závisí na tom jestli je překročena určitá napěťová hranice. Nedostanete tedy nic víc než 1 nebo 0.

    odpověď na: Otáčení solárního panelu za sluncem #11886
    Vojtěch Vosáhlo
    Účastník
    1.
    Jak psal jirka, pro definici pinů používejte #define, tady jsem vás špatně navedl na proměnné. Definice vypadá třeba takto: #define pinR1 A0
    
    2.
    Proč nastavujete hodnoty pinRx_value na nějaký z analogových pinů? Není to potřeba, stačí je inicializovat jako prázdnou proměnnou: int pinRx_value;
    Data se do nich zapisují až pomocí analogRead()
    
    3. 
    V setupu máte na konci navíc 2 závorky, proč? Měl jste s tím nějaký úmysl?
    Jde o tento kousek kódu:
    

    {
    Serial.begin(9600);
    Serial.println(„Pripojeno“);
    }
    `
    4.
    Po void loop() máte spoustu závorek. To mají být funkce (smyčky)? Pokud ano chybí jim jméno a typ. Musí se definovat takto:
    typ nazev(odatecne promenne){}
    Typ: Void – nic nevrací
    Název proměnné – int, boolean, … – funkce vrací hodnotu typu této proměnné

    5. DigitalWrite u filtrace ZAP-VYP máte špatně, ne digitalWrite(pinFiltr = HIGH) ale digitalWrite(pinFiltr, HIGH)

    6.
    Proměnné minNeco a maxNeco byly zamýšlené pro určení těch hranic. Podmínku byste tedy zapisoval třeba takto:
    If(namrenaHodnota > R1min) neco sepni;
    Namerena hodnota může být třeba z analogRead(); pokud tato hodnota stoupne nad hodnotu R1min která je pevně definovaná třeba na 120 tak můžete něco spustit.

    odpověď na: Otáčení solárního panelu za sluncem #11862
    Vojtěch Vosáhlo
    Účastník

    Tak jo, máte to hezky nastrukturované, vzal jsem to a trochu poupravil. Nejdůležitější jsou asi ty proměnné, pokud je budete používat místo pevného definování pinů tak můžete pak cokoliv jednoduše měnit. Definice pinu by tedy teď měla vypadat třeba takto: int pinR1 = 11;

    Pak jsem vzal kód který jste si jen tak předepsal a hodil ho do reálně funkčího kódu.

    Opět se ptejte na vše co vás napadne.

    
    //Definice pinu
    int pinR1 = ...; //pin s fotorezistorem 1
    int pinR2 = ...; //pin s fotorezistorem 2
    int pinRZ = ...; //pin s fotorezistorem na zapade
    int pinRV = ...; //pin s fotorezistorem na vychode
    int pinMotorP = ...; //pin s rele spoustejici motor doprava
    int pinMotorL = ...; //pin s rele spojstejici motor doleva
    int pinKoncakV = .. ; //pin s koncovym spinacem na vychode
    int pinKoncakZ = ...; //pin s koncovym spinacem na zapade
    int pinTrafo = ...; //pin s rele pr zapnuti trafa a napajeni motoru
    
    //Definice hodnot pouzivanych programem
    int maxTeplotaVzduchu = ...;
    int minTeplotaVzduchu = ...;
    int maxTeplotaVody = ...;
    int minTeplotaVody = ...;
    int maxRozdilSvetla = ...;
    boolean ohrivej = ...; //promena skryvajici 1 nebo 0 bude urcovat jestli chceme ohrivat nebo ne
    
    void setup() {
      //nastav piny pro ovladani motoru na vystupy
      pinMode(pinMotorP, OUTPUT);
      pinMode(pinMotorL, OUTPUT);
    
      //nastav piny fotorezistoru jako vstupy
      pinMode(pinR1, INPUT);
      pinMode(pinR2, INPUT);
      pinMode(pinRZ, INPUT);
      pinMode(pinRV, INPUT);
      
      //nastav piny s koncovymi spinaci jako vstupy
      pinMode(pinKoncakV, INPUT);
      pinMode(pinKoncakZ, INPUT);
    
      //nastav pin pro ovladani trafa jako vystup
      pinMode(pinTrafo, OUTPUT);
    }
    
    void loop(){
    
      //urcete si podminky kdy chcete aby se ohrivalo a kdy ne, podle toho se pak bude spoustet program dole
      if(neco a neco je splneno){ //treba pokud (teplotaVzduchu > teplotaVzduchuMin && teplotaVody < maxTeplotaVody)
        ohrivej = true;  
      }else{
        ohrivej = false;  
      }
    
      
      if(ohrivej){ //spust program pouze pokud chceme ohrivat
        
        digitalWrite (pinTrafo,HIGH); // zapni filtraci a napájení transformátoru (půjde zapínat i samostatně přes vypínač)
        
        while(digitalRead(pinKoncakV) == 0){ //otacej motorem na pravo dokud se nesepne koncak
          digitalWrite(pinMotorP, HIGH);
        }
    
        digitalWrite(pinMotorP, LOW); //potom co se sepne koncak se smycka rozpadne a motor se vypne
        
        if(abs(rozdilRezistoru) > maxRozdilSvetla){ //pokud je rozdil svetla mezi rezistory (absolutni hodnota, chceme znat jen rozdil, ne ne kterem je vic a na kterem mene) vetsi nez maxRozdil svetla pokracuj dale
          //kod pro pohybovani panelem dokud se rozdil mezi rezistory nezmensi
        }
    
        
      }
    }
    
    int rozdilRezistoru(){
      int R1 = analogRead(pinR1); //Přečtu napětí na prvním fotorezistoru
      int R2 = analogRead(pinR2); //Přečtu napětí na druhém fotorezistoru
      int rozdil = R1 – R2; //Rozdíl napětí
      return rozdil; //Vrátím rozdíl napětí jako hodnotu
    }
    
    odpověď na: Otáčení solárního panelu za sluncem #11857
    Vojtěch Vosáhlo
    Účastník

    Já osobně bych u takového projektu volil DS18B20, dají se najít i v hezkých vodotěsných obalech a nikdy s nimy nebyl problém. Pojďme tedy na takovou reprezentaci programu slovy:

    
    
    //definice pinů a proměnných
    
    smyčka{
    
     pokud (cas = den){
       pokud(chceme ohrivat){
         //třeba 10, chce to nějaký prostor, testovat jestli se = 0 by nemělo význam
         dokud (rozdil fotorezistoru < 10){
           otacejMotor(strana = x); //Otáčej motor na stranu kde je na fotor. víc světla
         }
       }nebo pokud(nechceme ohrivat){
         otacejMotor(strana = x); //Otáčej motor tak aby na pannel svítilo co nejmíň světla - nebo nastav panel na jednu z konečných pozic
       }  
     }pokud (cas = noc); // Nedelej nic
    }
    

    Je to super zjednodušené ale pomůže to pro představu. Osobně bych začal „kódit“ trochu od prostředka. Pojďme zkusit třeba zrealizovat funkci co přečte rozdíl mezi fotorezistory.

    
    int rozdilRezistoru(){
      int R1 = analogRead(pinR1); //Přečtu napětí na prvním fotorezistoru
      int R2 = analogRead(pinR2); //Přečtu napětí na druhém fotorezistoru
      int rozdil = R1 - R2; //Rozdíl napětí
      return rozdil; //Vrátím rozdíl napětí jako hodnotu
    }
    

    Tahle funkce vám jednoduše vrátí rozdíl mezi senzory. Ale pozor, není to hodnota napětí. analogRead(); totiž vrací hodnoty 0-1023 (10bit) které jsou vlastně namapované na referenci. Tzn. s referencí 5V znamená hodnota 0 0V a 1023 5V. Je to zatím srozumitelné? Můžete začít stavět základní strukturu programu podle toho co jsem napsal výše a pak přidávat funkce které vám ulehčí práci.

    Ptejte se na vše co vám přijde na mysl. Taky si kdyžtak řekněte pokud popisuju něco co jsou pro vás už banálnosti, opravdu nevím jak jste na tom 🙂

Aktuálně je na stránce zobrazeno 15 příspěvků - 1. až 15. (celkem z 252)