pátek 29. listopadu 2013

Čtení čísel z displejů

Občas se stává že je třeba získat měřené hodnoty z přístrojů, kde neexistuje žádný elektrický výstup. Může se jednat například o běžné kapesní multimetry se kterými lze udělat malý měřící systém za zlomek ceny skutečných laboratorních přístrojů, nebo například o meteostanice, kde můžeme z levného domácího modelu udělat třeba počasí online. Speciálních aplikací je pak celá řada, speciální stroje a přístroje s displejem kde je třeba na něco dohlížet, testy přístrojů, apod. K celkem spolehlivému získání čísel stačí PC s OS Linux a běžná webkamera.

První je třeba získat šikovný balíček ssocr, obsahující jakýsi rozboznávací ocr algoritmus, ovšem optimalizovaný na sedmisegmentové numerické displeje. V případě jiného typu displeje, kde se font podobá klasickému písmu zřejmě vyhoví běžný program OCR. Se sedmi segmenty si ovšem zřejmě neporadí. Balíček je ve zdrojovém kódu, je třeba ho zkompilovat a řádně začlenit do systému, což ovšem nečiní žádné problémy (testováno na XUbuntu 12.06 32bit).

https://www.unix-ag.uni-kl.de/~auerswal/ssocr/
Stránky šikovného balíčku ssocr.

Hlavní program ssocr funguje tak, že z fotografie displeje extrahuje nejdříve rámeček s displejem, poté jednotlivé číslice a segmenty. Na závěr podle jasu segmentů odhaduje rozsvícené číslo. Nejdříve tedy musíme získat snímek displeje, k čemuž lze výborně použít již známý prográmek fswebcam. Syntaxe příkazu může vypadat například takto:

fswebcam -d /dev/video0 -S 100 --png 1 -F 10 test.png

Snímek pořídíme ze zařízení video0, což je v testovaném případě obyčejná USB webkamera. Volba -S 100 zajistí ustálení jasu snímku po startu kamery, tím, že se prvních 100 snímků po inicializaci kamery zahodí a uloží se až snímek další. Pro uložení použijeme bezeztrátový fromát png. Volba -F 10 zajistí integraci 10 snímků do snímku výsledného, čímž se zmenší šum. Když v průběhu integrace číslo přeskočí, může nastat potíž s přečením. Čtení se pak musí zopakovat.

Snímek pořízený kamerou
Nyní následuje volání ssocr obsahuje kromě jména souboru snímku také příkaz crop pro oříznutí snímku na rámeček displeje se čtyřmi číselnými parametry, první dva jsou souřadnice levého horního rohu rámečku, další je šířka a poslední výška rámečku.

ssocr crop 77 213 48 30 -d 3 test.png -t 30 -D -P

Volba -d 3 značí že budeme číst tři číslice. V případě zadání -1 je počet určen autodetekcí, což je vhodné jen v některých případech, kdy je počet číslic skutečně variabilní a kdy se případná chyba ošetří nějak jinak. Volba -t 30 určuje rozhodovací práh světlých a tmavých segmentů v procentech jasu celého rámečku displeje. Pro testování je vhodné přidat volby -P (ladící textový výpis) a -D (uložení obrázku rámečku displeje a rozpoznávaných linií).

Vyjmutý obrázek displeje a rozpoznávaných linií
Voleb má samozřejmě program ssocr mnohem více. Problém může nastat s aktivními displeji kde jsou aktivní segmenty jasnější než neaktivní. Možná bude třeba obraz dalším externím programem invertovat a odbarvit. Po odladění je možné zbavit se potřeby ukládání snímku spojením programu fswebcam a ssocr pomocí roury.

fswebcam -d /dev/video0 --png 1 -F 10 - 2>/dev/null | ssocr crop 77 213 48 30 -d 3  -t 30  -

Jako výsledek obdržíme číslo 150 a v případě zapnutých ladících informací ještě řadu dalších informací, například schéma detekovaných aktivních segmentů složený ze znaků.

Obrázek terminálu s výpisem části ladících informací
(Pořízený špatně, ale to mi bohužel došlo až příliš pozdě.)


Sestava kamery sledující teplotu na displeji pájky

čtvrtek 28. listopadu 2013

Altium Designer a 3D modely

Hodně perfektní funkcionalitou programu Altium Designer je 3D náhled DPS. Zabrání hodně kolizím, špatným umístěním prvků a zlepší orientaci ve výsledném tvaru DPS. Bohužel, většinu součástek je nutné si nadefinovat samostatně, k čemuž slouží jednoduchý editor umožňující vytvářet 3D tělesa jako pouzdra součástek na principu 3D vytahování polygonu. Dále je zde také možnost načíst skutečné 3D modely ve formátu step. Ty je možné získat například po registraci na adrese: http://www.3dcontentcentral.com

Výsledný 3D náhled desky GSM modemu
3D model celé desky je možné dále exportovat příkezem File / Save (a zvolit formát *.stp nebo *.step) pro následné začlenění do mechanické struktury celého zařízení.

Altium Designer - díry v ploškách

Program Altium Designer je určen především pro profesionální použití a tomu i odpovídají možnosti generování dat pro výrobu. Variant nastavení je skurečně mnoho, bohužel chybí zde jedna věc známá hlavně z programů menších, například z populárního programu Eagle. Žádná z clonek pro výstup výrobních dat ve formátu GERBER nemá viditelné dírky označující místa pro vrtání děr. Důvod je jednoduchý, v profesionální výrobě se díry vrtají hned v prvním kroce výroby, následně se provádí pokovování, které z děr udělá prokovky. Pak teprve pokračuje výroba nanášením motivů vodivých cest. Dírky v ploškách by byly spíše naobtíž, obzvlášť kdyby nebyly naprosto přesně sesazeny se skurečnými otvory v desce.

Možnost zapnout viditelné otvory zde tedy bohužel chybí. Pro amatérskou výrobu DPS klasickou fotocestou jsou viditelná místa vrtání docela důležitou věcí usnadňující vrtání. Hůře se pak na nějakou díru zapomene a při vrtání je vrták vyleptanou tečkou v mědi dobře veden na své místo. Musíme si tedy pomoci jiným způsobem. Cesta vede přes funkce tisku, kde díry zapnout lze, ale export je nekvalitní a díry příliš veliké, zabírající značnou část mědi plošek. Postup je tedy lepší trochu upravit.

Postup pro získání předlohy DPS s dírami v ploškách

  • Exportovat GERBER data bottom vrstvy (pokud existuje), přípona GBL nezrcadlově.
  • Exportovat GERBER data top vrstvy (pokud existuje), přípona GTL zrcadlově.
  • Exportovat GERBER data obrysu (čára například ve vrstvě MECHANICAL 4) pak bude přípona souboru GM4.
  • Exportovat data pro NC vrtačku (NC Drill, uloží se do TXT).
Struktura Job souboru pro export výrobních dat
Pro tyto úkony je dobré si vytvořit skript - Job (File / New / Output Job File) a zde si uložit potřebná nastavení pro opakované používání. Souborové cesty je vhodné volit relativně, pak lze tento Job soubor přesouvat i do jiných projektů ke stejnému účelu. Stiskem jednoho tlačítka se celý export provede a můžeme pokračovat v přípravě předlohy.

Dvojklikem na soubor jedné z vrstvy, například GBL se soubor otevře v editoru CAMtastic - součást Altium Designeru. V levém pruhu okna je vhodné si otevřít kartu CAMtastic, kde jsou vidět zejména vrstvy výkresu desky.

  • Příkazem File / Import / Gerber importujeme soubor GM4 a uvidíme obrys desky v další vrstvě.
  • Dále přes File / Import / Drill importujeme soubory pro NC vrtačku (DRL, DRR, TXT).
  • Změníme velikost všech vrtáků pomocí Tables / NC Tools na průměr 0,02 inch. Díry se viditelně zmenší. Je vhodné také zaškrtnout možnost Not Plated (neprokovené) u všech vrtáků.

Tabulka vrstev editoru CAMtastic s importovanými vrstvami obrysu a děr

Poklepem na barevnou kostičku v tabulce vrstev vlevo v okně vybereme nové barvy pro všechny vrstvy. Pro díry bílou a pro GERBER vrstvy (obrys i spoje) černou. Bohužel tím se na obrazovce ztratí, ale stále existují. Nyní je hotovo, můžeme tisknout na pdf tiskárnu nebo na tiskárnu skutečnou, schopnou vyrobit předlohu. V případě tisku na tiskárnu z pdf je třeba zaškrnout zachování původního rozměru v nastavení tiskárny! Celý postup se opakuje i pro druhou vrstvu spojů, pokud existuje.

Finální předloha DPS

středa 27. listopadu 2013

Proč OS linux?

Mezi tradiční témata techniky a elektroniky přidávám nově téma linux. Důvod je ten, že v něm spatřuji ostrůvek počítačové techniky, který je stále zajímavý (i pro osobu mého typu) a má stále smysl ho řešit a jím se zabývat. Není snad ještě postižen takovou podivnou degenerací, která je dnes cítit z řady tradičních programů, jeho promyšlenost je těžko srovnatelná s čímkoli jiným, práce velkých světových expertů světa počítačové techniky je zde stále silně znát. Také myšlenka open-source a svobodného softwaru je naprosto unikátní co do způsobu spolupráce a na systému linux je dobře vidět, že takto lze zdolávat i opravdu gigantické úkoly. Nejsem expert v oblasti, ani se jím necítím být. Jsem si také vědom že všechno má své nevýhody. Ale učím se a rád objevím každou novou informaci. Navíc, je to příjemný pocit že MS Windows k životu nepotřebuji. Děkuji za to že OS linux existuje. Je to opravdu unikátní, velmi dobrá práce!

Rychlá řádková tvorba fotogalerie

Stává se, že je třeba zveřejnit na internetu album fotografií, čítající někdy jednotky, ale někdy i řadu desítek fotografií k nějakému tématu. Potíž nastane v případě, že zadavatel nechce nebo nemůže respektovat vhodný formát názvů (České znaky a mezery v názvech co běžní uživatelé WINDOWS bezostyšně používají mohou činit problémy.) nebo rozlišení fotografií. Budeme potřebovat také ikony pro náhled přes velmi pomalé připojení a seznam fotografií pro jejich začlenění do zobrazovacího systému. Proč trávit čas zbytečnou činností - úpravou formátu a nevyřešit věc trochu příjemněji? Stačí malý velmi jednoduchý dávkový soubor a všechny úkoly jsou za pár vteřin hotové.

Dávkový soubor mkgallery

#!/bin/bash

if [ "$#" -ne 1 ]
then
    echo "Zadej prefix jako parametr!"
    exit 1
fi
prefix=$1

rename -v 's/\.JPG$/\.jpg/' *.JPG
rename -v 's/\.jpeg$/\.jpg/' *.jpeg
rename -v 's/\.JPEG$/\.jpg/' *.JPEG

IFS=$','
a=1
for i in *.jpg; do
    new=$(printf "$prefix%04d.jpg" ${a})
    mv --verbose "$i" "$new"
    echo $(printf "$prefix%04d;%d" ${a} ${a}) >>pictures.csv
    let a=a+1
done

mogrify -resize 800 *.jpg

for i in *.jpg; do
    cp "$i" "S_$i"; done

mogrify -resize 160 S_*.jpg

exit 0


Jako parametr se zadává řetězec - prefix, který bude spolu s čtyřčíselným indexem tvořit nové názvy souborů fotografií.

Skript postupně provede:
  • Kontrolu, zda je prefix skutečně zadán.
  • Změnu možných přípon souborů JPG, jpeg, JPEG na jpg.
  • Přejmenování všech souborů v původním abecedním pořádku do tvaru prefixXXXX.jpg, kde XXXX je čtyřmístné číslo od 1.
  • Změnu velikosti všech fotografií na rozlišení, kde delší strana má 800 pixelů.
  • Kopii všech fotografií do náhledů s delší stranou 160 pixelů a předponou názvu S_ od slova Scale.
  • Vytvoření souboru pictures.csv pro přímé načítání do zobrazovače. V souboru jsou u fotografií uvedeny formální jména - čísla, které lze ručně snadno přepsat na popisky fotografií zobrazované při jejich prohlížení.
Skript využívá ke své činnosti balík image-magick, konkrétně program mogrify, opravdu velmi výkonný nástroj pro řádkovou práci s obrazem.

Pozor!!! Zkoušet jedině na kopiích fotografií, které jsou uloženy ještě jinde!

Optimální konfigurace programu fswebcam

Program fswebcam je zajímavý výkonný prográmek určený k záchytu obrázků z video4linux zařízení, například webových kamer nebo digitizérů obrazu. Výborně funguje například s tradičními starými televizními kartami osazenými čipem BT878, které jsou dnes v době digitální televize již k nepotřebě, ovšem jako digitizér obrazu analogových kamer se stále hodí. Analogové kamery (poskytující na svém výstupu klasický kompozitní videosignál s kódováním barev PAL) sice dnes nepatří k nejkvalitnějším snímačům obrazu, nicméně obraz je srovnatelný s lepšími USB kamerami pro běžné počítačové použití. Navíc, díky použití kompozitního videosignálu není narozdíl od USB žádný problém odvést signál od kamery řadu metrů daleko k digitalizační kartě. Výhodou také může být výbava některých kamer nočním viděním (infračerveným LED přisvětlením a schopností obrazového senzoru vyhodnotit infračervený obraz). S takovýmito kamerami není problém vidět v naprosté tmě třeba i na vzdálenost 10 m a přitom cena takové kamery je víc než příznivá - v řádu stokorun.

Zmíněný program fswebcam má řadu možností nastavení o kterých se lze dočíst v manuálové stránce programu. Zde uvádím pouze optimální volbu parametrů, která se osvědčila při běžném pořizování snímků v místnosti.

Syntaxe


fswebcam -r 640x480 -S 100 --flip h --jpeg 95 --shadow --title "TEST" --subtitle "VIDEO0" --info "Test programu fswebcam" --save /var/www/obr/akt_video0.jpg -d /dev/video0

Význam parametrů je následující

Par. -r 640x480 ... rozlišení pořízeného snímku.

Par. -S 100 ... přeskočení 100 snímků po inicializaci kamery. Toto je vhodné používat, neboť automatika řízení jasu a barevného podání potřebuje jistý čas na ustálení. Nevýhodou je zpomalení procesu pořízení snímku.

Par. --flip h ... vodorovná orientace snímku.

Par. --jpeg 95 ... jpeg komprese snímku v kvalitě 95 %.

Par. --shadow ...

Par. --title "TEST" ... titulek obrázku, velký nápis.

Par. --subtitle "VIDEO0" ... podtitulek obrázku, menší nápis.

Par. --info "Test programu fswebcam" ... komentář obrázku, nejmenší nápis.

Par. --save /var/www/obr/akt_video0.jpg ... jméno souboru k uložení.

Par. -d /dev/video0 ... ovladač zařízení pro záchyt obrazu.

Dále je možné přidat

Par. -q ... tichý režim, potlačí výpis zpráv o průběhu záchytu.

Par. -l 60 ... Automatický záchyt obrazu ve smyčce, prodleva v sekundách.

Poznámka: Na některých systémech může zprovoznění programu fswebcam vyžadovat instalaci fontů.