RoboBlinds Part 2


    I finished making mounts and double universal joints to connect stepper motors to my window blinds. Those control the rotating rods that turn the blind slats. Three motors are controlled by one Raspberry Pi Pico W for each set of windows. I've programmed it to move the blinds one window at a time, one motor at a time, to ensure I don't overload anything. In reality I think each stepper only pulls like 500mA, so I could probably move all three blinds simultaneously. But why risk it? That was all pretty straight forward. The next part was much more difficult for me.

    At first I just had a button on my wall to open or close the blinds, but ultimately I wanted them to be voice controlled. AI voice assistants have been around for a decade now, but I had never messed with them before. I looked into controlling my Raspberry Pico with Google Home and Alexa. It seems like the two main options these days are MQTT and Matter. MQTT is much older, but seems to work just fine. Matter is newer and seems to be simpler to setup, but I couldn't find a matter client for Raspberry Pico. But I did find an MQTT client for RPico. In MicroPython. I've avoided using MicroPython in the past, but for something this simple and with a plug-in power supply, it couldn't hurt.

    I found a nice tutorial that showed me how to connect to a web dashboard hosted by Adafruit, so I could log into a website and push a button there instead of pushing a physical button on the wall, but that wasn't really what I wanted. So I started looking for info about building my own Alexa app. I found a lot of resources, but as is often the case with electronics hobby projects they all seemed to be extremely incomplete or overly specific or out of date. And of course there were twenty how-tos about Raspberry Pis for every one that was applicable to Raspberry Pico. So over the course of a week or so I cobbled together information from about half a dozen sources and eventually got it working. I felt like that compiled knowledge was worth sharing so I put together a how-to video walking through the whole process step by step.

    I ended up creating three different Alexa Skills, one to control the bedroom blinds, one to control the living room blinds, and one to control both at once. It all works pretty nicely. I can schedule tasks, Alexa calls them "routines", so the living room blinds open automatically at sunrise and all the blinds close automatically at sunset.

    I'm just controlling the blinds with stepper position. I don't have position feedback. That hasn't been a major problem so far. Whenever the system powers on it assumes the blinds are closed. If they're not, then I added in some manual override commands to reposition them by their normal range of travel. If I'm not home to correct them, I thought of a failure mode where they lose power during the day multiple days in a row. In that case they could drive too far open and pop the gears. That doesn't seem very likely to me. And I thought of multiple position feedback options to compensate for that, but none of them seemed worth while. I think I'm happy with the current state of this project.

    The obvious future upgrade would be to add a second motor to each window to actually raise and lower the blinds, but that would definitely require position feedback. The windows are 11 feet tall and weigh a lot. If I used a large stepper motor, first off that would be large and heavy and expensive, but also as soon as I de-energized the motor the blinds would fall right back down. So I need an actuator that's not backdrivable. I bought a cheap brushed DC motor with a gearbox and that was more than capable of raising the blinds, but they get heavier the higher they go and motion is extremely nonlinear and inconsistent so I would definitely need position feedback for decent control. Blind timing would not work. But I can't think of anything fool-proof and also neat and compact. I don't want limit switches at the top and bottom with wires running up the walls. I thought about dying or painting the blind cords black at the top and bottom and using some sort of photosensor to read those positions. I might try that. If I get bored.