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ść). Skaner jest mocowany do konstrukcji docelowego urządzenia za pomocą dwóch śrubek z gwintem M1,6, rozmieszczonych po przekątnej spodu obudowy. 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.
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.
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.