Krystof
Vytvořené odpovědi
-
AutorPříspěvky
-
peter57
ÚčastníkTaky 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 taktodo{ 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 +-MiK
ÚčastníkJá 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-ArduinoDruhým řešením by bylo snížení (třeba 10x) hodnoty odporů v tom děliči.
Strojek
Účastníkdaria: diky … to je ono , pak je tam jeste jak se ti kalibruje . 🙂
darira
ÚčastníkJsem 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.Kice
ÚčastníkMoje 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.
Aleš
ÚčastníkJá 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 😉
Strojek
Účastníkph metr budu pouzivat v akvariu a podle toho spinat el. magneticky ventil pro Co2
darira
ÚčastníkMůžu se zeptat, na jakou aplikaci budeš PH sondu používat.
Vojtěch Vosáhlo
ÚčastníkPř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.
Strojek
Účastníkdekuji, tohle pomohlo … a jeste jestli nekdo nevi ty trimry , kterym se co kalibruje ..
peter57
ÚčastníkMoc 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…
ArduXPP
ÚčastníkStačí hledat, http://www.ebay.com/itm/Liquid-PH-Value-Detection-Sensor-Module-Monitoring-Control-/311449281847 dole obrázek.
posjirka
Účastníkjak 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.
Kice
ÚčastníkLuke_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.
peter57
Účastníktakhle to je zapojene… omlouvám se je to v malování
Attachments:
peter57
ÚčastníkProcesor je napájen přímo z baterie. Na ADC vstupu mám dělič který mi v závislosti na stavu baterie srazí napětí na cca 0,7-1,05 V proto používám tu referenci 1,1V.
jak píšeš, REF napětí se mi mění v závisloti na stavu baterie což je pro mě dobře kvuli tomu posuvníku…jedná se o joy. funkci měření mi neovlivňuje. jen mi jde o program. Nějak přestává fungovat, když furt měním reference. když čtu napští na joy (což je dělič) potřebuju referenci v závisloti na napájení… aby byla 0 furt v 0 a aby byl celý rozsah použit. pro měření Baterie potřebuju referenci 1,1 V abych určil stav té baterie.
Attachments:
posjirka
Účastníkneuvádíš jak je to zapojený …. máš tam stabilizator pro napájení mikroprocesoru, nebo přímo z baterie ?
Pokud ze satbilizátoru tak bych baterii dal přes odporový dělič a měřil výsledke. Doporučuju vyopočítat pro napětí tak 2/3 reference. Tady se počítá s tím, že s emění napětí baterie a refernční napětí zůstává stejné.
Druhá varinata je , že napájíš mikroprocesor přímo z baterie a tím pádem se ti mění i refernční napětí. v tom případě na baterii použij nějáký stabilizátor pro přesné refernční napětí (jen ne diodu ta je dost teplotně závislá), v nouzovém případě i klasický stabilizátor 7803 pro 3V. Pak budeš mít obrácenou logiku : snížení hodnoty analogvého pinu indikuje snížení napětí bateri / referenční napětí …Posuvník jako termín nechápu, předpokládám, že je to nějáký potenciometr připojený mezi zem a refenreční napětí, pak ti neovlivńuje funkci měření …
posjirka
Účastníkproto říkám, víc než 9 bitu je zbytečný luxus …
Ladis_Kv
ÚčastníkSuper dík za aktivitu a nápady.Aspoň je vidět že to tu někdo čte.
Jinak tipek si s tím dost vyhrál.Ale jsou to staré typy rolet a dost velké „heblo k tomu“.
I když ze začátku mě to taky napadlo.:-D
Ale chci to na novější žaluzie a ještě aby nebylo nic vidět-jen kabely…bohužel.Ale půjdou vidět jen kousek.
Na fotce je vidět motorek s převodovkou a druhá fotka je žaluzie zepředu (v černém rámečku bude motorek).
Ale vše bude ještě chvíli trvat.
Jinak už jsem to zkoušel a motorek to utáhne.Dále budu pokračovat(pokud mi to půjde)
na ovládání-buď dálkovým ovladačem a nebo bluetooth.
Tak pokud chcete,tak raďte.Budu to potřebovat.Aleš
Účastníkje hezké když ty čínské klony ukazují teplotu na 0,1°C, když mají toleranci větší než +-1°C 🙂
posjirka
Účastníkono je dobré říct i to „b“.
750ms prodlevy je pouze u 2 drátového/parazitního zapojení.
U 3 drátového již není. Používání 12-bitového rozlišení je opět dle mého názoru zbytečnost. v základu je 9 bitů (tedy po 0,5stC) a vše ostatní se řeší tak, že se udělá víc měření a průměruje se. To je taky jeden z důvodu té prodlevy.
Délka 200m je usměvná, nicméně okolo 50m ve stíněném kabelu (např.stíněné FTP) už není výrazný problém a jde jen o to držet si pravidlo 1 zemnícího bodu.Zbyšek Voda
ÚčastníkNení zač. Pokud se vám teď nechce prokousávat teorií, můžete použít kód z té sekce Interrupt Example (the Encoder interrupts the processor). Uses both Interrupt pins. Proměnná encoder0Pos udává polohu enkodéru – ve vašem případě plní funkci vaší proměnné counter.
vlada@liskovic.cz
ÚčastníkDíky moc.
Zkusím se tím prokousat 🙂 Je pravda, že ta knihovna asi bude i dost veliká, protože kompilace překvapivě trvá skoro minutu, takže procesor tam fak má co dělat 🙂 Pokud se mi to nepovede, strčím tam jednoduchý displej, se kterým nikdy problém nebyl a ne ten líbivý OLED 🙂Leo
ÚčastníkTak zkouším a zatím níc.
Dobra hračka na zimu 🙂
Doporučte nějaký displej s dotykačem se kterým mate zkušeností?
Co toto?
https://www.aliexpress.com/item/Free-shipping-LCD-Display-Module-TFT-3-95-inch-TFT-LCD-screen-for-Arduino-UNO-R3/32553219693.html?spm=2114.01010208.3.18.93zuTj&ws_ab_test=searchweb0_0,searchweb201602_5_10056_10065_10068_10055_10054_10069_10059_10078_10079_10073_10017_10080_10070_10082_10081_10060_10061_10052_10062_10053_10050_10051,searchweb201603_3&btsid=e2332ead-f0a0-48c5-b600-2376304bf773Zbyšek Voda
ÚčastníkDobře, díky. Původně jsem myslel, že jde o konflikt pinů, ale tím to asi není.
Kód pro ten enkodér mi přijde podivný, ale jestli vám to takto funguje samotné, tak OK.Problém bude v tom, že funkce knihovny pro obsluhu displeje (u8g.firstPage(), draw()…) vždy nějakou dobu trvají. Ony si vlastně seberou procesor pro sebe a ten pak nezjišťuje, jestli melete enkodérem – to zjišťuje až ve chvíli, kdy přijde řad na funkce digitalRead() apod..
Vy tedy musíte nějak zajistit, aby procesor změny na pinech z enkodéru neignoroval. Pro tento účel se používá tzv. přerušení (anglicky interrupt) – na pinech, na kterých máte enkodér připojený si nastavíte přerušení a při změně těchto pinů dojde k donucené obsluze tohoto přerušení – takže pohyby enkodérem procesor nebude přehlížet.
O přerušeních se můžete dočíst více zde. Musíte si dát pozor na to, abyste použil piny, které přerušení podporují – u UNO jsou to piny 2 a 3. Také pozor na to, že se přerušení nastavují pomocí jejich čísla a ne čísla pinu. Ke správnému zjištění čísla přerušení z čísla pinu slouží funkce digitalPinToInterrupt(interruptPin).
Potom samotné použití přerušení s enkodérem je popsáno zde – hledejte sekci Interrupt Example (the Encoder interrupts the processor). Uses both Interrupt pins.
vlada@liskovic.cz
ÚčastníkA jo, pardon, vůbec mi to nedošlo, Uno 🙂
Zbyšek Voda
ÚčastníkAle klon jaké desky? 🙂 UNO, Leonardo…?
vlada@liskovic.cz
Účastníknějaký CH340 klon, konkrétně jsem zkusil dva různé. Zatím s nimi v ničem nebyly problémy (krom toho, že shazovaly mac osx 🙂 Můžu to zkusit i s originálem, ale musím ho vyndat – je zabudovaný jinde 🙁
Zbyšek Voda
ÚčastníkDobrý den, jakou Arduino desku máte?
Luke_CZ
ÚčastníkTo:Kice
Abych jen nehanil 1-wire, tak je přesné,jednoduché na zapojení a má dobrou podporu.
Pokud jde o negativa 1-wire (MicroLAN):
1, nutnost konverze přijímaných dat, samozřejmě čím nižší přesnost, tím vyšší rychlost konverze, příklad:
12bit – 750ms
9bit – 94ms
Ta je nutná pro každé jednotlivé čidlo.
Řešeno zde.
2, maximální délka sběrnice dle výrobce cca 200m, ale to samozřejmě platí v ideálním prostředí.
Řešeno zde.Tedy, pokud budeš měřit teplotu v jedné místnosti, či nedaleko, tak je 1-wire OK, pokud však potáhneš dráty na delší vzdálenost, či v zarušeném prostředí (stačí nabíječka na mobil, či dráty souběžně s AC), tak se ohlédni raději po odolnější sběrnici např. RS485 (převodník stojí pár korun).
L.
-
AutorPříspěvky