Silicon ChipTiny QR Code Reader - February 2026 SILICON CHIP
  1. Outer Front Cover
  2. Contents
  3. Publisher's Letter: Will Arduino survive?
  4. Feature: The History of Intel, Part 1 by Dr David Maddison, VK3DSM
  5. Project: Mains LED Indicator by Julian Edgar & John Clarke
  6. Feature: Power Electronics, Part 4 by Andrew Levido
  7. Project: The Internet Radio, Part 1 by Phil Prosser
  8. Subscriptions
  9. Project: Mains Hum Notch Filter by John Clarke
  10. Project: DCC Remote Controller by Tim Blythman
  11. Feature: How to Design PCBs, Part 3 by Tim Blythman
  12. Review: Tiny QR Code Reader by Tim Blythman
  13. Serviceman's Log: Closed for Christmas! by Bruce Pierson, Various
  14. PartShop
  15. Vintage Radio: The Columbia TR-1000 portable radio by Ian Batty
  16. Market Centre
  17. Advertising Index
  18. Notes & Errata: RGB LED Star Ornament, December 2025; Power Electronics part 2, December 2025; Digital Preamplifier, October 2025
  19. Outer Back Cover

This is only a preview of the February 2026 issue of Silicon Chip.

You can view 35 of the 104 pages in the full issue, including the advertisments.

For full access, purchase the issue for $10.00 or subscribe for access to the latest issues.

Items relevant to "Mains LED Indicator":
  • Mains LED Indicator PCB [10111251] (AUD $2.50)
  • LTspice circuit simulation file for the Mains LED Indicator (Software, Free)
  • Mains LED Indicator PCB pattern (PDF download) [10111251] (Free)
Articles in this series:
  • Power Electronics, Part 1 (November 2025)
  • Power Electronics, Part 2 (December 2025)
  • Power Electronics, Part 3 (January 2026)
  • Power Electronics, Part 4 (February 2026)
Items relevant to "The Internet Radio, Part 1":
  • STL files for the Internet Radio (Software, Free)
Items relevant to "Mains Hum Notch Filter":
  • Mains Hum Notch Filter PCB [01003261] (AUD $10.00)
  • Mains Hum Notch Filter short-form kit (Component, AUD $40.00)
  • LTspice simulation file for the Mains Hum Notch Filter (Software, Free)
  • Mains Hum Notch Filter PCB pattern (PDF download) [01003261] (Free)
Items relevant to "DCC Remote Controller":
  • DCC Remote Controller PCB [09111245] (AUD $5.00)
  • PIC16F18146-I/SO programmed for the DCC Remote Controller [0911124C.HEX] (Programmed Microcontroller, AUD $10.00)
  • 0.91-inch white OLED with 4-pin I²C interface (Component, AUD $7.50)
  • DCC Remote Controller kit (Component, AUD $35.00)
  • DCC Remote Controller software [0911124C] (Free)
  • DCC Remote Controller PCB pattern (PDF download) [09111245] (Free)
Articles in this series:
  • DCC Decoder (December 2025)
  • How to use DCC (January 2026)
  • DCC Base Station (January 2026)
  • DCC Remote Controller (February 2026)
Articles in this series:
  • How to Design PCBs, Part 1 (December 2025)
  • How to Design PCBs, Part 2 (January 2026)
  • How to Design PCBs, Part 3 (February 2026)
Items relevant to "Tiny QR Code Reader":
  • Tiny QR Code Reader demonstration code (Software, Free)

Purchase a printed copy of this issue for $14.00.

Using Electronic Modules with Tim Blythman Actual Size Tiny QR Code Reader Combining a camera with a microcontroller opens up many possibilities, but typically adds the requirement to process vast volumes of data. The Tiny Code Reader is a fairly inexpensive module that includes a camera and can decode QR codes, making it quite useful indeed. T his tiny module is available from Mouser and DigiKey for around $15 and we thought that it would be worth trying out; that’s a good price for a module that can read QR codes. If you want to learn more about QR codes, see our panel overleaf. The Tiny Code Reader has a straightforward interface, with example software for numerous languages and processors. We didn’t see any PicoMite code, so we’ve written a BASIC program that allows the PicoMite to interact with the Reader. The Reader is produced by a firm called Useful Sensors, based in the USA. They specialise in AI-powered technology; some of their other products include speech-to-text and translation features. It is very small, measuring about 16 × 19mm and about 8mm thick overall. The lead photos show the front (featuring the camera lens) and rear. Pin headers are not supplied, so we fitted those ourselves. The hardware appears to be similar (electrically) to a Raspberry Pi Pico module. It is based on an RP2040 processor, and you can see the flash memory chip and oscillator on the small PCB. It appears to be a closedsource design, and we did not find any circuit diagrams or the like at www.­ usefulsensors.com The camera module is glued in place and attaches via a slim mezzanine connector. That and an RGB LED are about the only parts that would not be found on an RP2040 microcontroller board such as the Pico. The RGB LED is on the same side as the camera lens. The main external interface is a fiveway 0.1in/2.54mm pitch header that breaks out an I2C interface along with power. We used the pin headers during our testing but there is also a four-way 1mm-pitch JST connector that provides a so-called ‘Qwiic’ I2C interface. The Qwiic interface was developed by SparkFun but is now used on many different development boards. There is more information available on it at www.sparkfun.com/qwiic Tiny Code Reader The Tiny Code Reader has a microcontroller that reads and decodes image data from a camera sensor. It can communicate via an I2C interface and has an RGB LED that flashes to report its status. During normal operation, the LED flashes blue, turning green when a valid QR code is detected. If it shows red, an error has occurred. The entire device operates at 3.3V, which simplifies the circuit, since no regulator is needed for the 3.3V microcontroller. ▶ Fig.1: the wiring is straightforward; the connections shown here will work with our sample code. We didn’t need to fit any external pullup resistors during our tests. The module is shown larger than life here for clarity. Fig.2: the approximate ranges at which the Tiny Code Reader could decode a 62mm-wide QR code. It has much the same vertical range as horizontal range. The user guide suggests a distance of 100mm should work, and we were able to achieve this with a smaller QR code spanning a 20° field in the camera’s vision. 80 Silicon Chip Australia's electronics magazine siliconchip.com.au A guide can be found at https://github. com/usefulsensors/tiny_code_reader_ docs There are links to numerous code examples on this page; we will also discuss our code (Arduino and Pico­ Mite) shortly. There is also a data sheet, found at https://usfl.ink/tcr_ds This indicates that the maximum operating current is 40mA. Our unit ran very close to 37mA whether the LED was on or off. The wiring connections we used during our tests are shown in Fig.1. Note that the INT pin has no function on this module. Since the module flashes its LED green when it detects a QR code, we found it easy to check its operation. Once we had our software loaded, everything worked as expected, printing the detected codes on a serial monitor program. Later, we will study its range and field of view. We found it was a bit tricky to aim the device since there is no viewfinder. It would have been more useful to have the LED on the opposite side of the board so it is visible when you are facing the QR code. Interface The interface is quite simple. It uses 7-bit address 12 (0xC) and will respond to all reads with a simple data structure up to 256 bytes long. The first two bytes report the length of the detected QR code (zero if not detected) and the remaining bytes are the contents of the code. There is also a write command that can be used to disable or enable the status LED. As we mention in the panel on QR codes, they can encode data much longer than 256 bytes. The Tiny Code Reader is only recommended to work with codes up to 40 bytes, although we were able to successfully read a 177-byte code. The Tiny Code Reader performs a scan every 200ms, since that is how long it takes to process each image. It can work with a 400kHz I2C bus, but even with a 100kHz I2C bus, reading 256 bytes will only take around 23ms, so the reader is not limited by the bus speed. Some QR codes can encode non-­ ASCII data, such as numeric data or Japanese kanji symbols; it appears that these encodings are not supported by the Tiny Code Reader. As you can see, the interface is quite simple, so we recommend that you have a look siliconchip.com.au Start The Tiny QR Code Reader should be at address 0x0C Found 7 bit address: 12 (0xC) 8 bit write address: 24 (0x18) 8 bit read address: 25 (0x19) Done. Found 1 device(s). T=2349 Code detected: test Code detected: test Screen 1: the output from our Code detected: Arduino test sketch includes an I2C test scan to confirm that communication No code detected. with the Reader is working. No code detected. at some of the code examples if you want to learn more. Code examples We have created code examples for the Pico microcontroller in both the Arduino and PicoMite BASIC languages. There are compiled (UF2) files for directly programming the Pico; these work with the wiring shown in Fig.1. Screen 1 shows the output of the serial port from when the Arduino program starts and runs. Initially, it performs an I2C device scan to allow you to check that the Tiny Code Reader is correctly wired. It then reports any codes it sees and their contents. The output is updated every two seconds unless the content changes, in which case it is updated immediately. The PicoMite BASIC program works similarly, although it shows a different style of I2C scan. Both programs allow you to switch the status LED off or on by sending 0 or 1 to the serial port. Other notes There is a nominally 2.2mm diameter mounting hole in one corner of the PCB near the headers. The Reader is quite small, but if you are able to use the Qwiic connector, it can be made even smaller by snapping off a portion of the PCB. That would include the mounting hole, so it may not suit all situations. The documentation is quite firm on the Reader only being suitable for 3.3V logic levels. We still expect it would work fine with a 5V microcontroller, as long as the power and I2C lines are limited to 3.3V, since most 5V micros will accept anything above about 3.0V as a high level. Just be sure not to apply 5V pullups to the I2C lines. We tried reading linear (1D) barcodes, but it seems that the Tiny Code Australia's electronics magazine Reader does not support any of the common linear barcodes. We plan to review a 1D/2D barcode reader module in the near future. If the Tiny Code Reader could be expanded to handle linear barcodes, we think it could be much more versatile. Given that linear barcodes are simpler, we expect they would be easier to decode. On that note, Useful Sensors points out that they do not provide support for reprogramming the firmware on the Reader. The RP2040 chip uses an external, unencrypted flash memory chip, and the Reader has about 10 test points exposed. So we think it wouldn’t be too hard for someone to extract the firmware if they really wanted to. Abilities For these tests, we printed out some short QR codes on white copy paper. We found this to give better results than the same code on a computer monitor; we suspect that the refresh rate of the monitor might be causing artefacts in what the camera sees. The codes we used were the smallest version and can hold up to 19 ASCII characters. The printed codes were 62mm wide and tall. We used normal office lighting and rigged up the Tiny Code Reader on the workbench with some rulers to measure the ranges over which it could read our codes. So, our conditions were fairly optimal without needing extreme measures. Fig.2 shows the regions over which we could perform successful reads. The spans shown are in the horizontal plane, but we found the vertical spans to be much the same. The functional span (of the camera’s field of view) varies between 33° close up and 13° at a distance. At 150mm, the 62mm code covers 22° of the sensor’s field, while it covers only 4° at 900mm. February 2026  81 QR Codes QR codes were invented in 1994, and QR stands for “quick response”. QR codes were developed in Japan by Denso Wave, originally as an improvement on linear barcodes used to track automobile parts. Denso Wave maintains the website at www.qrcode.com/en/ These applications previously used codes similar to the EAN and UPC barcodes used in retail environments to identify units of stock. Like linear barcodes, QR codes are a pattern of light and dark shapes that encode data. The design of linear barcodes is in turn inspired by Morse code. Other 2D barcode types also exist. The EAN (European article number) linear barcode can encode 13 numeric digits, equivalent to 43 bits of data. The simplest QR code can hold 152 bits, while there are versions that can encode up to 23kbits (2.9 kilobytes) of data. While linear barcodes have error detection, QR codes support multiple levels of error correction and can be decoded even when some symbols are completely missing. Crucial for their popularity, Denso Wave has made the specifications for standard QR codes publicly available, so it is possible for anyone to create and decode QR codes. Note that some of their specialised codes are still protected by patents, though. Despite having a logo covering some of its modules, this QR code can still be scanned and will provide a link to the Silicon Chip website. Structure The figure below shows the layout of a QR code. The black or white squares are known as modules, and the smallest QR codes measure 21×21 modules; this is known as version 1. Each version adds four modules in each direction, up to 177 × 177 modules for version 40. A reader uses the quiet zone to establish the rough framing of a QR code, then detects the position patterns to determine the exact location and orientation of the code. The alignment and timing patterns provide enough information to determine the location and thus value of each module. Once the module data has been extracted, the format and version information is decoded, which dictates how the remaining data is decoded. It includes redundancy in the form of error detection and correction codes, to allow data to be successfully recovered even if the code is somewhat corrupted. For example, a version 1 code, which can carry up to 152 bits of useful information, has about 200 modules available for data and error correction after the necessary patterns have been counted. There are also different ‘levels’, which allow more data to be encoded with greater redundancy. At the highest level, up to 30% corruption will still allow the data to be recovered. The redundant data uses Reed-Solomon coding, which is also used on compact discs. The format information is used to decode the modules. A mode marker embedded in the data can be used to select between different types of encoding, such as ASCII (byte) data and the Kanji encoding noted earlier. The encoding process also involves interleaving the data, which means shuffling bits around such that a localised ‘burst’ error is easier to detect and correct. This technique is also used on compact discs. Encoding also involves a so-called masking step. The masks are known patterns that are used to modify the image to make it less likely to have artefacts that are difficult to decode, such as areas of a single colour or an uneven count of dark and light modules. The decoding step involves reversing the interleaving and masking processes. All these steps may seem complex, but they make QR codes quite robust. They will work with just about any two colours that can be distinguished by a camera. It’s even possible to create a customised code by deliberately corrupting a QR code and replacing some of the modules with a logo or similar, since the error correction can handle the missing data. There are numerous online QR code generators, although we would be dubious about entering any sensitive information into an untrusted website. Denso Wave provides QR code software at www.denso-wave.com/en/adcd/product/software/ We also found an Arduino library by Richard Moore that can generate QR codes. The example 1. Version information sketch prints a code to the serial monitor using block characters. It can be found by searching for 2. Format information QRCode in the Library Manager or downloaded 3. Data and error correction keys from https://github.com/ricmoo/qrcode/ We tried using it with the Tiny Code Reader 4. Required patterns decoding the codes that the library created and 4.1. Position it worked well enough. Fitting an Arduino board with a display and Tiny Code Reader could be a way to have slow but simple bidirectional com4.2. Alignment munication! 4.3. Timing 5. Quiet zone 82 Silicon Chip While QR codes may appear to be a random assortment of black and white squares, they are actually highly structured and robust. Source: https://w.wiki/BRVs Australia's electronics magazine siliconchip.com.au There is clearly an interplay of factors such as focus and resolution at play. For example, we were also able to read a 31mm-wide code at a distance of 90mm from the sensor; in this case, the code covers 20° of the sensor’s field. The data sheet states that a distance of 10-15cm is best for the camera’s focus. Uses While we thought that the Tiny Code Reader sounded like a novel and interesting device, we weren’t sure exactly what uses it might have. The Useful Sensors documentation does offer one suggestion: as a way to provision WiFi network information to a microcontroller. There are specific code formats intended to carry WiFi network information (SSID, password, encryption type etc), so this seems straightforward enough. It’s probably not practical for a one-off setup, but if a device is expected to connect to multiple different networks, it is quite an elegant method. We have seen smartphones that can display a QR code for this purpose. Similar situations, where a microcontroller needs a small amount of data for an initialisation or occasional configuration, would be well-suited to using a QR code. If an application already requires an I2C bus, no extra I/O pins are needed. While the Reader hardware might end up a bit more expensive than, say, a small display and some buttons, it could simplify the software if the QR code data can be structured to avoid the need to program a complicated user interface. In this regard, it has parallels to the way we used the NFC chip in the IR Remote Control Keyfob (February 2025; siliconchip.au/Article/17730). The bottom of the PCB has an RP2040 processor, flash memory chip and crystal oscillator. The white connector is a JST header that’s compatible with SparkFun’s Qwiic connector system. The Tiny Code Reader is compact and uncomplicated. The top side shown here includes the camera, while the small brownish part is an RGB status LED. In it, the NFC chip is used to provide a one-off configuration of the codes that the Keyfob is programmed to transmit. We also found a YouTube video about a robotics project that uses the Tiny Code Reader to detect QR codes as fiducial (location) markers and allow the robot to know its position. The robot’s work area is populated with small QR codes that hold (x,y) coordinate pairs. The video is at https:// youtu.be/UL-vF4JaKqQ The presenter of the video discusses his experiences implementing Tiny Code Reader in his project. He also mentions the need to put an LED on the robot to illuminate the QR codes. Watching this video made us think that access to some of the Reader’s metadata might also be useful; unfortunately, there is no way to access it. Metadata is simply data relating to other data. For a QR code reader, the firmware would likely have access to data about where the code is within the camera’s field of view and how many pixels it spans. This information could be used to determine the code’s position in space relative to the camera, which would be handy to know in a robotics application. Summary We found the Tiny Code Reader to be a straightforward device that was easy to use and program. The lack of a screen can make aiming the camera a bit tricky, but the LED meant that it was simple to confirm that a code had been read. It feels like a niche device, with limited practical applications, but is a fairly inexpensive unit for what it is capable of doing. The Tiny Code Reader is available from Mouser (485-5744) and DigiKey SC (1528-5744-ND). Raspberry Pi Pico W BackPack The new Raspberry Pi Pico W provides WiFi functionality, adding to the long list of features. This easy-to-build device includes a 3.5-inch touchscreen LCD and is programmable in BASIC, C or MicroPython, making it a good general-purpose controller. This kit comes with everything needed to build a Pico W BackPack module, including components for the optional microSD card, IR receiver and stereo audio output. $85 + Postage ∎ Complete Kit (SC6625) siliconchip.com.au/Shop/20/6625 The circuit and assembly instructions were published in the January 2023 issue: siliconchip.au/Article/15616