Close

vidlak

Vytvořené odpovědi

Aktuálně je na stránce zobrazeno 30 příspěvků - 1,411. až 1,440. (celkem z 2,767)
  • Autor
    Příspěvky
  • odpověď na: motor shield a koncaky #8961
    posjirka
    Účastník

    souhasl s vojtěchem. dej si proměnnou „chyba=0“ a „close_time = 0“ pro záznam času při spuštění povelu k zavření. Tam si zapiš čas při zavření a změř si jak dlouho jede motor. Když to překročí čas, všechno vypni a zapiš si chybu + signalizuj chybu…

    odpověď na: Osvětlení akvaria Led pásky #8960
    posjirka
    Účastník

    to nasranek:
    onečně jsem dokopal k tomu abych někde ukazal jak jsem myslel linearni rozložení rozsvěcení/zhasnutí na základě času. Trachu jsem upravil/zjednodušil tvůj program a mírně z přeházel některé funkce. Ta uprava co jsem udělal by měla odstranit ten neduh o zpožděné reakci v důsledku dlouhého delay(). Zjednodušil jse to proto aby bylo poznat co se tam měnilo. Jestli máš chut tak to prosím vyzkoušej. krok se mění 1x za minutu a funkcí map() se přepočítává na rozsah 0-255.

    #include <Wire.h>
    #include <DS3231.h>
    #define DS3231_I2C_ADDRESS 0x68
    DS3231  rtc(SDA, SCL);
    
    int svetlo1 = 11;//pwm vystup
    int den = 9*60; // od kdy je den
    int noc = 21*60;// od kdy je noc
    int svetlo = 42; // doba rozsveceni/zhasnuti
    int cas = 0; // nasobek aktualnich hodin a minut
    byte jas = 0; // velikost jasu 0-255
    byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
    
    void setup()
    {
      rtc.begin();
      lcd.clear();//smaže obrazovku
      lcd.setContrast(30);//nastavení kontrastu je to individuální, mám jich několik a každý chce něco jiného ale je to v rozmezí 30-60
      Wire.begin();
      pinMode(svetlo1, OUTPUT);
    }
    
    byte decToBcd(byte val){
      return ( (val / 10 * 16) + (val % 10) );
    }
    
    byte bcdToDec(byte val){
      return ( (val / 16 * 10) + (val % 16) );
    }
    
    void readDS3231time(byte *second, byte *minute, byte *hour, byte *dayOfWeek, byte *dayOfMonth, byte *month, byte *year)
    {
      Wire.beginTransmission(DS3231_I2C_ADDRESS);
      Wire.write(0); // set DS3231 register pointer to 00h
      Wire.endTransmission();
      Wire.requestFrom(DS3231_I2C_ADDRESS, 7);
      *second = bcdToDec(Wire.read() & 0x7f);
      *minute = bcdToDec(Wire.read());
      *hour = bcdToDec(Wire.read() & 0x3f);
      *dayOfWeek = bcdToDec(Wire.read());
      *dayOfMonth = bcdToDec(Wire.read());
      *month = bcdToDec(Wire.read());
      *year = bcdToDec(Wire.read());
    }
    
    void loop()
    {
      delay(1000);
      byte s, m, h, dvt, dvm, mesic, r;
      readDS3231time(&s, &m, &h, &dvt, &dvm, &mesic, &r);
      analogWrite(svetlo1, brightness);
      
      cas = h*m; // nasobek minut a hodin
      if (cas < den) {
        jas = 0; // jeste neni den tak nesvit
      } else {  
        if(cas < (den+svetlo)}{
          jas = map(cas, den, (den+svetlo), 0, 255); // rozsveceni
        }
      }
      if (cas > (noc + svetlo)) {
        jas = 0; // jeste neni den tak nesvit  
      } else {
        if (cas > noc){
          jas = map(cas, noc, (noc+svetlo), 255, 0); // zhasnuti  
        }
      }
    }
    odpověď na: motor shield a koncaky #8959
    Vojtěch Vosáhlo
    Účastník

    Takže pokud jsem to dobře pochopil tak chcete nějak opatřit situaci že se ve dveřích naskytne překážka a koncák se nespustí. V kódu toho asi moc neuděláme, jediné co mě napadá je počítat si čas za kterej by se měli koncáky sepnout a pokud se do té doby nespustí tak provést nějakou rutinu. Mohli by se dveře třeba znovu otevřít a pokusit se o zavření/ zahlásit error… Prakticky cokoliv. Lepší řešení by bylo asi přidělat na dvířka (na spodní část) lištičku právě s nějakým spínačem tzn. když by dvířka do něčeho po cestě narazili, spínač by se epl a dal vám vědět.

    Držim palce

    odpověď na: Osvětlení akvaria Led pásky #8955
    Nasranek
    Účastník

    Minulý týden jsem dodělal a teď je už je i odzkoušen Led pásek/stmívač/teplota vody/hodiny/Displej Nokia 5110(čekám na 4×20 I2C displej pak předělám na něj).
    Program má nějaké nedostatky – mám ho ve dvou verzích jedna vypíná/zapíná podsvícení displeje mechanicky (Pod světlení je rozpojované spínačem) tu tady dám, pod světlení přes tlačítko řešeno výstupem s Arduina, má tu nevýhodu – pří startu pásku nereaguje hned ale od 1-10 sekund protože Led postupně rozsvěcuje cca 42 minut a krok je po 10 sekundách.
    Sériový výstup je vypnut(žere moc prostředků pro lokální proměnné)
    budete potřebovat 2 knihovny a to tyto:

    #include <DallasTemperature.h>
    #include <Nokia_5110.h> //https://github.com/baghayi/Nokia_5110
    
    const int pinCidlaDS = 2;//teplotní čidlo vody je připojeno k Digitálním pinu D2
    
    OneWire oneWireDS(pinCidlaDS);
    
    DallasTemperature senzoryDS(&oneWireDS);
    
    //nastavení pinu pro displej, můžou být skoro všechny digitální, ale jeden pwm musíte nechat pro řízení mosfetu (pwm 11,10,9,6,5,3)
    // BL - podsvícení rozpojit přes spínač jinak bude v kuse svítit ve verzi 1.3 je napojen na D10,ale zpožďuje
    #define RST 4
    #define CE 5
    #define DC 6
    #define DIN 7
    #define CLK 8
    
    Nokia_5110 lcd = Nokia_5110(RST, CE, DC, DIN, CLK);
    
    #include <Wire.h>
    #include <DS3231.h> //http://www.rinkydinkelectronics.com/library.php?id=73
    
    DS3231  rtc(SDA, SCL);
    
    #define DS3231_I2C_ADDRESS 0x68
    // Convert normal decimal numbers to binary coded decimal
    byte decToBcd(byte val)
    {
      return ( (val / 10 * 16) + (val % 10) );
    }
    // Convert binary coded decimal to normal decimal numbers
    byte bcdToDec(byte val)
    {
      return ( (val / 16 * 10) + (val % 16) );
    }
    int svetlo1 = 11;//pwm vystup
    int sviti = 0;
    int den = 0;
    
    byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
    
    void setup()
    {
      rtc.begin();
      lcd.clear();//smaže obrazovku
      lcd.setContrast(30);//nastavení kontrastu je to individuální, mám jich několik a každý chce něco jiného ale je to v rozmezí 30-60
    
      Wire.begin();
      // Nastavení hodin a datumu po nastavení dát do poznámek v mění se jen to co jen odemknuto
      
    
      //rtc.setDOW(3);  // Den v tydnu- mozno napsat jako cislo nebo jako den -- rtc.setDOW(1)
    
      //rtc.setTime(17, 31, 20);     // Nastaveni Casu 12:00:00 (24hod format) po nastavení dát "//" a znovu nahrát jinak při resetu se znovu nastaví
      
      // rtc.setDate(21, 10, 2016);   // Nastaveni datumu den/mesic/rok
    }
    
    void readDS3231time(byte *second, byte *minute, byte *hour, byte *dayOfWeek, byte *dayOfMonth, byte *month, byte *year)
    {
      Wire.beginTransmission(DS3231_I2C_ADDRESS);
      Wire.write(0); // set DS3231 register pointer to 00h
      Wire.endTransmission();
      Wire.requestFrom(DS3231_I2C_ADDRESS, 7);
      // request seven bytes of data from DS3231 starting from register 00h
      *second = bcdToDec(Wire.read() & 0x7f);
      *minute = bcdToDec(Wire.read());
      *hour = bcdToDec(Wire.read() & 0x3f);
      *dayOfWeek = bcdToDec(Wire.read());
      *dayOfMonth = bcdToDec(Wire.read());
      *month = bcdToDec(Wire.read());
      *year = bcdToDec(Wire.read());
    
    }
    void displayTime()
    
    {
    
      // příjem dat z DS3231
      readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
      senzoryDS.requestTemperatures();//při stmívání nebo svítání obnovuje co 10 sekund jinak co 1 sekundu
    
      lcd.setCursor(0, 0);
      lcd.print ("Cas: ");
      lcd.print(rtc.getTimeStr(1));// v zavorce 1 bez sekund, prazdna ukaze sekundy,ale při startu LED skače o 11 a je to ...
      lcd.print(" hod.");
      lcd.setCursor(0, 2);                  // pokud máte teplotní čidlo napevno a nevypadává Vám není potřeba
      lcd.print("T. Vody:               "); //  já mám prototyp který nebude použit tak to řeším přepsáním
      lcd.setCursor(0, 2);
      lcd.print("T. Vody:  ");
      lcd.print(senzoryDS.getTempCByIndex(0));
    
      lcd.setCursor(0, 1);
      lcd.print("Dat. ");
      lcd.print(rtc.getDateStr());
      lcd.setCursor(0, 3); lcd.print("T. Okoli: ");
      lcd.print(rtc.getTemp()); //Hodiny real.času ds3231 mají v sobě teploměr - teplotni cidlo obnovuje co 64 sekund dá se to zkrátit, ale nebudu zbytečně zvětšovat program
      lcd.setCursor(0, 4); lcd.print(" ------------");
    
    }
    void loop()
    {
      senzoryDS.requestTemperatures();
      pinMode(svetlo1, OUTPUT);
      displayTime();
      delay(1000);
    
      byte s, m, h, dvt, dvm, mesic, r;
      readDS3231time(&s, &m, &h, &dvt, &dvm, &mesic, &r);
    
      if (h >= 9 && h < 21) den = 1; // nastaveni intervalu sviceni
      else den = 0;
      for (byte brightness = 0; den == 1 && sviti == 0 && brightness <= 255; brightness ++) {
        displayTime();
        analogWrite(svetlo1, brightness);
        if (brightness == 255) sviti = 1;
        lcd.setCursor(0, 5);
        lcd.print("Stav Led:       ");
        lcd.setCursor(0, 5);
        lcd.print("Stav Led: ");
        lcd.print(brightness);
         delay(10000);
    
      }
    
      for (byte brightness = 255; den == 0 && sviti == 1 && brightness >= 0; brightness --) {
        displayTime();
        analogWrite(svetlo1, brightness);
        if (brightness == 0) sviti = 0;
        lcd.setCursor(0, 5);
        lcd.print("Stav Led:       ");
        lcd.setCursor(0, 5);
        lcd.print("Stav Led: ");
        lcd.print(brightness);
           delay(10000);
      }
    
    }
    
    odpověď na: AD převodník LTC2400 – nějaké zkušenosti? #8953
    Luke_CZ
    Účastník
    odpověď na: 3wire jumper #8939
    ArduXPP
    Účastník
    Luke_CZ
    Účastník

    TO Leo:
    Fóra jsou i od toho, aby se v nich dala najít řešení problémů, nebylo by tedy od věci, pokud jsi ten TFT rozchodil, napsat v jakém zapojení a SW jsi ho rozchodil…
    Jistě by to pomohlo i dalším kolegům, ono prohlášení „Už funguje“ je dost na nic 🙁

    L:

    odpověď na: Rotační enkodér a OLED displej #8878
    vlada@liskovic.cz
    Účastník

    je mozne, ze problem je v tom, ze na interupt vstupech nemam debounce kondenzator?

    odpověď na: Rotační enkodér a OLED displej #8877
    Zbyšek Voda
    Účastník

    Dobrý den, tak ještě zkuste nasdílet váš kód 🙂

    odpověď na: analogReference – pomoc #8873
    peter57
    Účastník

    Tak pánové, moc děkuji za pomoc nakonec jsem tam dal tu diodu. Funguje to bez problému.

    odpověď na: analogReference – pomoc #8872
    posjirka
    Účastník

    no já si myslim, že je to způsobeno použitím. měnit referenci a přitom mít zapojené na jiném analog.vstupu vyšší hodnotu je už z principu špatně. zkus zajet joystickem na s´tranu k zemi a zkus to . Případně dej Joystick na stejný potenciál jako je refernční napětí (nepoužívej interní) ….

    odpověď na: Rotační enkodér a OLED displej #8871
    vlada@liskovic.cz
    Účastník

    tak jsem vyzkousel skoro vsechny priklady, jeden z nich je vcelku funkcni, dost se to zlepsilo, ale porad to tak polovinu kroku ztraci. Co s tim? Jinou desku? Jiny displej s mensi obsluznou knihovnou? Docela me to prekvapilo, protoze jinak mi arduino slouzilo fakt spokojene i na daleko slozitejsi veci 🙂

    Leo
    Účastník

    Už funguje 🙂
    Dik všem.

    odpověď na: analogReference – pomoc #8869
    peter57
    Účastník

    jo takhle to bylo myšleno… já furt nechápal tu diodu v tom děliči…. ááha to by taky šlo a DPS by se nemuselo předělávat jen by se vyhodil ten odpor a hodila se tam ta dioda… beru to na vědomí… a moc děkuji… ale furt mě štve to, že to nejde udělat tak jak to mám napsané.. prostě nevím proč to nejde 🙁

    ještě mě došlo že se asi zapoměl dát kondenzátor na AREF a někde jsem myslím četl že i když se používá vnitřní reference že by tam měl být…

    odpověď na: analogReference – pomoc #8868
    posjirka
    Účastník

    pánové ,proč to řešíte tak složitě ….
    vezměte si, že budete mít konstantní zdroj 0,7V (dioda).
    Když necháme refenreční napětí = napájecí napětí tak při 5V to bude třeba hodnota 200, když klesne napětí baterie na 3,5V tak to bude hodnota 400 (té konstaktny 0,7V) …

    odpověď na: analogReference – pomoc #8865
    peter57
    Účastník

    Taky jsem se někde dočetl o tomto problému dal jsem analogRead() asi 6x pod sebe, skoušel jsem to i s delay() nepomohlo to… a ten převod sám o sobě funguje naprosto super, dokuď neměním reference. Když tam jednou nastavím analogReference(INTERNAL); tak to funguje super.. když si na zdroji dám 4,2V tak LED krásně zeleně září. Postupně ubírám napětí tak to žloutne až červená a u 3,4V začne LED červeně blikat přesně tak jak to po ní chci.
    ale v tom momentu kdy se v kodu začne přehozavot analogReference(INTERNAL); a analogReference(DEFAULT); je furt ten DEFAULT zkoušel jsem to napsat i takto

    do{
    analogReference(INTERNAL);
    batt = analogRead(A6);
    }while(batt < 100);

    a tím se mi program zasekne…
    do batt se mělo uložit číslo od 0-1023 a v referenci na 1,1V pro napětí od 3,4-4,2 by hodnoty měli být 790 – 1000 +-

    odpověď na: analogReference – pomoc #8864
    MiK
    Účastník

    Já si myslím, že problém nebude v referenci, ale v příliš velkých odporech v děliči na tom vstupu A6.

    Problém s příkazem analogRead() je v tom, že přepne multiplexer na požadovaný vstup a okamžitě načte hodnotu napětí. Jenže kvůli vnitřní kapacitě vstupu a velkému sériovému odporu se to měřené napětí nestačí ještě ustálit.

    Už jsem jednou podobný problém řešil a stačilo dát to měření napětí na A6 2x za sebou s nějakou krátkou pauzou:

    batt = analogRead(A6);
    delay(50);
    batt = analogRead(A6);

    Třeba tady o tom taky něco píšou (a tu pauzu mezi dvěma stejnými měřeními tam ani nemají):
    https://www.quora.com/Why-is-a-little-delay-needed-after-analogRead-in-Arduino

    Druhým řešením by bylo snížení (třeba 10x) hodnoty odporů v tom děliči.

    odpověď na: PH meter #8863
    Strojek
    Účastník

    daria: diky … to je ono , pak je tam jeste jak se ti kalibruje . 🙂

    odpověď na: PH meter #8862
    darira
    Účastník

    Jsem si říkal na co jiného než na akvárium se PH měření dá ještě použít.
    Kamarád mě posílal tento odkaz, je tam něco o PH modulu i trimrech.
    https://forum.arduino.cc/index.php?topic=336012.msg2643184#msg2643184
    „Blue potentiometer close to BNC: pH offset.
    Blue potentiometer close to pins: limit adjustment.“
    Ať ti to měří :), také mám tento modul pro měření PH v akváriu.

    odpověď na: Klon? ano ne #8861
    Kice
    Účastník

    Moje boli z TME. Vedľa seba na hliníkovom chladiči. Podľa mňa to nie je säčiastka na nákup z číny.

    odpověď na: Klon? ano ne #8860
    Aleš
    Účastník

    Já jsem jich testoval 6ks z ebay, zapojené najednou do Arduina. V mikrotenovém sáčku ponořené do vody. Čidla ukazovala od 20 do 22°C. Mám ještě z dřívější doby jedno čidlo od Dallasu, kupované u Farnella, a to používám jako referenční. I když také nevím, jestli ukazuje správnou teplotu 😉

    odpověď na: PH meter #8859
    Strojek
    Účastník

    ph metr budu pouzivat v akvariu a podle toho spinat el. magneticky ventil pro Co2

    odpověď na: PH meter #8858
    darira
    Účastník

    Můžu se zeptat, na jakou aplikaci budeš PH sondu používat.

    odpověď na: PH meter #8857
    Vojtěch Vosáhlo
    Účastník

    Předpokládal bych že si s trimry můžete s trimry „pohrát“ a zjistit to. Pokud jste dostal nějaký roztok na kalibraci, můžete to udělat podle něj. Lepší možnst by asi byla zjistit označení IC a hodit ho sem. Nejspíš se vše bude dát najít v datasheetu.

    odpověď na: PH meter #8856
    Strojek
    Účastník

    dekuji, tohle pomohlo … a jeste jestli nekdo nevi ty trimry , kterym se co kalibruje ..

    odpověď na: analogReference – pomoc #8855
    peter57
    Účastník

    Moc děkuji za odpověď,
    jen nechápu úplně k čemu mi tam bude… ta dioda se otevře a bude na ní cca 0,7V a je jedno kdy to budu měřit ale vždy na ní bude toto napětí a ten odpor 400k na sobě bude mít zbytek.

    Muj problém je software… z nějakého důvodu vadí AD převodu když furt měním reference. Tak vlastně měla znít moje otázka… jak často popřípadě s jakýma podmínkami mohu měnit reference analogového napětí z napájecí a interní(1,1V) a z5.
    jde mi číst stav bateri tak jak to mám… funguje to super. ale musím pouřít vnitří referenci na 1.1V
    analogReference(INTERNAL);
    a když v kodu uplně v jiné metodě, která se pustí třeba 100ms po převodu mám kvuli měření joy
    analogReference(DEFAULT);

    tak přestane fungovat převod té baterie 🙁

    další HW řešení mě napadlo takové že bych nastavil referenci jen jednou a to na AREF kam bych přes stabilizátor přivedl 3.3V, který bych musel přivést i na joy. tím by joy fungoval a nasavil bych dělič třeba 1/2 takže napětí baterie by bylo 1,75-2,1 což se do 3.3 vejde ALE to znamená předělat DPS… furt si myslím že by to šlo nějak udělat kodem…

    odpověď na: PH meter #8854
    ArduXPP
    Účastník
    odpověď na: analogReference – pomoc #8851
    posjirka
    Účastník

    jak jsem psal, místo odporu 100k použij nějáký pevný stabilizátor. …. pro začátek třeba tu mojí zatracovanou diodu … obyč. dioda 1b4001 katodou na zem, anodou na analogový pin.

    odpověď na: Klon? ano ne #8850
    Kice
    Účastník

    Luke_CZ dík za reakciu.
    Kritizovaný čas konverzie nie je pre plánované použitie podstatný. Tiež zbernica nebude dlhšia ako cca 20m. Snáď sa s ňou vysporiadam a nebude treba riešiť symetrickú RS485. Takže stále uvažujem použiť DS18b20.

    Ku kritikom presnosti by som chcel poznamenať, že treba rozlišovať absolútnu presnosť a rozlišovaciu schopnosť čidla. S klonmi nemám skúsenosť, ale aj originál má presnosť +/-0,5 °C a rozlišovačka je 0,1°C. Testoval som 3 kusy DS18B20 tepelne zviazané a nameraná hodnota pri izbovej teplote sa nelíšila o viac ako 0,1°C.

    odpověď na: analogReference – pomoc #8848
    peter57
    Účastník

    takhle to je zapojene… omlouvám se je to v malování

    Attachments:
Aktuálně je na stránce zobrazeno 30 příspěvků - 1,411. až 1,440. (celkem z 2,767)