W pierwszej części naszego cyklu posłużymy się przykładem jednego z najmniejszych skanerów OEM dostępnych obecnie na rynku – przyjrzymy się modelowi EM3296V4 marki Newland. Widok modułu – zaprezentowanego na dłoni, dla porównania skali – można zobaczyć na fotografii tytułowej.
Budowa modułu
Bohater tego artykułu to klasyczna konstrukcja statycznego silnika skanującego. Zamiast skomplikowanego układu optyczno-mechanicznego z przemiataniem wiązki laserowej, znanego m.in. ze skanerów kodów kreskowych używanych w kasach sklepowych, mamy tu bowiem do czynienia z miniaturowym systemem wizyjnym, opartym na kamerze CMOS – dzięki takiemu rozwiązaniu moduł może odczytywać zarówno kody 1D (kreskowe, np. Code39), jak i 2D (matrycowe, np. QR). Ponadto brak elementów ruchomych znacznie wydłuża czas bezawaryjnej eksploatacji i redukuje zużycie energii. Co bardzo ważne z punktu widzenia docelowych aplikacji, EM3296V4 obsługuje z równym powodzeniem zarówno kody wyświetlane na ekranach (np. smartfona czy komputera), jak i drukowane bądź nanoszone innymi technikami znakowania powierzchni (np. laserowo). Pracę w ciemności lub niedostatecznym oświetleniu zewnętrznym wspomaga wbudowany oświetlacz LED, zaś nakierowanie skanera na kod, który ma zostać odczytany, ułatwia specjalny celownik – także zbudowany w oparciu o diodę LED, choć w tym przypadku wyposażoną w doskonale skolimowaną optykę, dającą w efekcie jasną, ostro odgraniczoną od tła plamkę światła (fotografia 1).
Ułożenie poszczególnych elementów optycznych na panelu czołowym obudowy modułu można zobaczyć na fotografii 2. Silnik skanujący EM3296V4 to rozwiązanie w pełni zintegrowane – wbudowany układ elektroniczny z wydajnym procesorem zapewnia realizację całej procedury odczytu kodów kreskowych i matrycowych, zaś wynikiem działania modułu jest… zdekodowany ciąg znaków, udostępniany za pośrednictwem jednego z dwóch interfejsów szeregowych.
Najważniejsze parametry i funkcjonalności
Zanim przejdziemy do opisu sposobu podłączenia, mocowania i konfiguracji modułu, przyjrzyjmy się jego najważniejszym parametrom technicznym oraz funkcjom realizowanym przez oprogramowanie wbudowane procesora zarządzającego działaniem skanera.
- Rodzaje odczytywanych kodów 1D: Code 39, Code 128, UCC/EAN-128, AIM128, EAN-8, EAN-13, ISBN/ISSN, UPC-E, UPC-A, Interleaved 2 of 5, ITF-6, ITF-4, Matrix 2 of 5, Industrial 25, Standard 25, Codabar, Code 11, Plessey, MSI-Plessey, GS1-DataBarTM(RSS), RSS-14, RSS-Limited, RSS-Expand.
- Rodzaje odczytywanych kodów 2D: PDF417, QR Code (QR1/2, Micro), Data Matrix (ECC200, ECC000, 050, 080, 100, 140), Aztec, Chinese Sensible Code.
- Sensor obrazu: CMOS 640×480 px (monochromatyczny).
- Celownik/oświetlacz: LED 625 nm.
- Szybkość skanowania: 100 fps.
- Czas uruchamiania (po włączeniu zasilania/zwolnieniu linii Reset): 400 ms.
- Zalecane napięcie zasilania: 3,3 V (DC) ±5%, poziom szumu: <= 30 mV (pk-pk).
- Dopuszczalne napięcie zasilania: 3,0...3,6 V, szum <= 50 mV (pk-pk).
- Pobór prądu: 100 mA (typ.)/168 mA (maks.) – w trybie skanowania, 10 mA (w trybie bezczynności), 10 μA (w trybie uśpienia).
- Interfejsy: USB, UART.
- Oświetlenie zewnętrzne: 0…100 000 lux.
- Zakres temperatur pracy: –20°C to +60°C (@ 5…95% RH).
Montaż mechaniczny i integracja z oknem optycznym
Wymiary modułu EM3296V4 to zaledwie 21,8 mm × 15,3 mm × 11,8 mm (szerokość × głębokość × wysokość) – patrz rysunek 1.
Skaner jest mocowany do konstrukcji docelowego urządzenia za pomocą dwóch śrubek z gwintem M1,6, rozmieszczonych po przekątnej spodu obudowy (rysunek 2).
Projektując obudowę, w której ma być zamontowany silnik skanujący, należy przewidzieć umieszczenie w niej przezroczystego okna, chroniącego optykę oraz układ elektroniczny przed wpływem zanieczyszczeń i wilgoci, a także przed uszkodzeniami mechanicznymi – należy jednak pamiętać, by przestrzegać następujących wymogów zalecanych przez producenta:
- odległość od czoła skanera do wewnętrznej powierzchni okna optycznego nie powinna przekraczać 0,5 mm,
- grubość materiału okna optycznego nie powinna być większa niż 2 mm,
- okno optyczne powinno być wykonane z materiału odpornego na zarysowania, np. PMMA lub szkła o transmitancji nie mniejszej niż 90% i współczynniku zamglenia (ang. haze) poniżej 1%.
W przypadku umieszczenia modułu w głębokiej wnęce obudowy należy zwrócić szczególną uwagę, by jej brzegi nie kolidowały z wiązkami oświetlacza oraz polem widzenia kamery – stosowne szkice, wykreślone w dwóch ortogonalnych płaszczyznach, można zobaczyć na rysunkach 3 i 4.
Interfejs elektryczny i protokoły transmisji
Wszystkie połączenia modułu z układem nadrzędnym (np. mikrokontrolerem lub komputerem SBC) są realizowane za pośrednictwem 12-żyłowego przewodu FPC o rastrze 0,5 mm (rysunek 5) – producent zastosował gniazdo 10051922-1210EHLF marki FCI, ale nic nie stoi na przeszkodzie, by po stronie hosta umieścić kompatybilne złącze innego producenta.
Układ wyprowadzeń gniazda opisano w tabeli 1.
Domyślnym interfejsem komunikacyjnym modułu jest 8-bitowy UART o prędkości transmisji 9600 bps, z jednym bitem stopu i bez obsługi parzystości. W ramach rekonfiguracji modułu można zmienić zarówno parzystość, jak i liczbę bitów danych (7 lub 8) i stopu (1 lub 2) oraz prędkość (1200...115200 bps).
Linia RESET jest aktywowana impulsem stanu niskiego o czasie trwania 100...500 μs, przy czym czas upływający pomiędzy kolejnymi impulsami (jeżeli zaistniałaby taka potrzeba) musi przekroczyć 2 sekundy.
Wyzwolenie skanowania odbywa się standardowo poprzez ustawienie linii nTRIG w stan niski na co najmniej 10 ms – powrót do stanu wysokiego powoduje przerwanie operacji i wygaszenie celownika oraz oświetlacza (o ile nie zmieniono domyślnych ustawień działania tychże elementów). Co ważne, po odczycie kodu host powinien zwolnić linię nTRIG na minimum 50 ms, zanim przystąpi do kolejnego wyzwolenia skanu.
Moduł EM3296V4 może automatycznie obsługiwać zewnętrzny buzzer oraz diodę LED, pozwalające na potwierdzanie dokonania odczytu. Należy zwrócić uwagę na bardzo ważny fakt – linia BUZZ jest sterowana sygnałem PWM, dzięki czemu układ może sygnalizować różne stany silnika skanującego (np. włączenie zasilania, dokonanie konfiguracji za pomocą kodu specjalnego przeznaczenia, czy też prawidłowy bądź błędny odczyt) za pomocą zróżnicowanych sygnałów dźwiękowych. Z tego też względu buzzer (podłączony do linii BUZZ za pośrednictwem tranzystora kluczującego) musi być przetwornikiem pasywnym (tj. bez wbudowanego generatora). Zarówno brzęczyk, jak i dioda LED (także podłączona za pomocą zewnętrznego tranzystora), są aktywowane stanem wysokim.
Silnik skanujący EM3296V4 oferuje kilka trybów komunikacji z hostem. Domyślny tryb to UART – podłączenie linii TX modułu do wejścia RX mikrokontrolera lub konwertera UART-USB (pracującego z poziomami logicznymi 3,3 V), wystarczy więc w zupełności do uruchomienia minimalistycznej implementacji, umożliwiającej odbiór zdekodowanych znaków z modułu. W odróżnieniu od prostszych skanerów OEM, omawiany moduł umożliwia jednak także komunikację za pośrednictwem wbudowanego portu USB – i to w dwóch trybach:
- USB HID – moduł emuluje klawiaturę, dzięki czemu może być obsługiwany na zasadzie „plug & play” przez dowolny komputer lub minikomputer SBC,
- USB CDC – silnik skanujący pełni rolę wirtualnego portu COM, który – za pomocą odpowiedniego sterownika systemowego – „udaje” sprzętowy port szeregowy, przez co dane mogą być odczytywane tak, jak z każdego innego portu lub konwertera pracującego w trybie CDC.
Zestaw ewaluacyjny EVK3030 – uruchomienie i pierwsze testy silnika skanującego
Natychmiastowe rozpoczęcie pracy z modułem EM3296V4 jest znacznie ułatwione dzięki płytce ewaluacyjnej o symbolu EVK3030, opracowanej przez firmę Newland z myślą o osobach planujących wdrożenie modułu OEM we własnym projekcie.
Widok płytki przed zainstalowaniem modułu pokazano na fotografii 3, zaś gotowy do pracy zestaw (ze skanerem przykręconym do odpowiednich otworów w PCB) można zobaczyć na fotografii 4. Należy przy tym zwrócić uwagę, że zastosowana taśma FPC jest typu 1 co oznacza, że pola kontaktowe są umieszczone po tej samej stronie przewodu i skierowane do dołu (czyli usztywnieniem do góry).
Na płytce znalazły się trzy złącza, umożliwiające podłączenie EVK3030 do komputera lub innego systemu nadrzędnego:
- J3 – gniazdo typu RJ45, udostępniające port RS-232C (po konwersji przez układ SP3232),
- J4 – gniazdo USB typu B, połączone bezpośrednio z interfejsem USB skanera,
- J5 – gniazdo USB typu B, połączone przez sprzętowy konwerter CP2102 z interfejsem UART modułu skanującego.
Ponadto zestaw zawiera oczywiście dwa przyciski (resetujący oraz wyzwalający), a także diodę LED i buzzer elektromagnetyczny.
Jak widać na fotografii 4, moduł wpięto do złącza FPC oznaczonego jako J2 – drugie, bliźniacze złącze J1 jest przeznaczone do użycia z innymi modelami skanerów OEM marki Newland.
Konfiguracja z użyciem kodów predefiniowanych
Moduł EM3296V4 może być skonfigurowany na dwa sposoby. Pierwszy – klasyczny i stosowany w niemal wszystkich współczesnych czytnikach kodów kreskowych – polega na skanowaniu specjalnych kodów serwisowych, których komplet został opublikowany w dokumentacji producenta, dostępnej pod adresem [1]. W większości przypadków cykl konfiguracji polega na zeskanowaniu kodu znajdującego się na górze strony (Enter Setup), a następnie na wskazaniu wybranego kodu odpowiedzialnego za konkretne ustawienie modułu. Po zakończeniu konfiguracji trzeba zeskanować „kod wyjścia”, czyli – znajdujący się na dole strony i oznaczony jako Exit Setup. Za pomocą odpowiednich kodów można ustawić rodzaj i parametry pracy interfejsów szeregowych, tryby skanowania i detekcji, właściwości stabilizacji obrazu, obszary ROI, ustawienia oświetlacza, celownika, buzzera i wskaźnika LED, czy wreszcie rozmaite prefiksy, sufiksy i wiele innych. W razie problemów (lub podczas wstępnych testów) można łatwo powrócić do ustawień fabrycznych skanując kod Restore All Factory Defaults (rysunek 6).
Konfiguracja z użyciem oprogramowania EasySet
Konstruktorzy implementujący skaner EM3296V4 (lub jeden z wielu innych silników tego samego producenta) we własnym projekcie mają możliwość konfiguracji modułu za pomocą oprogramowania EasySet, dostępnego na komputery z systemem Windows. Po zainstalowaniu i uruchomieniu programu pojawia się okno startowe (rysunek 7), w którym można wybrać jedną z czterech opcji – nas interesuje w tym momencie programowanie ustawień skanera przez kabel USB, wybierzmy więc opcję Online Device.
Następnie trzeba podłączyć płytkę do komputera za pomocą środkowego gniazda USB (J5) i – naciskając przycisk TRIG (K1) – zeskanować wyświetlony na ekranie kod opatrzony nazwą USB CDC COM Port. Teraz można kliknąć przycisk Refresh – po kilku chwilach oprogramowanie powinno wykryć płytkę, co zostanie zasygnalizowane wyświetleniem podobizny naszego skanera w lewym górnym rogu okna (rysunek 8). Podwójne kliknięcie fotografii spowoduje przejście do okna konfiguracji, w którym możemy wybrać jedną z licznych zakładek, grupujących poszczególne ustawienia według podziału funkcjonalnego.
Załóżmy, że chcemy dodać do wyjściowego ciągu znaków (reprezentującego zawartość skanowanego kodu) obsługę prefiksów, które pozwalają na określenie rodzaju kodu (np. ‘j’ dla kodów Code 128, ‘d’ w przypadku EAN-13 i EAN-8 czy ‘Q’ w przypadku kodów QR). W tym celu należy przejść do zakładki 3.
DATA FORMATTING, a następnie wybrać podzakładkę CODE ID i zmienić stan przełącznika, znajdującego się na górze strony (rysunek 9). Teraz możemy kliknąć przycisk Save to Device, znajdujący się na dole okna, po jego prawej stronie – spowoduje to zapisanie nowej konfiguracji w pamięci modułu, co zostanie potwierdzone stosownym komunikatem. W ten sposób możemy modyfikować niezliczone opcje i funkcje dodatkowe silników skanujących, zależnie od potrzeb docelowej aplikacji.
Niezwykle ciekawą i przydatną funkcjonalność oprogramowania EasySet stanowi możliwość podglądu obrazu z kamery. W tym celu należy przejść do zakładki 4. IMAGING, a następnie kliknąć przycisk Load Image (rysunek 10). Po chwili w oknie programu pojawi się rzeczywisty obraz zarejestrowany przez kamerę modułu. Mając podgląd tego, co naprawdę „widzi” silnik skanujący, możemy z niebywałą wprost łatwością optymalizować warunki mocowania modułu w obudowie, sprawdzać wpływ rodzaju i położenia okna optycznego na jakość obrazu, czy też analizować przyczyny ewentualnych problemów, wynikających np. z wyjątkowo niekorzystnych warunków oświetleniowych lub artefaktów innego pochodzenia.
Jeżeli pracujemy w trybie USB CDC lub używamy interfejsu UART, to dane wyjściowe generowane przez moduł możemy podejrzeć w dowolnym oprogramowaniu terminalowym (np. PuTTY w przypadku systemu Windows, czy też moserial w systemach linuksowych). Jak widać na rysunku 11, dane są domyślnie oddzielane znakami nowej linii, zaś ewentualny prefiks oznaczający rodzaj zeskanowanego kodu jest „doklejany” bezpośrednio przed właściwym ciągiem znaków.
Przykładowe aplikacje
Moduł EM3296V4 – ze względu na bardzo kompaktowe rozmiary, możliwość skanowania kodów drukowanych lub wyświetlanych na ekranach, a także prostą implementację i ogromny zakres funkcjonalności – doskonale nadaje się do użycia w rozmaitych urządzeniach przenośnych, stacjonarnych systemach wbudowanych czy też aplikacjach przemysłowych, związanych np. z identyfikacją obiektów na linii produkcyjnej. Do potencjalnych zastosowań modułu można zaliczyć m.in. noszone skanery do inwentaryzacji magazynów, kompaktowe skanery bezprzewodowe, terminale kurierskie, automaty paczkowe, czy też skanery stosowane przez kontrolerów biletów w komunikacji miejskiej.
inż. Przemysław Musz, EP
[1] EM3296 OEM scan engine user guide (https://t.ly/IuWWt)