-
Recent Posts
Recent Comments
Category Archives: Uncategorized
E-Ink Bank Calendar
I was recently given a brass calendar frame that normally holds a collection of small cards corresponding to the date. The top lifts off and the cards are re-arranged to display the day’s date. I decided to automate it with the following:
- Arduino Pro Mini, ATmega328P microcontroller board (1x) Main controller for the system, runs the code integrates everything else.
- DS3231 Realtime Clock module (1x). This keeps track of the time/date. It has its own small battery to stay running while main system power is off.
- 3.7″ Epaper displays(3x).
- Epaper connector board (2x) – mainly just a breakout board for the epaper display’s ribbon cable, but it also handles signal buffering and making a few weird voltages that the epaper display needs.
- Epaper interface board (1x) – same as the connector board, but also has onboard SPI RAM and MicroSD card slot.
I’ve designed many various electronic circuits/devices, but this is the first I can recall where the power budget matters a lot. The power usage would always be low with these devices, but I wanted to avoid a scenario where it’d need a wall wart plug – the goal is for it to run a reasonably long time, a year or so, on a rechargeable battery. The magic of the e-paper displays (other than having the image very close to the surface, looking more like real paper than a display) is that they can be completely powered off and still retain their image; that’s a huge head-start to low power usage. This left the micro-controller as the main risk for power consumption, however with careful use of interrupts I think I’ve optimized this. The sequence, which happens every night at midnight, is:
- DS3231 asserts its alarm pin
- The alarm pin is connected to an interrupt on the ATmega328P which has been configured to wake the microcontroller and begin code execution.
- The microcontroller communicates with the DS3231 over I2C to read the new date and resets the alarm for the next midnight.
- The microcontroller reads the SD card to lookup graphics corresponding the 1st display based on date, this is read into RAM and then shifted to the epaper display. This repeats for each display. (The controller inside each display goes through its own routine for the physical screen update that causes the screens to flash Black/white several times)
- The microcontroller goes back to sleep mode, no code execution and extremely low (almost no) power usage until next midnight.
With this sequence it’s very nearly off the vast majority of the time, only the small clock battery on the DS3231 module keeps it going; then everything else only wakes up for a few seconds at midnight to update the screens. Time will tell how efficient this is, but it should be as good as theoretically possible. The DS3231 battery is meant to hold the time for ~10yrs, when the main battery is depleted the screens will stop updating but time won’t be lost – proper date will be displayed on the first update after a recharge without any need to set the time/date.
The software for writing to the epaper displays leans heavily on the example provided with the displays, but the example assumed only a single display. Since I had limited IO pins and there was no need to update displays simultaneously I modified the library to accept a display index for each function. With this, I was able to put everything on the same SPI bus and share the SD/RAM between all displays, the library just only asserts the chip select line for the display being updated during the overall update sequence.
Mechanically, each display is mounted to a 3D-printed plate that pads out the display to the right dimensions, the plate also has screw bosses where the connector boards are mounted. Although the display sizes were very close to the right size, it was unavoidable that some non-displayable area of the panels showed through the front of the calendar frame. To make this look better I made some vinyl frames in a metallic brass/gold color to cover these margins.
(Note: Dates don’t necessarily correlate with actual time/progress since the date was adjusted many times during testing. I also tried several different fonts/styles before deciding on the “FRI FEB 16” format.)
CPU PIN | Function | Connection |
0 | Serial Prog | Prog cable |
1 | Serial Prog | Prog cable |
2 | ClkInterrupt | RTC |
3 | RAM CS | Epaper #1 |
4 | EPD2 CS | Epaper #2 |
5 | ClkReset | Pushbutton |
6 | DateDown | Pushbutton |
7 | DateUp | Pushbutton |
8 | EPD2 Busy | Epaper #2 |
9 | SD CS | Epaper #1 |
10 | EPD1 CS | Epaper #1 |
11 | MOSI | Epaper all |
12 | MISO | Epaper all |
13 | LED/CLK | Epaper all |
14 | EPD RST | Epaper all |
15 | EPD1 Busy | Epaper #1 |
16 | EPD DC | Epaper all |
17 | EPD3 CS | Epaper #3 |
18 | SDA | RTC |
19 | SCL | RTC |
GND | GND/VSS | all |
VCC | VCC | all |
Cubby Hole Toy Organizer
Another quick furniture project, this time a cubby hole toy organizer from maple plywood. The interior is 1/2″ and exterior 3/4″ with a 1/8″ back. Iron-on edge banding was applied/trimmed and then everything got several coats of water-based polyurethane. The holes are made to fit storage bins, the outer columns are slightly wider to accommodate hinges for doors that will be added eventually – the plan is for the doors to be busy boards over all 3 main sections, which may take some time. The center is open for now but may have shelves added.
Bookcase
Quick bookcase build project. First time using this technique, it’s just plywood with dados cut at each intersection. The main trick to this was planning out all dimensions in CAD first then making sure every cut was as accurate as possible, then everything went together like a puzzle and made solid glue joints. It took many rounds of filling, priming, and sanding to hide the plywood texture. After paint was complete I added off-the-self legs.
Jacuzzi Hardware Powdercoat
The jacuzzi tub the house came with is big, grey, and (according to a scan of the manual I found) able to pre-fill via a phone call to its land-line modem* – if only land lines still existed. Mechanically though it’s fully sound and there’s no reason to replace it. Doing so would be a major expense even before factoring in the chaos it would create – one wall of the bathroom would need to come out, at a minimum. Much better for now to just freshen up the appearance.
A big part of the objectionable appearance was that the brass hardware (even if polished rather than corroded) doesn’t fit with either of the last two remodels the bathroom has undergone; one from previous owner, one from us. The hardware isn’t available anymore in any color, and paint would quickly scratch off, so this was a great excuse to try powder coating. I picked up a $5 toaster oven, power coat gun, and grey powder coat. Results look great and it seems like it will be plenty durable.
*Replacing/Interfacing to this with an ESP/Arduino/Raspi may be a rainy day project.
CNC Lake Coffee Table
Continuing with the first batch of wood from the sawmill and along with the other furniture changes it sparked the idea to make a new coffee table. The previous table had been passed-on from the previous owner of the previous house, nothing special about it, overdue for replacement. There’s a nearby lake I wanted to incorporate into the design, and by far the toughest part of this project became obtaining its bathymetric data. The entity that controls the lake was helpful with a records request but ultimately their best data was a medium resolution plot, shared via pdf. There were some hints from various navigation and fishing apps that better data might be out there, but after a lot of messing around with importing and converting this turned into a dead end. I eventually resorted to sending the pdf provided by the govt through an image vector tracing tool, followed by many hours of manual cleanup. This gave a single contiguous vector curve for each depth increment that I could then assign to a CNC machining operation.
I tested the CNC programming on a scrap piece of plywood before sending the oak slab through. The table is the full 4ft width of the CNC but wider than the CNC’s depth. To get around this problem I ran the carving on the middle section of the table before completing the full slab glue-up. When the full slab was together I traced the large radii using a yardstick as a compass and connected these with smaller corner radii. This outline was cut with a jigsaw before being belt sanded and rounded over with the router. Then final sanding and finishing. I cut two small sections of steel angle and secured them to the bottom of the table across the slab joints with screws in slotted holes. This will help hold the table flat while still allowing some seasonal wood movement. Last step was attaching some off-the-shelf hairpin type legs.
Side Table and Lamp
The first batch of wood from the sawmill was getting dry enough for use and we were planning to replace the den sofas; to go along with this change a side table would be needed. At the same time I also created a lamp that would house a smart speaker and act as a cover for the phone charging cable from below. A key consideration for this project was cable management – for the table, a 3-conductor cable is routed through the leg, allowing a power strip to be mounted under the table. The power strip has a phone charger, power to the lamp, and power for the smart speaker which all route up through the center of the table, hidden by the lamp. The lamp cord is also hidden within one of the lamp supports. A knob was cut on the CNC router to secure the lamp shade.
Louvered Generator Cover
The generator is still working great but as the side of the yard it’s in has become more polished (trees/undergrowth removed, grass planted, sidewalk added, trailer moved) the generator has started to stand out more. To help it blend back in I created some louvered panels to cover it. The louver design allows for plenty of ventilation from all sides. The panels consist of 1×4 slats secured into 1×4 ends with angled grooves cut via dado stack. The panels corners are joined together at 4×4 posts. The rear panel has a cutout for refueling, the top has a cutout for the exhaust flap (with flashing for heat protection) and half of the front folds down for control panel access.
I also made a similar but much smaller cover to go over the top of the plastic service dome for our underground propane tank.