-
Code Update: Reliable Buttons
09/07/2024 at 01:03 • 0 commentsI spent most of my day working on getting reliable button presses. Normally I'd just slap the denounce Arduino code in and move on, but it doesn't work with analog readings. I spent some time getting it to work with the realtor array that feeds into analog pin 0. That was absolutely necessary because I couldn't use buttons to toggle variable states as they were completely unpredictable. Even the "right" button, which ties to ground, was not always a consistent resistance value. I ended up checking for a range of values for each button, and then adding a denounce routine to thise readings. I finally have reliable button press detection. Next up is long press button detection, which I'll use to enter menus for adding and editing menu items. After that I still need a way to toggle checklist items and mark them as done or not done. I almost had that working, but the unreliable button presses screwed that up. That took way too long to figure out. I finally used the serial plotter to show the jitter in the analog reading and prove my theory. I should have started there...
I still have to set up routines to navigate between lists and the items they contain, then apply the check mark toggle to those. After that I need to refine the LCD refresh routines as refreshing the display too quickly causes the display to be very dim. I had some luck clearing and updating the idle screen on every 50th cycle that the routine was called. The buttons were still very responsive and the display looks great.
I sorted out backlight control the other day, and can add that in when I sort out the sleep routines. That should be easy enough. I eventually want to add a real time clock and use that for display the time as a screensaver, and setting up alarms, timers, and event reminders. Cramming all the info and settings into such a small display is challenging at times, but doable.
I want this device to have all of the basic time and task management features I need, while remaining simple and reliable. The end goal is to use something like a custom ESP32 board to add all of the hardware features I could need, such as hosting a webserver management page and sending alerts over Bluetooth.
For now, I'll be happy to get a usable device that I can carry and use every day. Good progress has been made, despite my lack of programming skills and experience. Baby steps.
For those who insist on comne ting on this project to tell me to just use a smartphone or learn to program them instead: you've missed the point and I have no patience for that. Keep your ignorant comments to yourself.
-
Code Update: Cleaning Up
09/04/2024 at 23:19 • 0 commentsI spent a little time today to start a new Arduino sketch in order to clean up the code and slowly organize things. I added a commented out To Do list at the very top. Ironic, since I'm using a digital checklist to manage the creation of another digital checklist. I wish this project was done already so I could start using it... I created the custom check mark character for the 16x2 LCD shield and it looks fantastic. I still haven't gotten the function to toggle the check mark working yet, but I have one to work with. I'm using some code for menus that I found online, but I don't really like it. The example provided works, but not very well. I can scroll left and right between lists, and up and down between 2 items within a list, but that's about it. The list items are hard coded into If statements, which is a nightmare to think about with longer lists. I need an array of lists items that are tied to each list, and can be operated through with a button press. Shouldn't be too difficult to set up. I just have to sit down and lay out the entire workflow and then code it. I'm pretty bad at coding, but good enough to slowly piece things together. If I were a proper programmer, which enough experience, I could probably have this done in a single day. I also got the backlight control working, and discovered that many of these LCD keypad shields have a flaw that can draw tons of current from the Arduino pin and burn the processor out. I found code to test for this, but it's usage was none obvious and the documentation seemed to assume you already know how to use it, which I hate. I'm aware of the problem and will deal with it should it arise. For now, I can at least run a timer in the backlight that turns off the backlight after a set delay. It occurs to me now that I'll need a settings menu to adjust the backlight timeout, among other settings.
Something else that occured to me just now is that I'll have to store persistent data in the EEPROM directly, so changes won't be lost if power is lost. This is fairly easy to do, but I have to remember to do it. My old Arduino water heater co troller has this feature and it was awesome.
After the coding is done, I'll need a battery for the prototype device so I can take it with me and use it out in the real world. I'm thinking of looking for some sort of small USB battery bank that I could strap to the device and just leave plugged into t it at all times. It will be a very bulky and heavy device, but will work.
I have much work to do on this project, but I am making progress. I've had a fair bit of interest in this project over the years, and it's a device is use every day if it is done well. So far progress has been very good lately. I hope to have the core navigation features implemented by end of day tomorrow. I'm exhausted tonight and am off to bed early. It's new board game day and today's new game is The Spill, a game about managing the disaster that is a leaking oil drilling rig in the ocean, as it pollutes the water and poisons marine life. Quite a lovely looking game. I am too tired to even play that tonight. A busy but good day.
-
First Working Prototype
09/04/2024 at 14:16 • 0 commentsYesterday I finally dug out some hardware and started coding the digital checklist. I have two Arduino Uno boards and two 16x2 LCD boards with buttons. I dug them out of storage and got one working. For initial hardware testing I used the Arduino game The Lonely Cottage from a games collection on GitHub. It's actually quite a pleasant little game. The low refresh rate and terrible buttons make for a not so great experience, but it's quite cool overall.
After getting the hardware working, I found some examples LCD menu libraries to start testing with. The goal is to have the name of the current list stay at the top of the screen. With the current menu item below that. Scrolling left and right will switch between lists, and up and down scrolls between list items. The select button simply toggles a check box to the left of the item, or moves it down to a section for completed items. I've not quite decided on that yet. Using a checkbox would use up one of the limited character spaces though. I'm considering upgrading the display to a 20x4 character LCD to allow for multi line checklist items and displaying more info at once, such as a name, phone number, email, and address for contacts. The larger ddisplay would make the device larger, which would allow more room for extra components such as a flashlight, extra buttons, and larger batteries.
Speaking of batteries, I'm leaning most towards 4 AAA batteries or a lithium ion pouch battery. It must be easily replaced to prevent the device from becoming landfill fodder. AAAs will give the most longevity. Powerex makes excellent rechargeable versions as well. I could eventually integrate charging circuitry into the main board, but that's a feature for a future revision. For a battery door cover I'm considering just having a PCB back panel that screws in place. 4 AAA batteries should last quite a long time of the power savings and deep sleep features of modern microcontrollers are taken advantage of.
As far as the coding goes, I've gotten 3 lists added with 2 list items each. I can scroll left and right between the lists and up and down between list items. I need a way to toggle the tasks done and undone, as well as add, edit, and remove tasks and lists. I'll most likely start with text entry by having the user scroll up and down between characters and select them, moving the cursor to the right after each selection. I'll have to impose a character limit as well, since the display can only handle 16 characters across. To add a new list I'll have the user scroll to the left from the first list where a "Add New List" option would live. This would create a new list in the array of lists. At the bottom of each list will be "Add List Item" where the user can add new items. Long pressing the select button could be used to delete items. An index of all lists, directly to the left of the first list, could be used to quickly navigate to a desired list, while long pressing select would allow for deletion or re-ordering of lists. The user interface design is nearly complete, with the various features just needing to be coded and tested. An auto off timer would be added as well. An RGB backlight would allow for color coding lists and menu items. This device could be as simple or complicated as I want it to be. I want to be able to add as many truly useful features as I can to make it as useable as possible. All of the obvious features will be implemented right away, with various luxuries added later, if at all. I'd like to at least have a timers and contact storage. This device could become an all in one every day carry if done properly.
For the hardware, I'm considering using an ESP32 or Raspberry Pi Pico W. I need decent processing power to ensure the device is responsive, and want hardware with wireless functionality to eventually add a web server that allows for managing the device wirelessly. I'm using an Arduino Uno currently, as that's what I have on hand, but it doesn't have enough storage space or RAM for what I want to do. I'll continue testing on it and using memory saving tricks as needed, but will eventually upgrade to a more capable microcontroller when the time comes. I'd like to have some mass storage capabilities, but adding something like a micro SD card adds significant cost and complexity. I'll likely add the largest external EEPROM that I can find and use that to store lists and various data. The device settings would likely live on the internal EEPROM and all user data on the external. I've used an Arduino's EEPROM to save state data between power cycles for a water heater controller and it works great. I just have to worry about write cycle longevity. I could use socketed EEPROM chips for persistent data storage to allow for easy replacement in the future. I suspect most people will have standard checklists, such as grocery lists, that will reuse much of the same data over and over again. Moving an item to the bottom of the list and putting a check mark by it would allow it to be unchecked and reused. I plan to add a piezo buzzer to allow for audible notifications such as timers for reminders. A small vibrating motor could be added for use in very noisy environments as well. Large battery capacity would hopefully allow the device to run for multiple days on a set of batteries. For industries like boating and manufacturing, ruggedized version could be made by epoxy potting the entire device and using a sealed membrane over the keypad buttons. I'll design the hardware with provisions for epoxy potting, as well as sealing the battery cover. I personally want a device tough enough to take with me on the roof of a house, under water while working on boats and docks, in a pocket while welding, and on off road bicycle adventures, such as bicycle touring.
With any luck, I'll get the software finished soon and can start working on designing custom hardware. The last step is having a custom board manufactured with the display, all buttons, microcontroller, external EEPROM, and battery mounts on a single board, with a PCB case to house and protect it all. AAA batteries will make the case thick and heavy, but I suspect the kind of person who would use such a device would appreciate the heat and quality build.
That's all I've got for now. I've got tons more work to do on the software, some shrinking to do in the initial prototype, and then the building of a battery powered prototype. I've not given up on this project. It's been on my mind on and off for many years now. I finally have the skills, time, and confidence to really start bringing it to life. I really need such a device now, as I start a business. This may be one of my first offerings at some point as well. I'll still keep the design open source, but I also want to make sure that the average non technical person can get a hold of them as well. I know how frustrating it is to want one of these niche devices so badly and be unable to get one.
-
Resources For Prototyping
07/08/2022 at 22:02 • 0 commentsI've been doing some research and just making some quick decisions to get things moving quickly. I'll include some useful links here that should help me get the code going for this.
Programming Language: Micro Python
Programming IDE: Thonny
Development PC: Atari VCS
OS: Ubuntu 20.04
SD Card protocol: SPI
LCD protocol: I2C
Hardware order has been placed. The prototype hardware is officially on the way. The biggest hurdle now is finding the time to build and program it. Once everything is working, I'll design a custom PCB and get a few prototypes made.
-
Raspberry Pi Shortages
07/08/2022 at 21:22 • 0 commentsIn light of short supplies and scalping, I am going to change the hardware from the Raspberry Pi Zero family of boards to the Raspberry Pi Pico family. Preferably the Pico W for it's wireless capability. As I have a few Pico boards on hand and can get more, I will build the first prototype around that. The new end goal is an all in one device built around the RP2040 chip. I haven't touched this project in a few years, but I'm getting my cousin into programming now and need some projects to work on and some way to organize my various tasks. I feel the Pico is a better option as it can still have advanced features, but is far more power efficient and responsive.
The current goals are as follows:- RP2040 based
- Rechargeable batteries
- Easy to read display with backlight
- Physical button navigation
- Either built in SD flash, or SD card slot
- USB connectivity
There are many features that could be added in the future, but the initial prototype simply needs to hold multiple lists of tasks and allow them to be marked "Complete" or "Incomplete." Aircraft pre flight checks come to mind. I'm getting into sailing and will need a checklist system for that as well. The final hardware iteration will be ruggedized for such use cases.
I have some extra project funding this pay so I'll go order the hardware now and finally get started.
-
Possible Feature: Wireless Sync
04/19/2022 at 21:19 • 0 commentsDespite my insistance on managing feature creep, I think this particular feature could be incredibly beneficial. The hardware is in place, and it could be implemented in software after the initial prototypes are useable. The idea is to have a unit be able to sync changes to a server over either USB, wifi, or Bluetooth, when a server connection is available. Modifying list items and lists is a core feature on the device itself, but there will be times where a copy and paste from another device would be ideal.
A secondary function of such a sync system, the one that got me thinking about this in the first place, is to have multiple devices sync lists in real time, enabling cooperative work on large scale projects. One person could complete a task, mark it done, then the change would be synced and duplicated on all other devices. This would help avoid duplicate work and wasted time trying to determine if a task has been completed.
With so many big projects coming up, as well as the complex nature of the systems I work on at my new job, the Raspberry Checklist project is going to become a priority very soon. More updates soon.
-
Pimoroni Pico System
11/08/2021 at 12:54 • 0 commentsI'm typing this up on my Pi 400 in the Pidock 400. It's so nice to have a Pi powered laptop. Love this thing. It's gotten me motivated to get these projects going again.
Recently Pimoroni has released the Picosystem, which really caught my eye. I've really enjoyed the Raspberry Pi Pico since I picked some up when they first released. I actually got 4 from the very first shipment that Microcenter in Ohio got in. I gave one to my cousin to manage the power and safe shutdown, but kept the other 3 to tinker with. They went out of stock very quickly after the release, as all Pi products seem to do. I mention this story because the Pico instantly became my favorite microcontroller, and it reminded me that it's worth picking up certain things I really want as soon as they're available. I ordered a Pi Zero 2 W as soon as I heard of it, and I have one in for this project already. That will still be used at some pint in this project, but I haven't decided on the hardware for that just yet. The battery has been a problem for me. In the mean time, I've decided to order a Picosystem as soon as I can ad start developing for that. I'm weakest in the software side of things, and having a ready made system to program on will speed up development for me significantly. It's a very nice system too. Aluminum case, beautiful PCB front, plenty of buttons, great little screen, speaker, battery, and small form factor. It's nearly perfect for this project, aside from lacking a Pi Zero. It isn't something that I would tinker with for a little bit and put on a shelf either. It appears to be worthy of adding to my every day carry. I'm working on learning PyGame for other projects, so having this to work with helps me there as well. It seems to be a perfect solution to many of my problems. I'll order one of these this Friday if there are any left in stock.
I always find myself amazed at the following this project has gained. I feel lie I've been keeping people waiting for a very long time on this one, so it feels good to make some progress, even if only in the research department. Hardware for both the Picosystem and Pi Zero versions will be ordered this Friday.Hope everyone is well and making good progress on their projects.
-
Pi Zero 2 W Has Arrived
11/01/2021 at 22:55 • 0 commentsThe latest Pi has arrived from Adafruit today. I've not done anything with it yet, and I likely won't for a little while. I haven't gotten my Pi 400 in yet, which will be the system I'll be using for all my development. I don't have the display for this project yet either, but I will order it in just under two weeks on pay day.
I'm still trying to decide on the display for this project. Part of me wants to use the super simple character LCDs, another part wants an OLED. I've got time to decide, but I'm more interested in why this decision is so difficult for me. I'll sort that later.
I may get the new Pi set up and running so I can start playing around with it soon. Once the Pi 400 is here, I doubt I'll do much with this for a while.
-
Another Step Closer: Interface Choices Narrowed
11/01/2021 at 01:33 • 0 commentsThe big announcement is that I purchased some new hardware that will make development far easier for me. I picked up a Pidock 400 and a Raspberry Pi 400 kit for my PiCarts project. I got it to consolidate all of my project work onto one system that's more portable than my laptop, which now has a broken screen. I can use the Pi 400 as a USB keyboard, and the display on the Pidock is standard HDMI, so I can use it with the Pi Zero. This will make it easy to take all my project materials with me in a single laptop bag, so I can work anywhere at any time. Setting up my laptop and digging out all the equipment has been a huge obstacle for me, so I just don't do it.
I'm amazed that people still keep liking and following this project. I understand why though. There isn't really much else like it out there. I've recently ordered a Pi Zero 2 W, which may end up in this device. It's actually fast enough to be used as a very basic personal computer, unlike the original Pi zero w. I really want this thing to be more than just a checklist. My idea for it is basically a general use pocket computer that can be used as a standalone checklist. I've been working with the Raspberry Pi Pico lately and could use that instead. It's $4, which is nice, and plenty of power. I very well may make both versions in the future. I still need to decide on a screen. I'm leaning towards e-ink displays these days, though they tend to be more expensive. Battery life with a Pico and e-ink display would be fantastic. As the Pico can be used as a USB mass storage device, I might be able to just drop the text file containing the lists onto it and go. No OS, no SD cards, no shutdown procedures. The Pico could easily run the screen, external data storage, an LED for flash light, and much more. I'd love to add temperature, humidity, and atmospheric pressure sensors eventually for keeping an eye on the weather and such. Gotta watch out for feature creep though.
I just discovered this setup from a Adafruit that is almost exactly what I want. I don't know how it would handle pocket lint and such, but it would be perfect for a prototype. It's out of stock currently, but I can get the pieces individually instead of the kit. I'm already planning to learn pygame, which is recommended for this display. The other option I'm considering is this e-ink display, also from Adafruit. It's a three color display: black, white, red. They also make black, white, and yellow, as well as a plain black and white version. There are no buttons on these displays, but they could be added later. The OLED option above is actually the better of the two, as it will enable me to actually get this project done. Less obstacles to tackle.
While searching through various Pi stuff, I came across a third option that I really enjoy: The Pirate Audio Speaker and Display for Raspberry Pi. It has a nice little screen, buttons, a speaker, and DAC so it can playback audio. It's just a 1 watt speaker, but it would add sound effects to the device. I really do want something with buttons on it and this is a great option.
I've found another great option here, again from Adafruit. It's actually a LoRa module with a small screen and three buttons. I find this one quite fascinating as it would add long distance wireless communications. A checklist that can be used as a communicator. With only three buttons, that might be hard to use, even as a checklist. I'll still likely pick up a few and tinker with them. I'm putting together a large kit of Pi hardware for testing and to just play around with. This would be a great addition. I could set up the Pi to connect to a smartphone through Bluetooth for text input and such. Basically make a LoRa modem for smartphones. It would be great for communicating in places without cell service, such as underground or the middle of nowhere. Feature creep though...
Alright, I think I've looked at enough displays and such. The current leader is still the OLED with the joystick and two buttons. I'll start by ordering that and a few others. Once I have that display working and understand how to program it, I'll get some checklist code up on GitHub. My top priority project is PiCarts, so I don't know how quickly I'll have a working prototype of the Pi checklist working. I'm closer than ever having decided on the hardware and ordered the development hardware. I really like the idea of being able to plug this into a display and run a full computer. The core feature will be the checklist. Once that is done, other features can be added so long as they don't interfere with the checklist aspect.
I suppose I should touch on making this device portable and pocket safe. I was thinking about using a rubber gasket of some sort sandwiched between the two boards to keep lint and such out. I can always coat the boards in a waterproof coating, the name of which has just escaped me. Add in a Pi Zero case, and that would be pretty much ready to go. I still need to sort out battery power. I'm sure there's something out there. Just need to do the research. It could possibly be powered off a smartphone, but that's not an ideal situation at all.
Next paycheck I'll see about setting aside the funds for the display for this project. I may even just get a few, since I have a few Pi zeros hanging around doing nothing. Might make myself a little info board out of one. The new Pi Zero 2 W is on the way, I've got really nice development hardware for multiple projects, and some funding is on the way. Expect some more updates on this project as well as a hardware prototype soon.
-
Found Some Software Guidance
05/22/2021 at 15:26 • 0 commentsWhile browsing HaD, I found this Arduino menu code. It's pretty darn similar to what I want to do for the Pi, but in C++. I could switch the hardware out for an Arduino of some sort, or I could learn from this and write my own menu in Python for the Pi. I could still use one of these checklists, and I know other people who would enjoy it. I'm almost good enough at programming to finish this project, but I have other projects to finish first. Like the custom electric water heater controller I've made for the camper. That has taught me much about programming. I'm finally at a point where I could sit down and actually get this working now, just need the time and energy. I may eventually make Arduino and ESP32 based checklists as well. I like the Pi Zero W though, as it gives a full linux computer if needed. You could use you digital organizer for software development or light tasks if needed. Not sure where I will go with this, but I'll explore it later. This is one of the very few non-essential projects I decided to keep alive due to the amount of following it's somehow gathered. People seem interested, and I am too. As my life gets more complicated, this would become more useful.