A board replacement for the classic Casio F-91W wristwatch
Find a file
Matheus Afonso Martins Moreira d4bd10ba5e Merge branch 'next'
This merge adds numerous individually small fixes and improvements
which amount to a sizeable set of features.

 - New hourly chime tunes added
 - Old hourly chime tunes improved
 - Display of characters on the stock LCD improved
 - Documentation improved
 - Simulator improved
 - Leap year handling improved
 - Months and their days sanity checked and fixed
 - More compile time configurable defaults added
 - Excessively exact time checks relaxed
 - Clock face indicators matched to original watch
 - Hardware interface issue fixed

The most significant new feature however is software debouncing.
The sensor watch now properly handles hardware switch bouncing,
making the button inputs much more precise at the cost of a small amount
of latency, greatly improving usability. Any watch faces which require
holding down buttons as part of their user interface, the pulsometer
for example, should see huge improvements in their usability.

 * 9c093f9 Merge PR #387 - configurable default birthdate/location
 * 879c48c Merge PR #417 - improve 24h only mode
 * db4097b Merge PR #426 - add temperature input to simulator
 * dea0566 Merge PR #428 - fix issues in sunrise/sunset
 * c8ca0d3 Merge PR #431 - fix wrong number of days in month
 * 95ca374 Merge PR #433 - fix clock face indicators
 * 663cd72 Merge PR #434 - fix leap years
 * a715265 Merge PR #437 - debouncing logic
 * c741332 Merge PR #439 - fix scheduled task misses
 * 657ff72 Merge PR #440 - fix countdown face issues
 * c8a87d3 Merge PR #441 - update documentation
 * dd04443 Merge PR #443 - improved t and y character display
 * 42dc151 Merge PR #447 - improve kim possible chime
 * fa0cdef Merge PR #450 - sync after enabling RTC
 * a67076f Merge PR #458 - add layla tune
 * 23c422b Merge PR #459 - add power rangers tune
 * a2e5417 Merge PR #461 - improve t/y special case docs

Tested-on-hardware-by: Alex Maestas <git@se30.xyz>
Tested-on-hardware-by: Matheus Afonso Martins Moreira <matheus@matheusmoreira.com>
Tested-on-hardware-by: Wesley Ellis <tahnok@gmail.com>
GitHub-Pull-Request: https://github.com/joeycastillo/Sensor-Watch/pull/460
2024-09-03 01:03:08 -03:00
.devcontainer Update Devcontainer Dockerfile 2024-08-22 14:54:41 +02:00
.github/workflows Set default board color for GH workflow. 2023-10-05 12:42:43 -04:00
apps Made the days_in_month its own function 2024-08-10 07:40:52 -04:00
boards Add support for Sensor Watch Pro (#412) 2024-07-06 11:07:02 -04:00
images add pinout table for sensor boards 2021-08-05 17:31:01 -04:00
littlefs@40dba4a556 add littlefs module 2022-05-05 08:12:16 -05:00
movement Merge PR #458 - add layla tune 2024-09-03 00:49:20 -03:00
PCB final gerbers 2023-08-25 13:41:55 -04:00
tinyusb@f8288be03f add tinyusb as a git submodule 2021-12-05 19:35:29 +01:00
utils uf2conv: argument to re.split should be a rawstring 2024-03-16 16:50:55 +00:00
watch-library Merge PR #461 - improve t/y special case docs 2024-09-03 00:28:25 -03:00
.gitignore add kicad stuff to gitignore 2023-04-13 20:55:53 -04:00
.gitmodules add littlefs module 2022-05-05 08:12:16 -05:00
Doxyfile bump library version 2022-05-06 17:12:51 -04:00
LICENSE.md fix typo 2021-08-17 13:59:10 -04:00
make.mk remove dead code 2024-07-10 06:49:56 -04:00
openocd.cfg add an openocd.cfg for openocd 0.12.0 2024-03-31 00:37:35 +00:00
README.md Merge pull request #138 from darigovresearch/main 2022-11-22 08:45:53 -06:00
rules.mk Fix lengthBytesUTF8 not a function (#255) 2023-07-29 07:25:27 -04:00

The Sensor Watch

The Sensor Watch is a board replacement for the classic Casio F-91W wristwatch. It is powered by a Microchip SAM L22 microcontroller with built-in segment LCD controller. You can write your own programs for the watch using the provided watch library, program the watch over USB using the built-in UF2 bootloader, and then install the board in your existing watch case to run your own software on your wrist.

image

Features:

  • ARM Cortex M0+ microcontroller
  • 32KHz crystal for real-time clock with alarm function
  • Ten digit segment LCD, plus five indicator segments
  • Three interrupt capable buttons
  • Red / green PWMable LED backlight
  • Optional piezo buzzer (requires some light soldering)
  • On-board USB Micro B connector
  • Reset button with double-tap UF2 bootloader
  • Nine-pin flex PCB connector

image

You may have noticed that there are no sensors on this board. That is by design: rather than pick sensors for you, the goal is to add a tiny flexible PCB with the sensors YOU want, and interface them over the nine-pin connector. The connector provides the following options for power and connectivity:

  • 3V power (nominal voltage from a CR2016 coin cell, can drop to ~2.7V)
  • An I²C interface with built-in pull-up resistors
  • Five general purpose IO pins, which can be configured as:
    • Five analog inputs
    • Five interrupt-capable digital inputs, with internal pull-up or pull-down resistors
    • Five digital outputs
    • SPI controller (with one spare analog / GPIO pin leftover)
    • One UART TX/RX pair (with three GPIO leftover)
    • Up to four PWM pins on two independent TC instances
    • Two external wake inputs that can wake from the ultra-low-power BACKUP mode
Pin Digital Interrupt Analog I2C SPI UART PWM Ext. Wake
A0 PB04 EIC/EXTINT[4] ADC/AIN[12]
SCL SCL
SERCOM1[1]
SDA SDA
SERCOM1[0]
A1 PB01 EIC/EXTINT[1] ADC/AIN[9] SCK
SERCOM3[3]
RX
SERCOM3[3]
TC3[1]
A2 PB02 EIC/EXTINT[2] ADC/AIN[10] MOSI
SERCOM3[0]
TX or RX
SERCOM3[0]
TC2[0] RTC/IN[1]
A3 PB03 EIC/EXTINT[3] ADC/AIN[11] CS
SERCOM3[1]
RX
SERCOM3[1]
TC2[1]
A4 PB00 EIC/EXTINT[0] ADC/AIN[8] MISO
SERCOM3[2]
TX or RX
SERCOM3[2]
TC3[0] RTC/IN[0]

These tiny “sensor boards” have a set outline, and the available area for your electronics is quite small (5.7 × 5.7 × 1 mm). Still, this is plenty of room for an environmental sensor, MEMS accelerometer or magnetometer and a couple of decoupling capacitors. Note that you will likely be limited to QFN and LGA type parts; SOICs are too large, and even SSOP packages are generally too thick. You can find reference designs for several sensor boards in the PCB/Sensor Boards directory within this repository.

Getting code on the watch

The watch library in this repository is very work-in-progress, but it should allow you to get started. To create a new project, copy the “starter-project” folder in the apps folder, and write your code in the app.c file.

You will need to install the GNU Arm Embedded Toolchain to build projects for the watch. The watch library has been tested with the 9-2019-q4-major version and the 10.3-2021.07 versions. If you're using Debian or Ubuntu, it should be sufficient to apt install gcc-arm-none-eabi.

To build your project, open your terminal and navigate to the project's make folder, then type make.

To install the project onto your Sensor Watch board, plug the watch into your USB port and double tap the tiny Reset button on the back of the board. You should see the LED light up red and begin pulsing. (If it does not, make sure you didnt plug the board in upside down). Once you see the “WATCHBOOT” drive appear on your desktop, type make install. This will convert your compiled program to a UF2 file, and copy it over to the watch.

Using the Movement framework

If you just want to make minor modifications and use existing code, start with the movement directory. You can build the default watch firmware with:

cd movement/make
make

Then copy movement/make/build/watch.uf2 to your watch. If you'd like to modify which faces are built, see movement_config.h.

You may want to test out changes in the emulator first. To do this, you'll need to install emscripten, then run:

cd movement/make
emmake make
python3 -m http.server -d build-sim

Finally, visit watch.html to see your work.

License

Different components of the project are licensed differently, see LICENSE.md.