pondělí 24. července 2017

OctoPrint - instalace na Orange Pi

Jak se vlastně 3D tiskne

Už přes půl roku mám 3D tiskárnu i3 MK2 a tisknu na ní různé roztodivné věci:


Vybraný model k tisku je obvykle ve formátu STL. Ten musím nařezat na plátky (naslicovat) a pak z nich vygenerovat instrukce pro pohyb tiskové hlavy, tiskové podložky a dávkování roztaveného plastu - tzv. G kód (čistě textový soubor s koncovkou .gcode).

Tento soubor s pokyny potom načítá mikrokontrolér v tiskárně a jednotlivé pokyny postupně vykonává. Tiskárna má k tomu vestavěný vlastní maličký mikropočítač se čtečkou SD karet, displejem a jedním otočným ovládacím knoflíkem. Stačí soubor s G kódem nahrát na PC na (mikro)SD kartu, tuto přenést k tiskárně, vložit do její čtečky karet a nechat vytisknout.


Toto funguje spolehlivě, ale brzy začne být přenášení paměťové karty mezi PC a tiskárnou méně a méně zábavné, později dokonce více a více otravné. Displej na tiskárně má malé rozlišení, není jednoduché vybrat mezi vícero soubory připravenými k tisku. Informace během tisku jsou minimální - jen procenta načtení souboru a aktuální výška výtisku. Chtělo by to nějak vylepšit.

Tiskárnový mikrokontrolér jde ovládat i přes USB. Můžeme například připojit tiskárnu přímo k pracovnímu PC a díky programu Pronterface posílat instrukce G kódu přímo z PC po USB kabelu. Během tisku vidíme mnohem víc informací, třeba grafy s teplotami podložky a tiskové hlavy, nebo aktuální pozici hlavy na tiskové vrstvě atd. Vypadá to, že takto je to pohodlnější než neustálé přenášení karty sem a tam.

Ovšem pak zjistíme, že u 12hodinového tisku nemůžeme vypnout PC, protože by se tisk přerušil. Nemůžeme ho ani restartovat (třeba kvůli aktualizacím). A když se rozhodne nejmenovaný systém jedné monopolní firmy restartovat sám (jak to má v oblibě), zničí tím celý mnohahodinový tisk. Program taky nesmí spadnout, USB nesmí nikdo rozpojit, s notebookem nesmíme nikam odejít atd. Ani toto není ideální.

Nejlepší řešení by bylo věnovat jeden počítač jen a pouze tiskárně. Mohl by být přístupný po síti nebo i z Internetu, umožnit tisky pouštět, hlídat a v případě poruchy zastavovat i na dálku, mohl by mít připojenou kamerku, takže bychom mohli tisknout a přitom si třeba odskočit na pár hodin "na jedno" a přitom mít dokonalý vizuální přehled, jako bychom se od tiskárny nevzdálili ani na krok. Nic jiného by na tomto počítači neběželo, žádné aktualizace a další zdroje poruch - prostě specializovaný, dedikovaný počítač jen pro tiskárnu. A mohl by mít pěkné webové rozhraní, které by všechno umožnilo řídit. To by asi bylo ideální.

OctoPrint

No a protože žijeme v úžasném světě svobodného software, tak tento řídicí program s pěkným webovým rozhraním a mnoha dalšími vymoženostmi už existuje - jmenuje se OctoPrint - a je dostupný zdarma a se všemi zdrojovými kódy (vývoj probíhá na GitHubu). Kdybych chtěl být genderově nekorektní, nebo dokonce pozitivně diskriminační, zmínil bych i tu zajímavost, že tento skvělý program vyvíjí žena - Gina Häußge. Ale protože na pohlaví u programátorů nehledíme, tak jen zmíním, že je dobré jí přispět nejen kvalitním bug reportem, pull requestem s nějakým vylepšením, ale i třeba drobnou mincí (Patreon, Paypal), protože OctoPrintu věnuje spoustu času a musí taky z něčeho žít.

Takže software máme (v Pythonu, tedy přenositelný na jakoukoliv platformu) a chybí už jen počítač. Místo PC, které je neskladné, žere elektřinu a točí se v něm součástky, bude mnohem lepší volbou jednodeskový minipočítač. Například něco jako Raspberry Pi za 35 dolarů (plus dražší poštovné plus smrt na poštovní celnici za překročení limitu). Pro Raspberry Pi existuje hotový obraz paměťové karty s předinstalovaným operačním systémem a OctoPrintem - jmenuje se OctoPi a není s ním žádná práce, takže tady by mohl tento návod končit.

Orange Pi

Pokud jste ale fandové levnějšího ovoce než Malin z Anglie, můžete číst dál. Popíšu totiž, jak jsem OctoPrint nainstaloval na Pomeranč z Číny, tedy Orange Pi od Shenzhen Xunlong Software. To ale není moc důležité, protože rozumný operační systém pro tyto malé počítače - Armbian - běží na desítkách různých desek, takže tento postup jde aplikovat i na Banány, Borovice a mnohé další stroje.

Konkrétně jsem použil Orange Pi One za necelých 10 dolarů (plus levné poštovné $3.61). K němu jsem rovnou přikoupil i originální 2Mpix kamerku. Není to žádný zázrak, ale za necelých 6 dolarů paráda. Tím pádem jsem byl hluboko od obávaným celním limitem a za pouhých 400 českých korun získal počítač, který bude jen a pouze sloužit tiskárně.

Pokud bych nechtěl použít originální kamerku k Orange Pi, ale sáhl místo toho po nějaké s USB rozhraním, mohl bych vzít ještě levnější počítač - Orange Pi Zero za neuvěřitelných 6 dolarů. Zero totiž nemá CSI konektor pro kameru, bohužel. Anebo kterýkoliv jiný Orange Pi, jejich výrobce se zbláznil a skoro každý měsíc vychrlí nový typ...

Instalace HW

Instalace "železa" vyžaduje vyrobit či sehnat kryt na počítač, protože nechceme nic zkratovat. Nejlepší je kryt si sám vytisknout. Na Thingiverse jsem našel krásný hotový model.


Dále potřebujeme držák na kameru. Opět nejlépe vytisknout, a zase jde najít hotový model držáčku kamery na Thingiverse.



Teď je potřeba počítač přichytit třeba na rám tiskárny, kde nebude zavazet, zatímco kameru je potřeba postavit tak, aby viděla na tiskovou plochu. Bohužel, originální kamerka připojená přes CSI rozhraní může mít jen kratičký kablík, takže je nutno najít takovou pozici pro počítač, kde bude mít kamerka dobrý výhled. Toto jsem v době psaní tohoto článku ještě nevyřešil...

USB kamerka by zde byla výhodnější, neboť USB kablík může být mnohem delší, takže počítač by mohl být zezadu na rámu tiskárny, a kamerka jen na nějakém měkkém drátku nastavena někde z boku tak, aby pěkně viděla na scénu.

Počítač můžeme napájet originálním zdrojem z další zásuvky, ale do budoucna se chystám spíš udělat rozdvojku na USB vedoucím z mikrokontroléru tiskárny a napájet Orange Pi přímo z tiskárny. Jestli si na to koupím kablík pro napájení z USB, nebo jestli se připojím přímo na piny konektoru v Orange Pi, ještě netuším, ale obě možnosti jsou schůdné.

V neposlední řadě je dobré nezapomenout na osvětlení tiskové plochy. Určitě postačí pár jasně bílých LEDek, nejlépe taky napájených z USB tiskárny, ať je všechno na jednom zdroji. Fajnšmekr by dokonce mohl k počítači připojit senzor úrovně okolního světla a řídit svit LEDek podle toho (přes den vůbec, v noci na max, ale jen při tisku, samozřejmě).

Zajímavé by mohlo být osvětlit pracovní plochu infračervenými LEDkami a snímat kamerkou bez IR filtru. Pak by tisková sestava nepřispívala ke světelnému smogu (zbývá ještě hlukový smog a plastový smrad, což vyřeší jedině separátní tiskařská kobka s odsáváním zplodin).

Instalace SW

Tak za prvé nainstalujeme určitě operační systém, tedy rozhodně Armbian. Stáhnout správnou verzi na PC, zapsat na paměťovou kartu, vložit do Pomeranče a nastartovat. Napoprvé se tam dějí věci (rozšiřují diskové oddíly), tak je potřeba to nechat, případně restartovat, updatovat balíčky atd. Přesný návod najdete u Armbianu.

Dále můžeme instalovat samotný OctoPrint. Postupujeme podle návodu pro Raspberry Pi, protože Debian jako Debian (tj. Raspbian jako Armbian). Jeden důležitý balíček jim tam (kvůli chybě v Debian Wheezy) ale chybí - "virtualenv". Takže do příkazové řádky napište:
sudo apt-get install python-pip python-dev python-setuptools python-virtualenv virtualenv git libyaml-dev build-essential
Zajímavé je (pro lidi jako já, kteří neznají python a jeho virtualenv), že po zkompilování všech těch zbytečných věcí není možné výsledný adresář někam přesunout, protože všechny ty blbosti mají v sobě zakompilovanou absolutní cestu. Takže když jsem to zkompiloval na zkoušku v /tmp/OctoPrint-master/, tak už to tam musím pořát mít, i když nechci (protože /tmp/ se po každém restartu promazává). "Vyřešil" jsem to tak, že jsem ten zkompilovaný adresář přejmenoval a přesunul do /home/, a teď si jen vždy před spuštěním udělám symbolický link - nějak takto:

ln -s /home/OctoPrint /tmp/OctoPrint-master

Tím jsem se nechtěl pochlubit, je to takové škrábání se levou rukou za pravým uchem - spíš jsem chtěl jen upozornit na něco, co jsem původně netušil, a že to jde obejít i bez kompletní rekompilace. Počítám, že v diskusi mě nějaký pythonista upozorní, že to jde vyřešit ještě nějak jinak - to jsem zvědav.

OctoPrint máme spouštět v tom adresáři, kde jsme ho zkompilovali, a navíc s parametrem "serve", takže v mém popleteném případě nějak takto:
cd /tmp/OctoPrint-master && ./venv/bin/octoprint serve

V tu chvíli se spustí web server na portu 5000, takže v dobře nakonfigurované síti je možné hned poté otevřít webový prohlížeč na PC/tabletu/mobilu a napsat do něj http://orangepione:5000/

Trošku oříšek může být zařídit spuštění programu hned po startu operačního systému. Zkušený uživatel Debianu by napsal init skript (do /etc/init.d/), případně systemd službu, a nejspíš by přitom využil parametr "daemon" OctoPrintu. Je ale možné i trošku "podvádět" a spustit program přímo z /etc/rc.local, což je skript, který se pouští při startu systému. Jen je potřeba spustit OctoPrint pod správným uživatelem a navíc mu zprostředkovat terminál, tedy jeho emulaci programem screen:

su - ja -c "/usr/bin/screen -dmS octoprint /X/venv/bin/octoprint"

V předchozím řádku je potřeba nahradit "ja" jménem vybraného uživatele a "X" cestou ke zkompilovanému OctoPrintu.

Video streaming

Na Orange Pi s originální kamerkou je zajímavý fakt, že přestože používá ovladač "gc2035" přítomný v Armbianu, tak přesto nefunguje ŽÁDNÝ program pro práci s videem kromě jediného - "motion". Proto drtivá většina návodů na Internetu popisuje konfiguraci programu "motion" - například na cnx-software.com.

Fór je v tom, že motion na tohle není dělaný, resp. je kanónem na vrabce. Motion má totiž hlavně hlídat změny v obraze, zatímco nám by stačilo obyčejný video streaming, jak to umí například program mjpg-streamer.

Kdysi jsem našel vysvětlení, proč ostatní programy nefungují, a zajímavý návod, jak to obejít: zavede se modul "v4l2loopback", který vytvoří virtuální video zařízení, a pak se spustí jednoduchý prográmek nazvaný "vidcopy", který kopíruje data z reálného video zařízení (z kamery) do toho virtuálního, se kterým už poté umí pracovat běžné video programy. Ta stránka už na Internetu neexistuje, ale popsáno je to třeba i na tomto blogu.

Poté je možné například zkompilovat mjpg-streamer (potřebujeme ale jistý fork s doplněným klíčovým parametrem "-u"), který bude brát obraz z virtuálního zařízení a streamovat přes web.

Výsledný skript (nazvaný třeba streaming.sh) na zavedení modulů do kernelu ve správném pořadí a spuštění nezbytných programů je zde:
sudo modprobe gc2035
sleep 2
sudo modprobe vfe_v4l2
sleep 2
sudo modprobe v4l2loopback
sleep 2
SIRKA=1280
VYSKA=720
FPS=5
ROZLISENI=$SIRKA"x"$VYSKA
cd $HOME/streaming
(cd vidcopy && ./vidcopy -w $SIRKA -h $VYSKA -r $FPS -i /dev/video0 -o /dev/video1 -f UYVY &)
sleep 3
cd mjpg-streamer/mjpg-streamer-experimental && ./mjpg_streamer -i "./input_uvc.so -r $ROZLISENI -f $FPS -n -u -d /dev/video1" -o "./output_http.so -w ./www"
Tento skript opět spustíme při startu systému přidáním následujícího řádku do /etc/rc.local:
su - ja -c "/usr/bin/screen -dmS streaming /cesta/k/streaming.sh"
Tím se spustí další web server, tentokrát na portu 8080: http://orangepione:8080/

Konfigurace OctoPrintu

Ještě bych rád zdokumentoval pár drobností, které jsem objevil při počáteční konfiguraci OctoPrintu. Například určitě chceme, aby se hned po startu serveru připojil k tiskárně, protože to trvá asi 20 sekund a kdo má na to čekat. Úvodní nastavení komunikačního portu je "AUTO" a když klikneme na "Connect", tak se připojí. "Auto-connect" po startu serveru ale nefunguje, dokud nezvolíme konkrétní sériový port ("/dev/ttyACM0").

Dále, názvy souborů na kartě se objevují ve zkráceném tvaru (jen prvních šest znaků, pak vlnka a číslo) - tohle je známá, ale stále nevyřešená chyba OctoPrintu. Vzhledem k tomu, že SD kartu už nebudeme potřebovat, to asi nevadí.

Zajímavá je též chyba "pozor, tištěný objekt se nevejde na tiskovou plochu". Je to kvůli tomu, že Průšův Slic3r přidává před samotný tisk jakési "rozcvičení" tiskové hlavy, kdy na samém předním okraji tiskové plochy vyjede asi 5cm proužek plastu. Tento proužek je na souřadnici -3, což OctoPrint správně prohlásí jako mimo tiskovou plochu. Vidím několik způsobů, jak to vyřešit. Přesunout inicializační G kód ze Slic3ru do OctoPrintu, nahlásit jako chybu a prosit Ginu o "opravu" (ignorováním počáteční sekvence), anebo to prostě rovnou ignorovat selským rozumem (když v náhledu vidím, že se na plochu vejde, tak věřím, že to bude OK).

V nastavení "Webcam & timelapse" zadáme URL video streamu, který je: http://orangepione:8080/?action=stream. Timelapse jsem neřešil, takže URL na fotky si v mjpg-streameru najdete sami.

Propojení se Slic3rem

Když Slic3r vygeneruje G kód, tak jak ho dostaneme do Orange Pi? Jedna z možností je přes sdílenou složku na Orange Pi (to bysme si tam ale museli nainstalovat Sambu, NFS nebo použít sshfs či něco podobného). Druhou možností je použít tlačítko "Upload" ve webovém rozhraní a nahrát G kód přes prohlížeč.

To je pořád ale "ruční práce". Přitom existuje fantastická možnost automatizace - Slic3r umí vygenerovaný kód poslat přímo do OctoPrintu! V záložce "Printer Settings" je sekce "OctoPrint upload", kam stačí zadat adresu a port našeho nového tiskového prohlížeče ("orangepione:5000") a pak "API Key", který zkopírujeme z OctoPrintu z nastavení "API". Tím se v hlavní obrazovce Slic3ru objeví nové tlačítko "Send to printer" a svět začne být zase o notný kus automatizovanější :-)

Printoid

OctoPrint se svým webovým rozhraním je bezva na práci v lokální síti, ale pokud člověk vyrazí ven, tak prý tou pravou bombou je mobilní aplikace Printoid. To jsem ještě nestihl vyzkoušet, takže sem případně doplním osobní zkušenosti posléze.

Credits:
Tomáš Vít, můj strážný anděl 3D tisku, mě krom jiného upozornil, že Cura má stejnou integraci jako Slic3r.
Pavel Novotný mě doslova dotlačil k instalaci OctoPrintu slovy "čas strávený instalací se ti tisíckrát vrátí při tisku". Také neustále pěje ódy na Printoid, že šetří mnoho času při ladění tiskových profilů.

čtvrtek 20. července 2017

WiFi lednička

Tohle v plánu vůbec nebylo, ale okolnosti si to doslova vynutily. Z ničeho nic mi žena říká, že v ledničce (nebo vlastně v chladničce) je nějak teplo - a skutečně, uvnitř byla stejná teplota jako v kuchyni. Zřejmě opět odešel termostat:


Termostat je takový malý mechanický bazmek, od kterého vede dlouhá kapilára (spíš drátek) až někam za zadní stěnu ledničky. Otočný prvek nahoře má umožnit uživateli nastavit, při jaké teplotě se začně lednička kompresorem ochlazovat. Číslování 0 - 7 znamená, že jeden nikdy neví, na jakou teplotu si ledničku nastavil - jen tuší, že "1" znamená tepleji a "7" chladněji (možná). V ledničce má být kolem 5 ℃, což tímto bazmekem těžko půjde nastavit. Termostat je schovaný uvnitř tohoto plastového modulu:


Jak vidno, je tam integrováno i osvětlení, a tohle je snad ještě původní žárovka, které by tak bylo přes 20 (slovy dvacet) let - a pořád svítí :) V modulu je ještě mechanický spínač světla otevřením dveří (vpravo nahoře):


Celé je to namontováno někde nahoře na boku ledničky. Modul dozadu pokračuje apartním krytem kabeláže a v rohu z něj doleva trčí ta kapilára termostatu.


 Kabel ke světlu a od termostatu vychází zadní stěnou ledničky ven:


Stál jsem před volbou okamžitě koupit novou ledničku (což zavání průšvihem), nebo zavolat opraváře na tuto již historickou (už minule brblal a dal tam nejspíš nevhodný termostat), anebo si zkusit termostat opravit výměnou za nový sám. Ale proč kupovat za 200 - 400 Kč zase jen nějaký mechanický krám, který nejde pořádně nastavit na žádanou teplotu, hysterezi (rozptyl mezi sepnutím a rozepnutím) má zcela neovladatelnou a navíc se opět kdykoliv pokazí, aniž bychom se o tom včas dověděli?

Nebylo by mnohem lepší vrazit do ledničky oblíbené digitální teplotní čidlo DS18B20, teplotu měřit přesně a řídit spínání kompresoru mikrokontrolérem? No samozřejmě! Neměl jsem ale po ruce žádnou destičku s Arduinem a relé, a tak jsem prostě sáhl po něčem už hotovém - WiFi Teploměru! Díky tomu teď lednička teplotu nejen měří a řídí, ale zároveň ji i hlásí na server, který kreslí šikovný graf a navíc hlídá, že teplota nepřekročí nastavené meze. To bych pak dostal varovný mail, že něco není v pořádku a mohl bych reagovat dřív, než se potraviny uvnitř ledničky zazelenají...


Jak na to? Stačí vytáhnout kabel k termostatu z ledničky ven, bez schématu prostudovat dráty v konektoru, pochopit podle barev či původního zapojení, které dva je potřeba spojit pro spuštění kompresoru a tyto ustřihnout od konektoru a zapojit do relé ve WiFi Teploměru:


Dále je potřeba dovnitř dostat teplotní čidlo, a když už jsme v tom, tak průchodkou natáhnout i napájecí kabel pro budoucí LEDové osvětlení:


WiFi Teploměr jsem postavil na lednici a zapojil do něj jak kabel ke kompresoru, tak samozřejmě i teplotní čidlo:



Při tom se mi povedlo najít schéma zapojení, které bylo nalepeno na zadní stěně lednice:


Překladač nebo Ostravák by mi přeložili barvy kablíků, kdyby bylo potřeba...

A to je vlastně vše, přátelé (tádydádydáá). Lednička opět chladí potravu, ale nyní to dělá digitálně s přesností na setiny stupně Celsia, s rozumně nastavenou hysterezí a ještě je navíc dálkově ovladatelná a hlídaná. Takový funkční upgrade ledničky o dobrých 25 let - a to se vyplatí :-)

EDIT: přidávám graf teplot v ledničce po první noci - chlazení je nastaveno na 8 ℃ s hysterezí 2,5 ℃ (takže kompresor spíná při dosažení 8 stupňů a jede dokud teplota neklesne pod 5,5 stupně).  Neuvěřitelné, jak to jede v nočním klidu stejnoměrně - by se podle toho snad daly seřizovat hodinky :-)



pátek 9. června 2017

Krokové motory s Arduinem - mikrokroky

Rád bych se ještě krátce vrátil k minulému článku a videu o krokových motorech řízených softwarově pomocí Arduina: arduino-openscad-krokove-motory

Tady je vysvětlen princip krokových motorů hezky česky: robotika.cz/articles/steppers/cs

Řídit celé kroky Arduinem jde v pohodě, na to není ani potřeba knihovna Stepper, protože je to vlastně velmi jednoduché. Ovšem vzhledem k tomu, že kroků je na celou 360° otáčku třeba jen 50 (jako v případě mého motoru ve videu), tak je to otáčení takové nepříjemně skokové a trhané. Proto byly vymyšleny půlkroky, které jsou krásně zobrazené v této animaci:
www.8051projects.net/wiki/Stepper_Motor_Tutorial#Half_Step_Sequence

Od půlkroků se dá jít na čtvrtkroky a ještě menší - tzv. mikrokroky. Normálně to umí samy od sebe hardwarové ovladače pro krokové motory, ale když je nemáme, jde si chytrým programováním pomoci i softwarově. Jistý Honza z Belgie to celé popsal včetně fotek z osciloskopu, podle kterého ladil časování:
www.jangeox.be/2013/12/microstepping-with-arduino.html
Pokud jste si nevšimli, tak na konci jeho článku najdete odkazy na zdrojový kód.

Tady jsem natočil video, jak Janův algoritmus krásně zjemní otáčení mého krokového motoru pomocí zvýšení kroků z 50 na 50 * 16 = 800 kroků na jednu otáčku:


P.S. právě jsem vygoogloval ještě jeden pěkný český článek na téma mikrokroků, tak ho sem linkuji, třeba se bude hodit: robodoupe.cz/2016/mikrokrokovani-sny-a-skutecnost/

čtvrtek 8. června 2017

Digitální multimetr RM101

Dave Jones z Austrálie na svém EEVblogu říká, že multimetrů není nikdy dost. Tak jsem si koupil další, překvapivě levný, až jsem nevěřil, že bude fungovat. Tady jsem o něm natočil videorecenzi:


Ve videu jsem zapomněl zdůraznit, že takto levný multimetr je možné bezpečně používat pouze pro měření nízkých napětí. Rozhodně nezkoušejte měřit síťové napětí či ještě vyšší, to je hazard se životem. Podrobnosti o vnitřnostech levných čínských multimetrů najdete na výše zmíněném EEVblogu.

Jak ve videu říkám, brzy znovu otestuji několik DC-DC step-up a step-down měničů napětí, takže budu moci aktualizovat tyto moje staré články:
http://joysfera.blogspot.cz/2013/11/prenosne-napajeni-pro-arduino-dc-step.html
http://joysfera.blogspot.cz/2014/07/velky-test-dc-step-down-konvertoru.html
http://joysfera.blogspot.cz/2013/11/zvysujeme-napeti-az-na-pet-dc-step-up.html

P.S. při natáčení videa jsem ještě netušil, že měřicí hroty mají krytky, které jdou (menším násilím) sundat. Pak jsou normální, dlouhé a použitelné. Ještě jim vyměním banánky a budou měřit jako nové :)

pondělí 1. května 2017

Huawei P10 Lite - aneb jak si (ne)vybrat telefon

Vybíral jsem si nový počítač do kapsy - říká se mu taky smartphone, nebo česky "chytrý telefon". Po třech spokojených letech s Google Nexus 5 (pokrevní bratr LG G2) to bylo věru těžké vybírání.

Nejsem "značkový" člověk, takže mi bylo poměrně jedno, kdo pro mě nový přístroj vyrobí. Taky moc nedám na vzhled, protože chci nové zařízení na práci a ne na předvádění se. Na čem mi naopak velmi záleží jsou technické parametry, nebo spíše poměr výkon/cena. Česky řečeno chci za zaplacené peníze dostat solidní protihodnotu, žádný naleštěný prd.

Logickým krokem z Google Nexus 5 by byl Google Nexus 5X. Snažil jsem se o něj v únoru a březnu, ale bohužel - co se přestal někdy loni na podzim prodávat oficiálními kanály, letos na jaře mu v těch neoficiálních (různé mírně pofiderní e-shopy) nesmyslně vystřelila cena o několik tisíc korun nad původní prodejní cenu a když jsem i to zvažoval překousnout, uvědomil jsem si, že na Nexus 5X je pozdě: už za čtyři měsíce mu končí hlavní podpora od výrobce, protože je tak starý - byl vydán v září 2015. Bezpečnostní záplaty sice bude dostávat ještě jeden další rok, ale to je málo, když ho chci mít nejméně tři další roky.

A podpora od výrobce (případně podpora od LineageOS) je dnes u smartphonu to nejdůležitější. Tak, jako nechcete používat neaktualizovaný operační systém plný děr při práci na PC v elektronickém bankovnictví a podobně (kdy hrozí reálné nebezpečí, že se někdo zmocní vašich peněz či identity), tak úplně stejně nechcete používat neaktualizovaný smartphone, ze stejného důvodu.

Takže jsem začal hledat přístroj s parametry jako Nexus 5X, ale vyrobený letos, a za rozumnou cenu. Automobilovým slangem jsem někde v nižší střední třídě, což je v částce kolem sedmi osmi tisíc korun. Za tuto cenu kupuju mobil co tři roky a myslím si, že to je tak maximum, co je rozumné vysolit za komunikátor, který člověka denně akorát okrádá o čas a soustředění :-)

Nexus 5X je ale těžký etalon. Má (oproti předchůdci) špičkový fotoaparát - s velkou světelností a obrovskými pixely, takže dokáže fotit téměř po tmě nádherné fotky. Navíc umí natáčet video i ve 4K rozlišení, což by se mi teď, když jsem ten samozvaný taky-jůtuber, jedině hodilo :-) A samozřejmě u něj výrobce nezapomněl na žádný z důležitých senzorů, mezi které řadím především kompas a gyroskop.

Kompas a gyroskop jsou totiž klíčové nejen na balení holek pod hvězdnou oblohou pomocí aplikace SkyMap, ale bez nich též rozumně nefunguje rozšířená ani virtuální realita. No a kdo chce něco přízemního, tak kompas je sakra důležitý při jakékoliv práci s mapou - ať už lovení kešek či navigování třeba při jízdě autem, typicky v tunelu bez signálu GPS.

Požadované parametry nového smartphonu jsou tedy dané: špičkový foťák s velkou světelností a velkými pixely pro kvalitní fotky plus natáčení 4K videa - nebo alespoň FullHD videa, ale za to s 60 snímky za sekundu. Dále všechny důležité senzory, k tomu nejlépe i NFC. Samozřejmosti typu USB OTG (pro připojení flešky, myši a klávesnice), BT 4.x, výkonný procesor, hodně RAM (alespoň 2 GB), hodně velký disk (alespoň 16 GB) a FullHD displej s Gorilla Glass II+ ani nezmiňuju, to jsou všechno základy, pod které nelze jít (to všechno Nexus 5 měl).

Co jsem naopak musel oželet je indukční nabíjení. Tato vymoženost Nexe 5, na kterou se tak rychle zvyká, za poslední dva roky z mobilů prakticky vymizela. Je to škoda, ale co nadělám. Třeba výměnou za to dostanu alespoň USB typu C, kde člověk nemusí zkoušet zastrčit konektor natřikrát.

Jo a zapomněl jsem na to nejdůležitější - umínil jsem si, že nový chytrý telefon musí mít čtečku prstů. Chci si totiž na mobil nainstalovat VPN do práce, a ta si vynutí uzamčení obrazovky telefonu a odemykání pinem, kresbou či kódem, což nejde dělat 100x za den, to prostě ne. Tohle zachrání jedině čtečka otisku prstu.

No a teď se konečně dostávám k té nebetyčné frustraci, které se snažím zbavit napsáním tohoto blog postu: je naprosto nemožné vybrat si telefon podle parametrů, protože SKUTEČNÉ PARAMETRY NEJSOU NIKDY ZNÁMY. Nebo si myslíte, že stačí použít jeden z mnoha katalogů telefonů, které mají i srovnávače? A věříte jejich údajům? Já už ne - poté, co jsem je vyzkoušel všechny a našel NAPROSTO PROTICHŮDNÉ a navzájem si ODPORUJÍCÍ údaje!

Když selžou katalogy, zkusme recenze. Pročetl jsem mnoho desítek recenzí (a viděl i několik videorecenzí) a myslel jsem si přitom, že z nich vyskočím z kůže. Tisíce slov o tom, jak je telefon úžasný, jak má 2,5D zakřivené sklo a pohodlně se drží v ruce (a podobné kydy), ale žádná tvrdá data! Chcete si vybrat telefon podle foťáku? To nejlepší, co možná zjistíte, je světelnost objektivu a počet pixelů, ale pokud chcete použitý čip, velikost jeho pixelů či třeba schopnost nahrávat video v 4K nebo FullHD@60 FPS, tak to už v recenzích nenajdete. A když najdete, tak klidně protichůdné či úplně vymyšlené údaje. Nebo seznam senzorů? Který recenzent dokáže alespoň vypsat senzory? ŽÁDNÝ. Potvrzení USB OTG jsem taky nikde konzistentně nenašel.

Dalším zdrojem informací by mohly být e-shopy, ale kvalita jejich informací se podobá srovnávačům. Navíc některé modely, které jsem měl v merku, ještě ani v českých e-shopech nebyly. V zahraničních e-shopech potom narážíme na další SMRTÍCÍ NEŠVAR, kterým je náš "špecifícky trh". K nám se totiž vozí oholené/ošizené telefony, které se nejen na západ, ale i na sever a na jih od nás prodávají v úplně jiných konfiguracích! To znamená, že je zcela kontraproduktivní snažit se najít informace na zahraničním webu, protože i když máte přesný typ telefonu, můžete ho v Česku koupit pod stejným názvem a přitom obsahující úplně jiný hardware!

Co nám ještě zbývá, když zklamaly informace od prodejců a recenzentů? Ještě můžeme zkusit informace přímo na webech výrobců, a pro kontrolu i informace od českých distributorů. Tohle všechno jsem taky zkusil a absolvoval a přesto pohořel jak papír.

Teď už budu konkrétní. Podle výše uvedeného zadání jsem si postupně vyselektoval asi 10 telefonů. Jeden byl Moto G5 Plus - podle všeho má špičkový foťák, ale prodává se jen v Indii (od 15.3., WTF?) a u nás se pořád nemůžu dočkat uvedení. A podle všech informací, které jsem shromáždil, Moto G5 Plus asi nemá kompas. Asi, jisté to není. Dokud ho ale nebudu mít v ruce a neověřím to, musím ho vyloučit - přes kompas nejede vlak.

Dalším výrobcem dobrých telefonů je Xiaomi. Jeho modely v mnou požadované výbavě (Redmi 4 PRO a Redmi 4 Note Global) jsou dokonce velmi levné - kolem 5 tisíc Kč (od českých e-shopů). Nepřekonal jsem ale obavu z upraveného Androidu ala iOS, který tam XIAOMI instaluje. Má sice početnou českou fanouškovskou základnu, ale já přicházím z čistého Androidu a nebyl jsem si jistý, že bych MIUI pobral. Podpora LineageOS je opožděná o roky, takže Redmi 4 ještě není a nikdo neví, bude-li. Proto jsem ho raději ze svého výběru vyřadil.

Posledním výrobcem, který mi zůstal, byl Huawei. Tento blázen ale zaplavil střední třídu asi 6 typy mobilních telefonů (P9, P8 Lite, P9 Lite, P8/9 Lite 2017, P10 Lite, Nova a ještě cosi), a k tomu navíc jeho další značka Honor doplnila můj výběr na rovnou desítku typů (Honor 8 a další). Pokoušet se mezi nimi vybrat podle parametrů byl hotový očistec. Informace chybí nebo se rozcházejí. Pisálci recenzí a naplňovači katalogů mobilních telefonů zjevně kopírují údaje opsáním z jiných modelů a tak generují chyby, které se dále šíří v recencích a způsobují nebetyčné zmatky.

Například Huawei P9 Lite 2017. Tento mobilní telefon vyšel asi před dvěma měsíci, ale na celém světě se prodává jako Huawei P8 Lite 2017. Jen u nás, ve specifické České republice, někdo "chytrý" usoudil, že když vyšel po loňském modelu P9 Lite, nemůže se letos prodávat jako P8 Lite 2017, a proto ho u nás distributor uvádí jako P9 Lite 2017. A to mám pocit, že má ještě třetí jméno v nějaké další části světa. Samý zmatky! A má kompas nebo nemá? Má USB OTG? Předchozí modely prý neměly... A jak umí nahrávat video? Někde píšou to a jinde ono, a teď babo raď!

Protože jsem na něj měl nejvíc políčeno, poprosil jsem nakonec známého prodejce o zapůjčení a telefon si vlastnoručně osahal. Závěr? Kompas má, gyroskop má, ale video natáčí jen FullHD s 30 snímky za sekundu. Málo, málo. Nebrat. Navíc - má 16 GB disk, ale volného prostoru jen 7,9 GB, tedy méně než polovinu! Pamatuju si úspěšné soudy v USA, když na telefonu s jablkem byla výrobcem zabraná čtvrtina udávané paměti a zákazníci to omlátili výrobci o hlavu - tu je pryč více než polovina udávané kapacity!

Posledním telefonem, který mi prošel sítem až na konec, byl zbrusu nový, u nás ještě neprodávaný Huawei P10 Lite. Nemohl jsem si ho osahat podobně jako ten P9 Lite 2017, a tak jsem se musel spolehnout na dostupné informace. Podle dvou zahraničních recenzí, podle dvou srovnávačů telefonů a především podle informací českého distributora značky Huawei tento telefon umí nahrávat FullHD video s 60 FPS! Měl by též splňovat všechny mé ostatní požadavky na parametry. Cenově mi sice trošku vyčnívá nad mou hladinu, ale dostanu 3 GB RAM (v celé EU pak 4 GB RAM) a 32 GB disk, což se "vyplatí". Tak bylo rozhodnuto - objednal jsem si ho a dnes ho mám tady na stole a můžu vám o něm napsat skutečnou pravdu.

Takže vám to napíšu rovnou: ani tento telefon NEUMÍ NAHRÁVAT VIDEO s 60 FPS. Navzdory informacím v recenzích. Navzdory informacím ze srovnávačů. A navzdory informacím od distributora značky Huawei!

To je prostě k vzteku. Několik týdnů vybírání a výsledek je, jako bych si hodil kostkou nebo sáhl poslepu do klobouku a něco si vytáhl. Promarněný čas. Zatracení recenzenti, zatracení distributoři. Takhle si tím taky-jůtuberem nikdy nestanu - 30FPS videa mě na špici nedostanou :-)

Tímto nabízím všem výrobcům a prodejcům telefonů, a také všem autorům webzinů o mobilních telefonech (kterých jen v Česku máme hned několik), že budu psát skutečné recenze, obsahující tvrdá data, ověřená fakta a údaje, na které se budou moci čtenáři spolehnout. Protože ten zmatek, který je online dnes, je opravdu k prdu.

Za pár dní používání nejspíš napíšu podrobnější pohled na Huawei P10 Lite, ale pro začátek vás možná zaujmou alespoň následující údaje: hned po prvním startu je volných 19,93 GB z celkem 32 GB disku. V systému je předinstalováno jen velmi málo balastu - Twitter, Facebook, Instagram a ještě cosi z aplikací, a Asphalt Nitro a Spiderman jako "velké" hry. Pak je tu nějaký loader pro další hry a to je tak vše. Dále je tu jedna jediná písnička a 24 fotek. Všechno se to dá bez potíží odinstalovat, ale zajímavé je, že volné místo na disku se nezvětší ani o bajt.

Huawei dodává "náhrady" ke Google kalkulačce, kalendáři, mailu, a také k počasí. Většina vypadá lépe než ty verze od Google. Je tu taky nějaká fitness aplikace, která je nějakým způsobem propojená do systému, neboť telefon ochotně počítá ušlé kroky a zobrazuje je dokonce i na zamčené obrazovce. Asi má tento Huawei nějakou HW podporu pro krokování, stejně jako to měl Nexus 5. NFC funguje, ale nepovedlo se mi ho použít pro přenos dat s Nexem. Vlastnosti EMUI 5.1 (grafické rozhraní, upravený Android) jsou zajímavé, gesta silně vyťukaná na sklo klouby prstů jsou divná ale funkční. Senzor otisku prstů je dobrý jak chleba - v tom recenze nelhaly. Více podrobností snad v nějakém dalším blogpostu.

Jo, a ta modrá varianta je fakt úžasná :-). Říkal jsem na začátku, že na vzhled nedám, ale tohle je teda paráda - záda telefonu opravdu hážou hru světel jako rozvlněná hladina vody...

středa 19. dubna 2017

Nový, digitální laboratorní zdroj

Starý zdroj a jeho neduhy


Před třemi lety jsem si postavil "laboratorní zdroj" prakticky zadarmo z ATX zdroje z vyřazeného PC. Tady o tom nadšeně bloguji. A takto vypadal:


Na první pohled vše fungovalo dobře, ale časem se ukázala jedna výrobní vada, jedna konstrukční chyba a dva fatální nedostatky celého zdroje. Výrobní vadou bylo, že při velkém proudovém nárazu se zdroj jednoduše vypnul. Zafungovaly tam zbytky nějaké nadproudové ochrany, a protože úprava ATX zdroje na proměnlivé napětí byla velmi nedokonalá a krutá, nadproudová ochrana spínala v podstatě náhodně i u malých proudů, přestože zdroj měl být schopen dodávat až 12 ampér.

Konstrukční chybou bylo použít jeden displej pro výstupní napětí i odebíraný proud. Měl jsem tam sice přepínač mezi napětím a proudem, takže jsem si mohl pořád přepínat sem a tam, ale jak člověk nevidí obě klíčové hodnoty naráz, je to nešikovné.

No a ty dva fatální nedostatky? Prvním je chybějící omezení výstupního proudu. Pokud jsem totiž zapojil jakýkoliv pokusný obvod špatně, tak po připojení k tomuto "laboratornímu" zdroji obvykle následovaly kouřové efekty a jak známo, kouř je uzavřený uvnitř součástek, a jakmile jednou unikne, součástku už nic nepohání a proto přestane fungovat. Kdybych měl možnost omezit proud ze zdroje třeba na 50 mA, tak by mi přežilo mnoho součástek při mých pokusech.

Druhý fatální nedostatek je vlastně taky konstrukční chybou, ale samotného ATX zdroje. Projevilo se to, když jsem se snažil změřit odběr proudu obvodu s ESP8266 pomocí mého nového a velmi drahého digitálního osciloskopu. Stalo se to 20. června 2016 a tehdy jsem to popsal na mém Google+ profilu: https://plus.google.com/+PetrStehlík/posts/6pjpoezBvHe

Ve zkratce jde o to, že "záporný" pól ATX zdroje (tedy společná zem na sekundární straně) je vodivě propojen s ochranným kolíkem v elektrické zásuvce! To jsem vůbec netušil. No a jelikož je i zemnicí vývod osciloskopové sondy připojen také na ochranný kolík v elektrické zásuvce (což jsem taky netušil), tak kdykoliv něco měřím osciloskopem v obvodu napájeném z mého starého "laboratorního" zdroje a zemnění osciloskopické sondy nemám připojeno na zem obvodu, tak část obvodu krutě zkratuju přes přívodní kabely ATX zdroje a osciloskopu a elektrické vedení v domě!

Po této nepříjemné zkušenosti jsem se rozhodl, že můj nový laboratorní zdroj musí být galvanicky zcela oddělený od elektrické sítě, včetně ochranného kolíku. Nejjednodušší bude použít zdroj třeba k notebooku, kde jsem si proměřením ověřil, že k ochrannému kolíku sekundární strana vodivě připojena není.

No a tady už prozrazuji, o čem vlastně tento blog post je - ostatně jsem to hned v srpnu 2016 nakousl na Google+:
https://plus.google.com/+PetrStehlík/posts/L4PeEYdzkk3

Nový zdroj


Koupil jsem si totiž v Číně docela levný modul, který má zjevně sloužit ke stavbě zdroje. Jmenuje se
DP30V5A a je to prý upgraded version DPS3005 (nebo naopak?). Vlastnosti jsou popsány takto: Constant Voltage current Step-down Programmable converter Power Supply Ammeter voltmeter Module.

Z popisu můžeme vytušit, že je to digitálně řízený (programovatelný) zdroj konstantního napětí či konstantního proudu, který mění vstupní stejnosměrné napětí na výstupní jako step-down konvertory, takže téměř beze ztrát. Výstupní napětí může být až 30 V (ale vždy o cca 2 V nižší než napětí vstupní), výstupní proud až 5 A (to podle výkonu zdroje na vstupu, díky step-down konverzi může být výstupní proud i vyšší než proud ze zdroje).

Kromě této verze na 30 V a 5 A jsou k dostání další varianty lišící se maximálním výstupním napětím (až 50 V) a proudem (až 15 A). Můžete si vybrat, podle toho, jak silný zdroj vstupního stejnosměrného napětí máte a jak moc velký proud budete na výstupu potřebovat.


Všechny verze mají společné velmi jemné nastavování výstupního napětí a proudu: napětí v setinách voltu a proud dokonce v jednotkách miliampér! Velmi úžasné a praktické.


Krabička je křehká, návod čínsky:


Balení pofiderní, ale cestu přežilo celkem bez úhony:


Modul je připraven k montáži do nějakého panelu:


Zezadu  je vidět pořádná cívka, pěkné kondenzátory a poctivý chladič. Celkem to vzbuzuje důvěru, nebo aspoň naději:


Jak mi koncem července 2016 přišel, ihned jsem mu zapojil na vstup 90W zdroj od notebooku (18 V a 4,5 A), a na výstup jsem připojil kablík s napájecím jackem 5,5 mm / 2,1 mm.

Od té doby jsem ho takto používal prakticky denně a nemohl si vynachválit, jak úžasné je mít možnost omezit výstupní proud zdroje. Skutečně to používám neustále a už mi to mockrát zachránilo [vy víte co]. Teď se mi smějí všichni čtenáři, kteří už skutečný laboratorní zdroj doma mají roky, ale pokud je tu ještě někdo, kdo doma zdroj s omezením proudu nemá, tak ihned pořídit! Je to prostě nepostradatelná věc.

Už mě ale unavilo to pořád nosit takto rozdělané a proto jsem se rozhodl mu pořídit pěknou krabičku. Hlavně jsem chtěl na vstup přidat konektor, abych mohl připojovat jakýkoliv zdroj od kteréhokoliv notebooku, a ssebou přenášel jen tento maličký modulek a nikoliv neskladný zdroj k ntb spolu se všemi jeho kabely.

Díky 3D tiskárně i3 MK2 už nemusím krabičky vytesávat ze dřeva či železa. Stačí si je navrhnout a vytisknout. Tady jsem udělal začátečnickou chybu, a nepodíval se nejdřív na internet, kde bych jinak našel už hotovou krabičku (protože všechno, co děláte, už někdo udělal před vámi a navíc nahrál na internet - Jára Cimrman by mohl vyprávět).

Místo toho jsem se (oslněn mými aktuálními úspěchy v modelování 3D objektů) vrhl ihned na tvorbu krabičky na míru. Měl jsem docela jasnou představu zkoseného čelního panelu (aby byl displej dobře čitelný a ovládací prvky dobře přístupné), ale nevěděl jsem přesně, jak bych to jednoduše udělal v mém oblíbeném OpenSCADu. Proto jsem zkusil cloudový CAD Onshape.com, ve kterém jsem zatím naprostým nováčkem. Tady je výsledek mého krátkého snažení (šlo v něm tvořit nečekaně pohodlně a rychle!): krabička laboratorního zdroje (na OnShape.com si ji můžete zkopírovat, upravit a vytisknout).


A takto vypadá výsledek:


Krabičku jsem vytiskl z PETG, aby vydržela vyšší teploty, pokud by se modul zahříval (ve skutečnosti se mi ještě nikdy neohřál, protože vysoké proudy při své běžné práci nepoužívám, ale co kdyby jednou...). Nahoře jsem přidal i řadu větracích otvorů, aby to vypadalo úplně profi :-) Vzadu je pak konektor, který jsem vypreparoval z jednoho notebooku. Byla to taková šikovná kostička, dokonce měla na boku otvor pro šroubek, tak jsem ji tam přišrouboval - přesně tam sedí.



Na výstupu by každý z vás čekal typické banánky, ale já jsem je tam schválně nedal a místo toho jsem zezadu opět vyvedl jen kablík s napájecím jackem 5,5 / 2,1 mm. Doma do něj zapojuju vše počínaje WiFi Teploměry, přes různá Arduina a mám i propojku s krokosvorkami, takže si skutečně plně vystačím i bez klasických banánků.


A to je vlastně vše. Modul je krásně digitální, nastavím si poměrně pohodlně výstupní napětí a proud (oboje pak přesně drží i pod proměnlivou zátěží), vidím neustále napětí, proud i celkový příkon a je tam i deset pamětí pro vlastní přednastavené hodnoty (které zapomínám používat). Levná (cca 600 Kč) a přitom opravdu funkční věc, kterou vřele doporučuji! :-)

Ještě jsem neodolal a natočil krátké video, kde ukazuju, jak jednoduše se modul obsluhuje:


Tak a to je vše! Pokud jste nevěděli, jaký zdroj si pořídit, tak teď už snad víte :-)

pondělí 17. dubna 2017

Arduino, OpenSCAD a krokové motory

Měl jsem doma už dlouho hromádku krokových motorů odněkud ze šrotu, a když jsem teď měl chviličku volna a nápad na věc, kde by byl krokový motor nezbytný, pokusil jsem se je oživit. V následujícím videu vše ukazuju a vysvětluju:



S pomocí příkladů od knihovny Stepper, která je standardní součástní Arduino IDE, jsem napsal následující jednoduchý prográmek pro otočení krokového motoru o osminu otáčky (o 45 °) po stisknutí tlačítka připojeného na pin A0 a zem:

#include <stepper.h>

const int stepsPerRevolution = 50;
Stepper myStepper(stepsPerRevolution, 2, 3, 4, 5);

void setup()
{
    pinMode(A0, INPUT_PULLUP);
    myStepper.setSpeed(60);
}

void loop()
{
    static byte krok = 0;
    if (!digitalRead(A0)) {
        myStepper.step(6 + (((krok++ % 4) == 0) ? 1 : 0));
        delay(100);
    }
}


SCAD zdrojový kód pro unašeč CD, nasazený na hřídeli krokového motoru. Používá knihovnu Gears pro vytvoření ozubené díry. Vytištěno z PETG na i3 MK2 za 16 minut:

include <gears.scad>;
zuby_h = 7.4;
cd_d = 14.9;
cd_h = 1.2;
vyska = 8;
union() {
    difference() {
        cylinder(vyska, d1=18, d2=30);
        linear_extrude(height = zuby_h) gear(number_of_teeth=15, circular_pitch=100, clearance = 0);
    }
    translate([0, 0, vyska]) cylinder(cd_h, d1=cd_d, d2=cd_d);
}


SCAD zdrojový kód pro podstavec motoru, aby tento necestoval po stole. Vytištěný také z PETG, protože motor se zahřívá (i když stojí!), takže podstavec z PLA (ze kterého jinak tisknu vše) by se pod ním nejspíš roztekl:

prumer = 60;
vyska = 2.4;
dira_d = 12;
dira_h = 2.2;
roztec = 49.5;
sloup_d = 6;
sloup_h = 13.4;
sroub_d = 2.8;
sroub_h = 6;
union() {
    difference() {
        cylinder(vyska, d1=prumer, d2=prumer);
        translate([0, 0, vyska - dira_h]) cylinder(dira_h, d1=dira_d, d2=dira_d);
    }
    translate([roztec/2, 0, vyska]) sloupek();
    translate([-roztec/2, 0, vyska]) sloupek();
}

module sloupek() {
    difference() {
        cylinder(sloup_h, d1=sloup_d, d2=sloup_d);
        translate([0, 0, sloup_h-sroub_h]) cylinder(sroub_h, d1=sroub_d, d2=sroub_d);
    }
}

A to je vše :-)

čtvrtek 30. března 2017

Nová čidla pro WiFi Teploměr - měření vysoké teploty a vlhkosti

Před třemi měsíci jsem psal zhodnocení WiFi Teploměru s termostatem v roce 2016 spolu s výhledem na rok letošní. Nyní je čas ukázat, co se povedlo za první tři měsíce nového roku vymyslet a postavit. Na konci článku je zábavné video! :-)

Měření vysokých teplot

Můj WiFi Teploměr umí díky digitálním čidlům DS18B20 měřit teploty v rozsahu -55 ℃ až 125 ℃. Na měření teploty vzduchu nebo vody to stačí, ale objevily se i žádosti o měření mnohem vyšších teplot. Například se mi ozvali lidé, kteří udí maso a rádi by měli přehled o dění v udírně, zatímco sedí v nedaleké hospůdce u vychlazeného půllitru. Podobným případem je měření teplot spalin v komíně, protože řízení dnešních moderních kotlů na tuhá paliva je úplná věda. Určitě existuje i řada dalších míst či situací, kde bychom rádi měřili teploty nad 125 ℃.

Pro tyto případy jsem vymyslel a postavil následující převodník, který dokáže na 1-Wire sběrnici (kterou WiFi Teploměr používá) připojit klasický termočlánek. Ten je z kovu, a proto vydrží i vysoké teploty - běžně až 600 ℃, přičemž teoretické maximum převodníku je 1000 ℃:


Zásadní výhodou je, že se na jednu sběrnici (na jeden kabel) dá připojit libovolný počet těchto převodníků, tedy libovolný počet termočlánků měřících vysoké teploty na různých místech:


Podobné řešení jsem hotové nenašel a proto ho považuji za docela unikátní. Samozřejmě se dají na stejné sběrnici kombinovat tyto převodníky na měření vysoké teploty s klasickými čidly DS18B20 na měření běžných teplot. I proto přichází můj převodník rovnou s 3,5mm stereo jackem, jak je používám pro jednoduché budování sítě teplotních čidel pro WiFi Teploměr.

Měření vlhkosti

Kromě měření teplot v obytných místnostech (pro účely řízení vytápění či větrání) se od zájemců o WiFi Teploměr často objevovaly požadavky na měření vlhkosti vzduchu. Dlouhou dobu jsem to považoval za nevýznamné, ale nedávno mi praskl filtr vody ve sklepě, tryskající voda přímo z vodovodní přípojky vytopila čtyři místnosti a rázem mě začalo velmi zajímat, jak vlhko tam je a jak (pomalu) postupuje vysoušení těch místností zrovna během nejsilnějších mrazů.

Samozřejmě je vhodné měřit vlhkost vzduchu i při běžných situacích - například v koupelně po sprchování je dobré vědět, jak dlouho musí být zapnutý ventilátor, než vysaje přebytečnou vlhkost (což by ostatně mohl řídit i WiFi Teploměr s termostatem). Anebo v obytných místnostech naměřená hodnota vlhkosti napoví, kdy je potřeba vlhkosti do vzduchu přidat (typicky přetopené panelové byty) či naopak ubrat (typicky dokonale zaizolované novostavby, kde vodní pára z vaření, praní, mytí a vůbec dýchání lidí dokáže nadělat paseku). Další velkou oblastí je pěstování rostlin, například ve sklenících. Tam potom může WiFi Teploměr s termostatem řídit větrání nejen podle teploty, ale i podle vlhkosti.


Proto jsem postavil digitální vlhkostní čidlo, které dokáže poměrně přesně měřit v celém rozsahu 0 - 100 % relativní vlhkosti vzduchu. Kromě vlhkosti měří velmi přesně i teplotu v rozsahu od -40 do 125 ℃, takže toto čidlo dokáže nahradit i klasické čidlo DS18B20 na měření teploty! Toto čidlo je také určeno pro klasickou 1-Wire sběrnici a opět jich může být připojeno na jednom kabelu několik naráz. Stejně tak je možné kombinovat tato čidla vlhkosti s běžnými čidly pro měření teploty a taky s mými převodníky pro měření vysoké teploty:


Vlhkostní čidla pro 1-Wire sběrnici jsem na trhu nenašel a proto, podobně jako výše popsaná čidla pro měření vysoké teploty, považuji toto své řešení za unikátní. Navíc jsem si dal záležet i na vzhledu: inspiroval jsem se čistou barvou známou z jablečných výrobků a navrhl a vytiskl jsem malinkou krabičku na 3D tiskárně. Myslím, že toto čidlo v interiéru ostudu nenadělá.


Čidlo vlhkosti (a teploty) je opět určeno pro můj WiFi Teploměr, takže je připraveno k okamžitému zařazení do sítě čidel pouhým zasunutím stereo jack konektoru do stereo rozdvojky.
Aktuální verze je určena do interiéru, pro pokojové teploty.

Dostupnost a podpora

Převodník pro měření vysokých teplot termočlánkem i digitální vlhkostní čidlo jsou dostupné na www.teploty.info/cidla.html. Jsou podporované WiFi Teploměrem v aktuální verzi firmware (v7.9, březen 2017). Starší verze firmware nebudou s těmito novými čidly pracovat ideálně a proto bude vhodné ho aktualizovat. Taktéž stránky i grafy na www.teploty.info jsou připravené zobrazovat kromě naměřených teplot i vlhkost.

Zábavné video nakonec




pondělí 27. března 2017

3D tisk užitečných věcí

Mám už pátým měsícem 3D tiskárnu a konečně jsem měl chvíli čas vymyslet si nějaké užitečné věci. Návrh a tisk zacvakávacích krabiček už zvládám celkem dobře jak z PLA tak i z PETG:


Používám na to skript Generic Electronic Device Packaging for Tyndall version 2 odněkud z Thingiverse.com, ve kterém stačí jen správně nastavit proměnné v polích pro otvory a podpěry a je to. No, někdy to trvá týden a třeba 4 testovací výtisky, než všechny díry a podložky trefím správně, ale jde to myslím pořád lépe takto v OpenSCADu než třeba v Tinkercadu (či jiném myšovacím CADu).


Dobrá zpráva je, že PLA i PETG se nesmršťují (nebo se smršťují stejně?), takže je dokonce možné je zkombinovat v jedné krabičce a sedí to přesně na setiny milimetru (černá je PETG, bílá je PLA):


Včera jsem ale potřeboval něco navrhnout a vytisknout opravdu rychle. Zjistil jsem totiž, že jak jsem před třemi a půl lety pověsil na svod rýny čidlo pro měření teploty na slunci, tak že upadlo a bezmocně visí na kabelu hlavou dolů:


Kromě toho, že lepicí páska už nedržela, se také totálně rozpadlo pouzdro na čidlo, které jsem tehdy v nouzi narychlo vyrobil z krytky na vrták do dřeva. Plast na slunci za 3,5 roku totálně zkřehl a rozpadl se na šupiny. Což je dobře, protože už dlouho předtím se původně průhledný plast zakalil a tak mi měření teploty asi nefungovalo ani dost dobře.


Proto jsem si už před pár týdny koupil skleněnou zkumavku, která zůstane čirá navždy. Čidlo jsem do ní narychlo vlepil a hledal způsob, jak ho uchytit na svod rýny. No a jak se říká "když držím v ruce kladivo, všechny problémy naráz vypadají jako hřebíky", tak s 3D tiskárnou člověka napadne si jakýkoliv držák vymodelovat a vytisknout.

Jak jsem si usmyslel, tak jsem během pár minut i učinil. A rovnou to i vytiskl z PLA, o kterém se říká, že ho venkovní vlivy rychle zničí. Tak tohle bude aspoň takový test, jak dlouho vystavěné slunci, větru, dešti a mrazu vydrží.


Pro zajímavost přikládám i zdrojový kód, kterým jsem tento držák vytvořil:


outerD=19;
innerD=14.8;
height=10;
tiD=85;
toD=91;
translate([outerD/2+1, 0, 0]) difference() {
    difference()
    {
        cylinder(h=height,d=outerD);
        cylinder(h=height,d=innerD);
    }
    translate([1,-3,0]) cube([10,6,height]);
}
translate([-toD/2, 0, 0]) difference() {
    difference()
    {
        cylinder(h=height,d=toD);
        cylinder(h=height,d=tiD);
    }
    translate([-60,-75,0]) cube([40,150,height]);
}
translate([-3,-6,0]) cube([6,12,height]);

Na závěr fotka, jak si čidlo v bezpečí skleněné zkumavky pěkně hoví v novém držáku:


čtvrtek 23. března 2017

Daně OSVČ za rok 2016


Řešil jsem opět po roce daňové přiznání. Můj před dvěma lety popsaný postup pořád platí beze změn, takže jsem chtěl postupovat podle něj jako podle kuchařky (ostatně proto jsem to kdysi sepsal). Jenže neznám paragrafy a tak jsem hned v úvodu zabloudil v "adisepo" formuláři na několik hodin. Když jsem na to konečně přišel, rychle jsem si to sem poznačil, abych příští rok opět nebloudil.

Takže: správný postup zadání celkových příjmů OSVČ je následující: v 2. oddíle ("Dílčí základ daně") najít položku č. 37, ale nevyplňovat ji - místo toho kliknout vedle ní na tlačítko "Příloha 1". Na nové stránce v záhlaví zaškrtnout "Uplatňuji výdaje procentem z příjmů", srolovat dolů až do oddílu "B. Druh činnosti", vybrat nějakou činnost (osobně jsem zvolil "Programování", ale je to na vkusu každého soudruha), nastavit u ní sazbu výdajů % z příjmů a pak tam konečně vyplnit celkové příjmy. Takto se vše samo vypočítá a nakopíruje do správných políček nejen na této stránce, ale i na původní "2. ODDÍL - Dílčí základ daně", kam se vrátíme tlačítkem Zpět.

Je to vlastně velmi jednoduché, když člověk ví, kam kliknout.

středa 8. března 2017

Představení Orange Pi

Na Installfestu 2017 jsem měl 25 minut na představení počítačů z rodiny Orange Pi. Necelá půlhodina je samozřejmě velmi málo času - dalo by se o nich mluvit několik hodin. Přesto jsem se pokusil o jakýsi letmý přehled a srovnání s etalonem v této třídě - Raspberry Pi.

Zde je videozáznam přednášky:

Zde je odkaz na mou prezentaci v PDF.

Video startu a přehrávání videa

Na přednášce se mi ani v čase určeném původně pro oběd nepodařilo předvést start Orange Pi One, což mě velmi mrzelo. Předpokládám, že si nějak nerozuměl HDMI výstup Orange Pi One s HDMI vstupem tamního video systému. Mít víc času, dva síťové kabely a switch, propojil bych se s Orange Pi a přihlásil se na něj přes SSH. Anebo jsem mohl frajersky použít tu sériovou debug konzoli, kterou má každičký Orange Pi - serial/USB převodník jsem měl po ruce, jen jsem neměl správné piny...
Po připojení by stačilo spustit příkaz/program "h3disp", který je určený k nastavování různých HDMI frekvencí a rozlišení. Bohužel tolik času jsem tam neměl.



Proto jsem teď doma natočil krátký video záznam, který ukazuje nejen start systému Armbian a jeho desktop, ale také jsem zaznamenal průběh přehrávání testovacích videostreamů z jell.yfish.us - od 5Mbps až po 55Mbps, v H.264 i v novém HEVC (H.265). Myslím, že budete překvapeni, jak to na počítači za 250 Kč funguje (jen prosím omluvte kvalitu záznamu - mám Full HD monitor i FullHD videokameru v telefonu, ale není to bohužel správně zaostřené, takže to vypadá děsně):



h3disp

Jak jsem uvedl, "h3disp" dokáže editovat soubor script.bin, který obsahuje informace ke startu systému, krom jiného i nastavení grafického režimu: v této diskusi se poměrně podrobně rozebírá několik monitorů, které původně neběžely, ale pak se rozběhly (s poměrem stran 5:4 a podobně) a zde je zdrojový kód h3disp, kde nejlépe můžete vidět, kolik grafických režimů podporuje. Myslím, že tam najdete i ten svůj. Všimněte si, že je rozdíl mezi HDMI a DVI, je potřeba to v "h3disp" jasně zadat (parametrem -d pro DVI). Toto bude nejspíš ten důvod, proč mi to na Installfestu nenaběhlo - jejich HDMI vstup jistě fungoval jako DVI monitor.

GPIO

Pro bastlíře je skvělé, že všechny Orange Pi mají na 40pinovou (Zero 26pinovou) lištu vyvedenu celou řadu pinů procesoru, se kterými si můžete hrát jako na Arduinu, tj. rozsvěcet světýlka, číst hodnoty všemožných senzorů nebo třeba připojit celý displej. Na Raspberry Pi slouží pro pohodlný Arduino-like přístup k těmto pinům knihovna WiringPi. Je dostupná i pro Orange Pi: www.orangepi.org/Docs/WiringPi.html
A pokud jste orientovaní spíš na Python, tak potom zkuste tuto knihovnu: github.com/duxingkei33/orangepi_PC_gpio_pyH3

Pokud vám chybí ještě nějaká informace k Orange Pi, která na mé přednášce nezazněla, dejte vědět, doplním ji sem.

neděle 5. března 2017

Arduino - vzdálené programování

Před pár hodinami jsem měl přednášku na Installfestu, kde jsem se snažil shrnout své několikaleté zkušenosti se vzdáleným programování Arduin přes Bluetooth, WiFi a Ethernet. Cílem tohoto článku je doplnit onu přednášku o konkrétní čísla, útržky programů a další drobnosti, které se do přednášky z časových, technických či jiných důvodů nedostaly:


Zde je odkaz na mou prezentaci v PDF.

Bootloader a pojistky

Jádrem přednášky byla "teorie" o bootloaderech - krátkých prográmcích, které jsou uložené ve vyhrazené části Arduino flash paměti a které se podle nastavení fuses ("pojistek") spouštějí po zapnutí či resetu Arduina, resp. mikrokontroléru ATmega328p.

Pojďme se proto podívat, co všechno fuses umějí u ATmegy328p nastavit. Na kalkulačce vybereme "AVR part name" ATmega328P a už to vidíme:

Toto nastavení platí pro "standardní" hodnoty pojistek u Arduina s bootloaderem Optiboot - tyto hodnoty jsou Low=FF a High=D6 (což se dá předvyplnit dole na stránce, pokud známe hexadecimální hodnoty pojistek a chceme se podívat, co ty hodnoty znamenají v lidské řeči).

Čteno shora dolů tam máme: externí krystal s frekvencí 8 nebo více MHz (což je OK, Arduino má standardně 16 MHz krystal). Dále je zapnutý Boot Reset vector, což je důležité, pokud chceme, aby se po resetu skočilo do bootloaderu. A v rozbalovacím menu je vybrána velikost Boot Flash sekce "256 slov". Jak jsem na přednášce stihl říct, 256 slov se rovná 512 bajtům.

Zároveň vidíme, kam bude mířít ten Boot Reset vector - na adresu $3F00, což je decimálně  16128, ale i toto číslo je v 16bitových slovech, takže v bajtech se jedná o adresu 32256. Na tuto adresu budeme chtít nahrát náš bootloader, protože sem po zapnutí či resetu skočí mikrokontrolér pomocí onoho Boot Reset vectoru. Mimochodem, adresa 32256 je právě 512 bajtů od konce 32kB (32768bajtové) flash paměti, což odpovídá tomu, že bootloader je vždy uložen na nejvyšších adresách flash paměti.

Z dalších nastavení "pojistek" vidíme, že při "Chip Erase" (mazání čipu) nedojde ke smazání paměti EEPROM (což je dobře, pokud v ní máme uložené nějaké vlastní hodnoty), a poslední zapnutou volbou je SPI programování, což je naprosto klíčové. Pokud byste si vypnuli toto SPI programování, anebo o dvě volby níže si zapnuli vypnutí resetu (Reset Disabled), tak už standardně daný mikrokontrolér  nebudete schopni naprogramovat a pak je poslední záchranou na přednášce zmíněné paralelní vysokonapěťové ("parallel high-voltage") programování.

Jinými slovy: pokud chcete zachovat běžnou funkčnost Arduina, neměňte nic než nastavení velikosti Boot Flash sekce.

Při každé změně kteréhokoliv nastavení se ihned přepočítají všechny odpovídající hodnoty na celé stránce, takže dole neustále vidíte výsledné správné hodnoty pojistek a dokonce i parametry příkazu avrdude, kterými dané pojistky zapíšete do ATmegy. Takže si zkusíme třeba změnit velikost Boot Flash sekce z 256 slov na 512 slov (což je nutné, pokud potřebujeme zapsat bootloader delší než 512 bajtů, a kratší než 1024 bajtů, jako je případ Optibootu upraveného pro Ethernet). Vidíme, že adresa Boot startu se změnila na $3E00, což je decimálně a v bajtech 31744. Hodnoty pojistek se změnily (dole na stránce kalkulačky) následovně:


Čili Low zůstává FF, ale High se změnila z D6 na D4. Vedle v "AVRDUDE arguments" jsou vidět i všechny parametry pro avrdude, které dané hodnoty zapíší.

To znamená, že pokud použijete jiné Arduino jako programátor ("Arduino as ISP"), jak jsem na přednášce pro začátek doporučoval, celý avrdude příkaz (nastavení pojistek + vypálení bootloaderu Optiboot s úpravou pro Ethernet) bude vypadat následovně:

avrdude -p m328p -c avrisp -P /dev/ttyUSB0 -b 19200 \
 -U lfuse:w:0xff:m -U hfuse:w:0xd4:m \
 -U flash:w:./optiboot_atmega328.hex

Tak. Pokud použijete Arduino UNO jako programátor, tak je možná vašemu systému známé jako zařízení /dev/ttyACM0 místo /dev/ttyUSB0, ale to je kosmetický detail, se kterým si poradíte (protože tuto hodnotu vidíte krom jiného i v Arduino IDE, když si vybíráte sériový port v menu Nastavení).

Programátor "Arduino as ISP"

Jak z Arduina udělat ISP programátor pro jiná Arduina či Atmel AVR čipy je popsáno na mnoha stránkách - např. přímo od Arduina tady. Princip je jednoduchý: nejdřív do Arduina nahrajeme z Arduino příkladů program zvaný "ArduinoISP" a teprve poté zapojíme 10uF kondenzátor mezi RESET tohoto Arduina a zem. Díky kondenzátoru při příštím nahrávání programu z Arduino IDE nedojde k obvyklému resetu programovacího Arduina, což je moc dobře, protože my nechceme nahrávat nový program do něj, ale jen ho poslat skrz něj do dalšího Arduina, zapojeného za ním přes SPI port.

Sám jsem si postavil vlastní ISP programátor z jednoho nepoužívaného Arduino Nano. Na fotce je vidět i ten 10uF kondenzátor. Jak tak studuju to zapojení na té univerzální destičce, zdá se mi, že mám ten kondenzátor celou dobu zapojený špatně! Mám ho mezi RESET a VCC místo GND. Zajímavá chyba, musím to předělat:


Softwarový reset

Jak jsem na přednášce zmínil, bootloader se dostane ke slovu vždy po zapnutí či resetu Arduina/ATmegy328p. Proto pokud chceme nahrávat nový program, potřebujeme Arduino resetovat. Normálně se toto děje pomocí signálu sériového portu DTR (Data Terminal Ready - z doby, kdy k sálovým počítačům byly připojené terminály), kterýžto je přes kondenzátor připojen přímo na RESET signál Arduina.

Při programování přes WiFi jsem doporučil připojit pin GPIO0 od ESP8266 přímo na RESET pin Arduina - potom firmware esp-link automaticky resetne před programováním a vše funguje transparentně, jak jsme z Arduino IDE zvyklí. Pokud ale programujeme Arduino vzdáleně přes Bluetooth nebo přes Ethernet, nemáme jaksi po ruce signál DTR, takže si musíme pomoci jinak a Arduino resetovat softwarově.

K softwarovému resetu zneužijeme HW watchdog - nezávislého hlídače vestavěného do každého procesoru ATmega. Nejkratší kód, který zajistí reset celého mikrokontroléru, vypadá takto:

    wdt_enable(WDTO_250MS);
    while(1);

Funkcí wdt_enable() nastavíme čas, do kterého musíme watchdog counter resetnout, jinak resetne on nás (250 milisekund), a pak neděláme nic (while(1); se zacyklí na místě), takže watchdog za 250 milisekund skutečně resetne celý mikrokontrolér, což jsme přesně chtěli.

Pozor na starší bootloadery (dnes už jen z Číny na klonech Arduin), které zapomínaly watchdog vypnout. V takovém případě se pak vlastně Arduino donekonečna samo restartuje každou čtvrtsekundu. Pokud ale nejdříve nahrajete Optiboot (tj. ten krásný nový krátký bootloader), tak s ním problém při SW resetu watchdogem nenastává, protože má jako jednu z prvních instrukcí vypnutí watchdogu.

V případě, že programujeme Arduino přes Ethernet, musíme ještě nastavit příznak v EEPROM, aby bootloader věděl, že chceme začít nahrávat novou verzi firmware a počkal na data proudící po síti. Pak celý kód (zapsání příznaku a resetnutí Arduina) vypadá takto:

    EEPROM.update(0x22, 0x55);
    wdt_enable(WDTO_250MS);
    while(1);

Nastavení IP adres v EEPROM

Při programování Arduina přes Ethernet, jak vymyslel a popsal Will Soberbutts, je potřeba do paměti EEPROM připravit sadu IP adres tak, aby bootloader po startu věděl, jak má nastavit Ethernet shield. Osobně pro to používám následující kód:

void setup_ethernet_bootloader_address()
{
    byte addr[] = {
        192, 168, 1, 1,     // gateway
        255, 255, 255, 0,   // netmask
        0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED, // MAC
        192, 168, 1, 102    // address
    };
    for(byte i = 0; i < sizeof(addr); i++)
        EEPROM.update(i + 0x10, addr[i]);
}

Tuto funkci je dobré zavolat hned ze setup(void) funkce. Samozřejmě je nutné nastavit ty adresy podle situace ve vaší síti. MAC adresa je vymyšlená ("DeadBeefFeed") a funguje dobře. Jen pokud máte doma víc Arduin s Ethernetem, je nutné každému přiřadit jinou MAC adresu - stačí měnit jen poslední číslici,  začátek (0xDE) neměňte.

Bezpečnost

Přednáška pominula otázku bezpečnosti celého konceptu vzdáleného nahrávání nového firmware do Arduina. Pravda je, že na Ethernetu na to trošku hřeším - spoléhám se na to, že se mi doma nikdo zlý do sítě nepřipojí, že k ní prostě fyzicky nebude mít přístup. Bezdrátová připojení (Bluetooth/WiFi) jsou zřejmě zranitelnější ("tati, proč na naší ulici už týden parkuje ta černá dodávka se zatmavenými skly?"), takže by to něco chtělo. Nejjednodušší by zřejmě bylo firmware zašifrovat na PC, odeslat šifrované a rozšifrovat bootloaderem předtím, než dojde k uložení do flash paměti Arduina, ale do toho jsem se zatím nepouštěl. Vyžadovalo by to větší zásahy do bootloaderu, hodně času na ladění atd. Možná se k tomu dostanu někdy časem.

Závěr

Programovat Arduino vzdáleně je největší pohoda. Mimochodem, je to vlastně důvod, proč jsem z Arduin nepřešel na STM32 - tam jsem totiž možnost vzdáleného programování přes Ethernet vůbec nenašel. Proto všem doporučuji zkusit si to doma - jakmile to rozjedete, už nebudete chtít jinak :-)

EDIT: 5.3. v 19:30 doplněno pár drobností.