Update 2/25 – Week 2

This week wasn’t nearly as eventful as last week, but I’m moving along!

I got a temperature/humidity sensor for my Raspberry Pi, just to practice reading sensor data with it. That experiment was successful, and happily, relatively easy! I spent a lot of time rereading basic information about working with Arduinos, and getting the Bluetooth Feather up and running. I couldn’t (or at least, haven’t yet) got my hands on resistors to try out making LEDs blink. I also have a LED ring, but I need to do some soldering before I can use it. I also went and got a physical button and started reading documentation to figure out how that might work. I’m still a bit lost on that, to be honest.

The E-Ink display also came this week, which I spent some time looking at the physical connection between it and the raspberry pi, ideating for a custom case. That part of the project is on hold until I get the button prototype up and working.

On the Raspberry Pi end, I got my bash script for sending a datapoint to Beeminder up and running. This coming week, I’d like to port that script to Python and figure out how to make the button interact with the Bluetooth Feather board.

Update 2/18 – Week 1

I’ve learned a lot of lessons from my first week at this project. I haven’t worked with Raspberry Pi in over a year (since my Designing Humanity Centered Robotics course in Fall 2017), and I’ve never been solely or even primarily responsible for the technical aspects of a project.

Forgetting the major differences between Arduino and Raspberry Pi, I didn’t realize that I was going to need a monitor, keyboard, and mouse at the ready to set up my Pi. So I attempted to get started without any of these things. Yikes.

I banged my head into a brick wall for hours upon hours trying to get this all working last week. The Brown University WiFi uses a security method called WPA2Enterprise, not supported by the automatic WiFi setup program built into Raspbian (my Pi’s operating system). I was plugging the Pi’s SD Card (where the operating system, etc. is stored) into my laptop to edit a document which contains the WiFi settings. This worked to connect my Pi to my phone’s personal hotspot, but not any of the Brown networks. Eventually I gave in and bought an HDMI cord so that I could connect my Pi to the TV in my dorm lounge, and connected my Bluetooth keyboard and mouse to the Pi. Great, but I was no closer to being connected to Brown’s internet!

I started complaining about this problem to my friend Seiji, who told me about wpa_gui, a program that makes setting up WiFi connections much easier. This worked and I successfully connected to Brown WiFi! But I still needed a way to access my Raspberry Pi from my laptop and I could not get SSH to work, which left me in a position where I’d still need a separate display, mouse, and keyboard to operate the Pi. Yesterday I figured out the final problem standing in my way (a missing security certificate in my WiFi setup) and I successfully accessed my Raspberry Pi from my laptop using the Brown WiFi. Whew!

Other things that happened this week: My package with the supplies for my first prototype came, courtesy of Beeminder!

Thank you Beeminder!

After the package came, I was able to 3D-print a case for my Pi, making it much easier to throw in my backpack and work on-the-go

protected, and shimmery!

Now that I’ve got a reliable connection to my Pi, I can get started on the real work in the coming week.

Planning for an initial prototype

Looking to make my vision a reality, I’ve decided to use a Raspberry Pi 3 as the hub for all of this hardware. I hope to both run the display and Beeminder API calls from it (essentially, the Raspberry Pi will make something happen when the button is pressed, in this case telling Beeminder that I’ve completed my task) .

I think that the most sensible protocol to use for the buttons is Bluetooth Low-Energy(BLE). In other living settings, Wi-Fi might make more sense, but since I’m setting all of this up in a college dorm and in previous projects I’ve come across issues with the university networks, BLE will create fewer headaches. Additionally, I’m only planning (at least for now) to place these buttons within my ~100sq ft dorm room, so range and interference isn’t an issue.

I’ve found a few preexisting projects that are serving as helpful guides, especially since I’ve never worked on a robotics/electronics design project before without a team. Aside from of course phi’s dashboard project, which sparked my interest in this sort of project, I’m also referencing this model for bluetooth low-energy buttons made for accessibility applications, and this wifi emergency food button.

I have points of divergence from all of the pre-existing designs I’m drawing inspiration from. With phi’s dashboard, I’m largely hoping to mimic what he sets out to do, but I’m adding this datapoint creation component. The “Pip” bluetooth low energy buttons are build on a now-discontinued bluetooth low energy board. They also have components I don’t think I need, like a buzzer. And they run on AA batteries, making them much bulkier than I’d like my buttons to be. The wifi emergency food button is obviously, run on wifi and not BLE, and accomplishes a singular (and very different) task.

Nevertheless, I’m taking major guidance from these projects. For the dashboard, I think it’s self-explanatory, I’m essentially trying to accomplish the same thing. The “Pip” buttons will help me figure out what hardware components I need, and give me one model for coding to look at. The emergency food button inspired me to really want to design a custom PCB for this project, which I didn’t know was possible on such a small scale until finding this project!

My current plan for how I’m going to spend my time and get from an idea to a working, albeit clunky, prototype(excluding planning and the wait for hardware, of course) is as follows:

1) Get Raspberry Pi set up (SD card, 3d print a case, etc.) and connected to university wifi

2) Make Raspberry Pi successfully call Beeminder API

3) Set up button prototype based on a Feather BLE board

4) connect button prototype to Raspberry Pi

5) successfully transmit some data from Feather to Raspberry Pi

6) get button press to trigger an action

4) Connect these processes to make an API call when button is pressed

I’m realizing I’ve left out the display in this, I need to go read phi‘s documentation a bit more closely, and probably also have the hardware in my hands, before I quite know what to do with this part.

But this alone is a lot of work and feels like a good amount of direction! I’m very excited, see the spreadsheets I’m using to organize myself here. There, you can see my task list and a list of the hardware I’m using.

Starting the Beeminder Button Project

I use a website called Beeminder to track various habits/tasks. What’s special about this app, is that they charge you real-world money if you don’t follow through with your commitments.

Most of the tasks I track, like reviewing Hebrew vocabulary, have an automatic data source. That means that after I finish reviewing with Clozemaster, Beeminder is automatically told that I did my review for the day, and they shouldn’t charge me! But some tasks I want to track (like flossing, taking medication, or doing laundry) would require me to tell Beeminder manually that I completed the task. Often, I’m in a rush, or my phone isn’t near me, or I just plain forget, and I don’t remember to log these tasks.

I saw this post on the Beeminder blog, showcasing a user who tracks various tasks using a physical button. I instantly saw that this would solve my problems and allow me to track these tasks, but when I researched the available options, they were all very expensive. Based on my experiences in the course Designing Humanity Centered Robotics in Fall 2017, I knew that I could make Bluetooth buttons myself much more cheaply (and have more control over the design).

Additionally, I was already inspired to DIY some Beeminder hardware by this post in the Beeminder forum, where another user was building an dashboard that would display all of your goals using an e-ink display.

So in summary, I’m working to build a system where pressing a button will log the completion of a task with Beeminder, and a display that shows upcoming goals. I hope to use this system for more smart-home tasks once I know how to make Bluetooth Low Energy buttons.

It’s really important to me that my documentation for this project is accessible. I don’t have much formal technical background, and have mostly learned from working with people with more experience and the internet. So please, don’t hesitate to comment or ask me directly to clarify if something doesn’t make sense to you.