Over the last few years, various wearable technology have been created by various IT companies. VR headsets, smartwatches are some of the few examples. Smartwatches have become more and more popular as it provides the platform for the user to check on notifications on their phone without whipping out their phone. It has become a convenient gadget for a lot of people. Although more affordable models exist, what’s the fun of just buying one when you can make one for less than $40? Today I will be showing you how I made mine that connects to an Android Phone and shows SMS notifications and syncs time with an android smartphone.
Step 1: Parts needed:
1. 0.96″ Or 1.3″ SSD1306/SH1106 SPI/I2C 128×64 OLED Screen (From ebay)
2. An Arduino Pro Mini 3.3V with ATmega328P (From ebay)
3. An Arduino Uno or a TTL-Level 3.3V USB to Serial Converter (From ebay)
4. HC06/HC05 Bluetooth Module (I recommend using HC-06) (From ebay)
5. Wires (as small as possible. I used wire wrapping wires)
6. A small Li-Po battery below 500mAh (Choose according to your size preference, I used 600mAh) (From local shop)
7. Small Push Buttons
8. A TP4056 Li-Ion Battery Charging module (I recommend the one with the battery protection circuit.) (From ebay)
9. An Android Phone
If you need the ebay links don’t hesitate to comment below and I will add the links for you.
Step 2: Before we do anything, we must make sure that everything works by prototyping on the breadboard. I recommend using an Arduino Uno as it is more convenient when prototyping and similar to its mini counterpart, the Arduino pro mini, except it is 3.3V. If you’re using a bare HC05/HC06 without a breakout board, you should use resistors to step down the I/O voltage to 3.3V on the VCC and RX line of the Bluetooth module. (I recommend using 330 ohms and 1kohm. The centre pin between the 2 resistors is the step-downed voltage) Same for the OLED. However most SSD1306/SH1106 OLEDs are 5V tolerant. Check with the manufacturer/seller for more info.
Firstly, I planned the watch face using Adobe’s Illustrator. I made a new file with its width set to 128 px and height to 64px, representing each pixel on the OLED display. I then used the U8glib library to code the drawings on the OLED. At that time, I temporarily used the millis() function to increase the time from 0. Next was the menu system. I had originally planned to use 4 buttons for the watch (1 for next, 1 for previous, 1 for menu, 1 for select) but I figured out its too many. 3 would be enough. I combined the menu button into next and previous button. When both buttons are pressed, it would go to the menu. Similarly, I used Adobe Illustrator to plan the menu.
Adobe Illustrator Drawing
The illustrator drawing is available for download below.
The menu system works based on another separate function. Once the user presses the select button, the function would return a number, for example ‘2’ would mean the user selected the apps menu. The void loop function would then run the app menu function. Next is to program the most important part of the watch, the bluetooth sync SMS and time sync capability. I actually developed the android app using MIT’s App Inventor 2 first before I start on the Arduino side. I will explain more on the app on the next section. For the SMS part, I did the coding on a separate program so as to make it easier and not confusing. After I have made it working, only then I would combine both of them together. Test the arduino program by pushing both buttons that are connected to pin 7 and 5. It should go on to a menu. Pin 4 is the select menu option. If it does, you have done the connection correctly.
Step 3: The Android App I used MIT’s App Inventor 2 to develop the app that interfaces with the watch as it only involves dragging and dropping blocks. I utilised the Texting and bluetoothClient modules. Basically how it works is that the texting component will receive and store the text message into a String variable. It will pass the variable to the bluetoothClient component which will affix a ‘2’ to the front of the string so that the arduino can identify that this string is a text message. As for the time sync function, I used the clock component to get the current time of the phone. It will then pass it to the bluetoothClient component which will then affix a ‘1’ to the front of the string so that the arduino can identify that it is a string of characters that represent time. Test the app by first installing it on your phone, and then connect to your HC05/06 by selecting connect and then selecting your HC05/06. Note: You have to pair your HC05/06 to your phone in your android settings menu for your phone before you can connect it in the app. Make sure your bluetooth is turned on. You can download the app (apk and .aia appInventor file) in the end of this post.
Step 4: Soldering everything together
Firstly I removed the reset button on the pro mini as it might be accidentally pressed when the watch is assembled. Also, it is the tallest component on the pro mini. I heated up one of the pads and then used tweezers to lift the button up. Then I heated up the other side and lifted up the whole reset button.
The next thing I did was to remove the header pins on the OLED screen. The best way to remove it is to heat up one of the pins, and then slowly lift up the pin one by one when they become loose. After all of the pins are lifted, the plastic part of the header can then be lifted up easily. After that, I used short wire wrapping wires to solder. Remember, the objective is to use as little wire as possible as wires can.
Step 5: 3D printed casing + watch strap
I plan to use the ninjaflex flexible filament for the casing. My friend suggested that we print a small rectangular sample for the strap so that we can test the flexibility of the ninjaflex strap as this is our first time using it. Since it was recommended that the print speed for the ninjaflex filament set at 30mm/s, we had it set to 20mm/s, just to be cautious. We used the school’s Makerbot Replicator 2 with the spring loaded extruder. Originally the school’s makerbot had a plastic build platform, but then it was replaced with a glass one with flashforge’s pre cut print tape. There was a bit of imperfection on one side, but that is due to the unleveled build plate.
As for drawing of the casing, we at first modeled all the parts including the OLED, HC06, Pro mini and TP4056 charger board in CAD (Autodesk Inventor). Then we assembled it in CAD and then only we modeled the casing around it.