You are browsing as a guest. Sign up (or log in) to start making projects!

3h 48m 6s logged

Prototyping & Schematics

I started working on a prototype of the watch on a breadboard, and began designing the PCB for the watch in KiCAD.

Watch Schematic

I decided to use RP-series MCUs for the watch, so I began developing the schematic for the watch’s PCB with a 3.3V VCC in mind. So far, I’ve attached a USB-C receptacle with nets for data and power. I also added support for 1S LiPo batteries (1S means single-cell in series, which has an average voltage of 3.7V). The 5V power line from the USB and the positive rail from the battery go through a P-channel enhancement-mode MOSFET. The purpose of the MOSFET is to ensure that current doesn’t flow into the battery when the USB is plugged in (at least, not in this part of the PCB/schematic), and that only one power line is responsible for powering the board at a time. Naturally, a buck converter is on the other end to step the voltage down to a nice and friendly 3.3V for the MCU. I also added a safe charging circuit for the LiPo at the end of my session.

Breadboarding a Prototype

What better way to have an off-grid watch than to use LoRa, a technology that can transmit short segments of data (like text messages or maybe really low-res images) over a kilometer away! I used two regular Pi Picos and connected a Wio SX1262 module to each via SPI. I then created a Pico C project and added RadioLib in CMake. The issue with RadioLib is that it’s targeted for Arduino, using functions like digitalWrite() and all that. To ensure this works in the Pico C SDK, I had to add a hardware abstraction layer, also known as a HAL. Basically, a HAL just translates functions from a different platform into the vernacular (Pico C, in this case), like gpio_put(). I created two executables: one for sending data and another for receiving it. The issue is that only every third send makes it across. This is likely due to some internal blocking mechanisms in RadioLib’s methods, but it can be fixed if I find a way to use interrupts. The issue can be explored in depth here.

0
10

Comments 0

No comments yet. Be the first!