Vojtěch Vosáhlo
Vytvořené odpovědi
-
AutorPříspěvky
-
Vojtěch VosáhloÚčastník
Pauza by se přidávala před nastavováním pinu na low
Tzn: `void detekce(){
delay(XY); // sem můžete přidat čas mezi 1 na ir a přehráváním
digitalWrite(prehravaciPin, LOW);
delay(100); //čas na který je pin spuštěný, zde přidáváte
digitalWrite(prehravaciPin, HIGH);
}`
Chcete tedy něco jako po přehrání musí být pauza 30s a pak až se může zapnout znova? Kapku mi to nedochází 😀Vojtěch VosáhloÚčastníkVy jste tedy zkoušel jak A0 tak D0. D0 by se měl dát nastavovat poťákem, tím nastavíte hranici kdy je 1 a kdy 0 zatímco A0 se bude měnit dynamicky podle vzdálenosti.
Mimochodem do attachInterrupt má jít b0 a né jen 0 jak je nahoře v kódu ale to jste zjistil pokud to funguje.Možná musí být větší časová prodleva mezi 1 a 0 na pinu přehrávače a taky by se nejspíš hodilo ještě trošku času po nastavení pinu na 1.
Hodně tipů ale kdo ví…Vojtěch VosáhloÚčastníkTo fakt nevím ale CH340 není v originálních arduinech pokud vím. To by teda vysvětlovalo jak to pozná (nejspíš). Jako se v arduino IDE u COM portu ukáže třeba Arduino UNO když máte originál ale když kopii tak je tam pouze název portu. Alespoň mě to takhle funguje. Na druhou stranu Makelangelo je open source ne? Kdyby někdo uměl s javou asi by nemuselo být tak komplikované ten block odstranit.
Vojtěch VosáhloÚčastníkPodle pár článků má Makelangelo ochranu proti klonům. Tzn neukáže vám arduino pokud není originální takže originál by to měla si vyřešit…
Vojtěch VosáhloÚčastníkAhoj
Kdybych nenašel vůbec nic na internetu o podobném problému, zkusil bych takovou divno věc. Stáhnul bych nějakej program pro emulaci COM portů a zkusil bych vytvořit virtuální COM port který by přeposílal data na port kde je arduino. Třeba by Makelangelo tenhle port vidělo. Ale to je jen tip, s macem jsem nikdy nedělal a nevím co by se mohlo pokazit…Vojtěch VosáhloÚčastníkTo vypisování by nemělo být potřeba měnit, v té verzi co jsem posílal je to univerzální funkce. Pokud není zapnutý coolon ani dryon tak by se měla vypsat ta teplota na kterou topíte. Tzn funkce by měla vypadat takto:
else if (CILOVATEPLOTA > 0 && !COOLON && !DRYON) { /// Pokud je cilova teplota > 0 a nebezi zadny z ostatnich programu, vypiseme cilovou teplotu
client.println(„<span style=’color:red; font-weight:bold;‘>Topim na “ + String(CILOVATEPLOTA) + „*C</span></font>“);
}na ní nic neměňte, stačí když bude existovat jednou a to tam kde byla. Pokud to nebude vypisovat nic, dejte tam toto:
else if (CILOVATEPLOTA > 0) { /// Pokud je cilova teplota > 0 a nebezi zadny z ostatnich programu, vypiseme cilovou teplotu
client.println(„<span style=’color:red; font-weight:bold;‘>Topim na “ + String(CILOVATEPLOTA) + „*C</span></font>“);
}Kódování asi UTF-8 ale počíst si můžete zde: https://www.jakpsatweb.cz/cestina.html
Vojtěch VosáhloÚčastníkJá se ze sebe asi klepnu 😀 zase ta závorka. Pokud nebude fungovat tohle tak musíme vymyslet jiný způsob ať tu nezaspamujem celý fórum.
Attachments:
Vojtěch VosáhloÚčastníkZkuste tohle, byla tam špatně závorka… Musíte si zase pozměnit proměnné atd…
Attachments:
Vojtěch VosáhloÚčastníkDnes bohužel moc času nemám, mohl by jste hodit screenshot stránky?
Vojtěch VosáhloÚčastníkOops,musí tam být String(CILOVATEPLOTA) místo té teploty a opět na konci chybí }
Vojtěch VosáhloÚčastníkKód vracím, doufám že funkční.
Všechny věci co jsem přidal jsou vyznačeny dlouhou řadou //// aby jste se zorientovalJediné co by mělo být potřeba přidávat při přidávání dalších teplot by měli být tyto části:
// kod ovladače pro Topím na 19 stupnu unsigned TEPLOTAXY[] = {8800,4350, 550,500, 600,500, 550,500, 550,500, 600,500, 550,500, 600,500, 550,500, 550,1600, 600,1600, 550,1600, 550,1600, 550,1600, 600,1600, 550,500, 550,1600, 600,500, 550,500, 550,500, 600,500, 550,1600, 600,500, 550,500, 550,500, 600,1600, 550,1600, 550,1600, 550,1600, 600,500, 550,1600, 550,1600, 600,1600, 550 };
Zde stačí vždy jen změnit název a IR kódy
else if (readString.indexOf("L=Z") > 0) { if(CILOVATEPLOTA != XY){ /// Pokud teplota kterou chceme zapnou jeste neni zapnuta => pustime dal irsend.sendRaw(TEPLOTAXY, sizeof(TEPLOTAXY) / sizeof(int), khz); CILOVATEPLOTA = XY; ///Nastavime promenne aby se nepodelala orig cast programu a cilovateplota na teplotu kterou jsem nastavili COOLON = false; DRYON = false; }
Tahle funkce musí existovat pro každou tepotu, kolik teplot, tolik těchto funkcí. Jediné co je potřeba změnit tady je TEPLOTAXY za název pole ve kterém jsou uloženy kódy pro danou teplotu a do proměnné CILOVATEPLOTA zapisovat hodnotu teploty kterou jste nastavil.Důležité je nastavit čemu se rovná L, koukal jsem že už tam máte vložených pár teplot takže pro každou z nich je L jiné… Jak máte napsáno L=4 by mělo topit na 20*C a proto funkci upravíte tak aby se spustila když L=4 tzn nahradíte Z tímto číslem a aby vysílala vše správně.
Zbytek by měl být připravený na více teplot a měl by vypisovat na webu danou teplotu na kterou je nastaveno.
PS: Píšu měl protože nemám na čem to otestovat takže pište jakýkoliv feedback
Attachments:
Vojtěch VosáhloÚčastníkNepoužíval jste náhodou v poslední době s arduinem processing nebo jiný ser. monitor než ten od arduina?
Vojtěch VosáhloÚčastníkSorry za menší odmlčení.
1 věc, TEPLOTA je hen obrazná, musíte místo ní deklarovat proměnnou ve které budou ir kódy pro jednu z teplot, jako u coolon atd.
2 jak to píše očekává to závorku takže ta někde chybí, nejspíš právě uplně na konci ale musel bych vidět kód kam už jste vložil teplotu.
O knihovnách už tu napsal Nasranek
Vojtěch VosáhloÚčastníkJak to píše je obsazený com port. Neinstaloval jste v nedávné době něco co ba s porty pracovalo? Zkoušel jste IDE spustit jako admin?
Vojtěch VosáhloÚčastníkPlně souhlasím, uno mám sice originální ale z číny mám několikrát Nano a funguje excelentně. Dokonce jsem nedávno kupoval i Atmega88 procesory což je trošku risk. Naštěstí fungují a 5€ za 10ks je krásná cena… 😀
Vojtěch VosáhloÚčastníkmáte v kódu navíc toto </
irsend.sendRaw(TEPLOTA, sizeof(TEPLOTA)</ sizeof(int), khz);
bez toho by to mělo fungovat. Omlouvám se, napsal jsem to nahoře chybně…
Vojtěch VosáhloÚčastníkVy komentujete španělsky? 😀 Samozřejmě jen vtip…
Prakticky by vám mělo stačit přidávat jen else if
else if (readString.indexOf("L=X") > 0) { irsend.sendRaw(TEPLOTA, sizeof(TEPLOTA)</ sizeof(int), khz); }
a pak jen do tohoto oddílu
client.print("<h2> <a href='/?L=0'> OFF </a>| <a href='/?L=1'> Teplota mene </a> | <a href='/?L=2'> Teplota vice </a></h2>");
přidávat html kód viz.
<h2> <a href='/?L=X'> TEPLOTA </a>
Aspoň tak bych to chápal já…
Vojtěch VosáhloÚčastníkNo tak to vás tu motám furt dokola 😀 asi je test nejlepší odpověď…
Vojtěch VosáhloÚčastníkA zapojení je správné? Co to přesně dělá?
Vojtěch VosáhloÚčastníkDobrý den,
zkoušel jste již na lcd vypisovat zvlášť, jen třeba hello word? Pokud ne doporučuji si pročíst třeba toto:
https://www.arduino.cc/en/Tutorial/HelloWorldHodně štěstí
Vojtěch VosáhloÚčastníkOpět jedna z citací která by mohla otázku zodpovědět.
_RESOLUTION_HORIZONTAL must be set to a multiple of 8. _
(_RESOLUTION_HORIZONTAL/8)*_RESOLUTION_VERTICAL must be smaller than the amount of SRAM the Arduino has, It also must leave some memory for the user applications and the library to run.Takže podle téro rovničky se dá přibližně propočítat zda to arduino zvládne. Nevím jestli je to prakticky pravda, tvout jsem nikdy nezkoušel.
Mimo toto je tam informace že kdyby bylo rozlišení moc velké a SRAM málo, funkce begin() vrátí chybový kód 4.
Vojtěch VosáhloÚčastníkNo to samozřejmě velive záleží na typu arduina který používáte. S Unem toho moc neuděláte, bohužel. Viz např. Reddit: https://m.reddit.com/r/arduino/comments/1dsusl/increasing_the_max_resolution_on_the_tvout_library/
Vojtěch VosáhloÚčastníkJeště tak mimochodem co je to za klimošku? Předpokládám že cíl je nepájet přímo na ni ani na ovladač. To že je tam 0 znamená že to nevysílá v žádném známém formátu. Chtělo by to její název a pak se dá třeba kouknout i po nějakejch projektech, jestli nedělal někdo reverse engineering…
To pane si prosím nechte 😀Vojtěch VosáhloÚčastníkTakže to shrnu, zapneme zařízení -> bude pípat v určitých intervalech že je zapnuté -> (mohla by být hezká i telemetrie přes rf ale to je na vás) -> vyletíte (manuálně, vy odpalujete) -> měříme výšku -> pokud je x metrů nad zemí vypustí 1. padák -> y metrů nad zemí, druhý padák -> pípáme extra nahlas
Pípání je v celku jednoduché, stačí nějaký piezo měnič, kolem 100db a více (aby to bylo slyšet co nejdál) a nebo reproduktor ovládaný mosfetem.
Na měření výšky by se dal asi použít nějaký sensor tlaku ale lepší bude například MPL3115A2 s přesností 0,3m a měří i tlak a teplotu.
Kdyby to šlo, asi bych data ukládal na SD a nebo na extérní flash (pojištěnou baterií aby při vybití hlavní baterie nezmizela data) či eeprom ale ta má omezený počet zápisů.
Jako bonus můžete přidávat sensory – akcelerometr, teplota, tlak, vlhkost, gps…
Ať se to povede 😉
Vojtěch VosáhloÚčastníkZkusme něco jiného, například tuhle knihovnu: https://learn.adafruit.com/using-an-infrared-library/hardware-needed, ta vypisuje i kód ve formáru co by jsme chtěli.
Vojtěch VosáhloÚčastníkPředpokládám že ten ovladač má šipky nahoru a dolu pro zvýšení a snížení teploty a nějaká další tlačítka. Pokud tedy opravdu při stisku tlačítka nahoru pošle vždy jiný kód, což mi přijde trochu jako hovadina ale dobře, zkuste zjistit jak se číslo mění. Chce to něco podle čeho by jsme mohli ty kódy generovat aby jste je neměl jen všechny naklikané v kódu, pro každou teplotu jeden (což by taky šlo). Vyp/zap si taky vyřešíte podle kódů. Pak se dá podle protokolu ve kterém IR mluví napsat odesílání kódů.
Vojtěch VosáhloÚčastníkOk, určitě sem pak dejte výsledek 😉
Vojtěch VosáhloÚčastníkSpíš mě šlo o to jestli je to s arduinem vůbec možné. U PI musím nabootovat linux a pak nějakou aplikaci, což mě nepřipadá moc efektivní. Šlo mě s píš o něco jednodužšího. Navíc u toho linuxu je spoustui jiných služeb které primárně nepotřebuju.
Je pravda že bootnout Pi trvá, ale než by arduino dostalo stream dat a začalo je zpracovávat… No to by žádná sláva nebyla, nejspíš horší než Pi. V Linuxu se dá samozřejmě nastavit vše automaticky tzn. po zapnutí systému se zapne aplikace X a zobrazí obsah Y. To vše bez vnější pomoci. s arduinem by to bylo nejspíše i několikrát těžší… Během několika vteřin by se to asi nezaplo.
U Linuxu by mělo jít hodně dodatkových služeb vypnout.
Lze ovládat pomocí PI i elektronický zámek(bzučák ve dveřích)?
Jistě, Pi je obyčejný procesor a můžete s ním vše ovládat jak se vám zachce.
Třeba tento tutoriál vám může pomoct jak začít. https://learn.sparkfun.com/tutorials/raspberry-gpioVojtěch VosáhloÚčastníkTak načítej ten čas ve smyčce while a když překročí ten limit, zavolej si brake ať se ti uvolní…
Vojtěch VosáhloÚčastníkAhoj,
je ro určitě realizovatelná věc ale musel by si mít hodně výkonný HW, nějaké arduino založené na ARMu. Nepřemýšlel si spíš o Raspberry Pi? Dělat tohle přes arduino by bylo asi přece jen zbytečně drahé a komplikované. Navíc by si potřeboval i shieldy, možná několik. Pi by tě vyšlo určitě lépe.
Držim palce
Vojta -
AutorPříspěvky