Automatic Blinds Project

**Update 5/7/13: ** The project is in V 1.0! Here's a pic of the setup:

The blue parts I had to print from my university's 3D printer, which is a MakerBot Replicator 2, I believe. One mounts the servo to the wall next to the window (with the help of some "Picture Hanging Strips" from Home Depot) and one connects the servo arm to the blinds rod.

It works. Kind of.

Problems I encountered:

  • At first I just stuck a "Picture Hanging Strip" right on the servo. This didn't provide enough support for long and the servo would sometimes peel off the wall as it tried to open the blinds. I solved this by printing the blue Servo Mount and putting TWO strips on the back of it. This seems to solve the peeling issue.
  • (BTW, the Arduino enclosure is attached to the wall with just one of these picture hanging strips and that seems to work just fine.)
  • The Servo Mount I originally printed wasn't sturdy enough--the triangular rod that's perpendicular to the wall (out of which emerge the two circular rods that allow the servo to be mounted) broke off. This was an easy fix; I printed one with a thicker triangular rod.

The only problem left to fix seems to be that the servo seems to be weakening over time. I tell it to turn for 15 seconds and during those 15 seconds it doesn't open or close the blinds as much as it did a few weeks ago.

So in the long-term, it looks like I'll need a more durable solution--unless this is just a breaking-in period for the servo. Maybe someone with more servo experience could tell me what to expect? Will the servo continue to weaken over time or will it reach a plateau?


Update 4/2/13: I'm modifying the project objective slightly. Instead of actually pulling the blinds up and down, I'm going to just tweak the little rotating spindle that opens and closes them. This will drastically reduce the amount of force needed, enabling me (I hope) to use a Servo instead of fooling with a DC motor. It will also be a bit less complex, a better starting point.

I took some pictures of the part to be rotated, found at the links below.

The items I'm going to buy will stay the same and can be found in the original post, which is below

---
Original Post, March 2014
---

Background: Hi. My name's David and I'm a 23-year-old Physics major. I've never done any DIY before, so this will be my first real project.

Goal: Make my blinds go up and down at certain times of the day. They should raise gradually in the morning at a time I set.

Plan:

  1. Buy the items in the cart below
  2. Learn to make the arduino turn the motor as specified
  3. Use the 3d Printer at my school to prototype a spool that will serve two purposes: i.) Latch onto my windowsill, and ii.) connect to the servo motor and wind up the string that controls how far up/down the blinds are

Questions:

  1. Will I need anything else to get started?
  2. Is there anything else I haven't thought of?
  3. What do you guys think of my first project? :slight_smile:

Blinds are heavy, you may need a gear motor more powerful than a servo to lift blinds. If instead you want to just open/close the blind slats, then that probably can be handled by a typical servo.

Gear motor yes.
Some limit switches also.
H-Bridge circuit/shield.

SHEEEESH !
Why can't all the posts be this organized ?

Care to post pictures of the blinds or window? That might help with knowing what sort of power will be required to move them..

How will you program them? From the computer when you upload the arduino or from some switches/sensors?

One example of doing it:

Since you're a physic student then you will probably want to calculate the proper string tension .

You need to measure the amount of force needed to lift the blinds, decide what size pulley you're going to use, calculate the required torque and then spec the motor/gearbox assembly from that. Hobby servos are convenient for low torque applications but if you're going to load them on a regular basis you really need metal gears. They also tend not to be geared down very far so they're relative fast and low torque - not ideal for this application. You would probably be better off looking for a DC motor with an integral epicyclic gearbox - they're available with massive reduction ratios. I did a similar project using a motor/gearbox assembly the size of your thumb, that only drew a couple of hundred milliamps but due to a 200:1 or so reduction ratio easily produced the amount of torque I needed. If you use a DC motor (rather than a servo) you will need to use a driver circuit to control it. The usual approach is to use an h-bridge driver which enables you to drive the motor in both directions. You can buy motor driver shields compatible with the official Arduino boards, but you can also get clones with integral drivers such as the Baby Orangutan. These have the advantage of being much more compact which makes your solution easier to fit in your enclosure.

You may want to provide some sort of position feedback since the blind may not raise and lower at a consistent speed. That might be as simple as a limit switch at the top and/or bottom.

If you definitely want the blinds to be controlled by a timer (rather than automatically sensing light level) you will need some form of real time clock. One easy option is to use an ordinary domestic timer to power up the Arduino when you want the blinds to open, and write a sketch to close them again X hours later. Another option is to add an RTC module to the Arduino so that it can maintain an accurate clock itself. Obviously the more you need your Arduino to do, the more development effort it will take to get it working.

What about putting a rotary shaft encoder on the pulley ?

Thanks to everyone for the input! It's helped shape my thinking.

I'm modifying the project objective slightly. Instead of actually pulling the blinds up and down, I'm going to just tweak the little rotating spindle that opens and closes them. This will drastically reduce the amount of force needed, enabling me (I hope) to use a Servo instead of fooling with a DC motor. It will also be a bit less complex, a better starting point.

I took some pictures of the part to be rotated, found at the links below.

I think a continuous-rotation servo will be able to rotate this, and I'm going to go ahead and buy one along with my other parts because even if it doesn't work it's not much money and it's a good investment. But if someone thinks otherwise, please say so, so I'm more prepared for it.

There is another concern with the servo. On the page here... The MicroController and Embedded System Store ... it says, " Servo current draw can spike while under load. Be sure that your application's power supply and voltage regulator is prepared to supply adequate current for all servos used. Do not try to power this servo directly from a BASIC Stamp module's Vdd or Vin pin; do not connect the servo's Vss line directly to the BASIC Stamp module's Vss pin. Always use a regulated power supply." Does this mean that my Servo shouldn't be powered directly from my Arduino? If so, what else do I need to buy?

NeuralNova:
Does this mean that my Servo shouldn't be powered directly from my Arduino? If so, what else do I need to buy?

Yes, it means exactly that. The servo must be powered by a supply which is able to provide as much current as the servo needs. That might be around an Amp for a typical servo if it is heavily loaded.

I suggest you find out how much rotation you need to apply to your blinds control. If it's more than about 180 degrees a standard servo won't have enough travel, but you may be able to find a servo with more travel. For example 'sail winch' servos often support multiple turns. Being able to use a servo with position control will make the project much easier because you will be able to control the blinds position directly. If you have to resort to a 'continuous rotation' servo or motor/gearbox then you would need to add some additional position sensing (such as a rotary encoder on the output shaft) to get positive feedback of the blinds position.

I think a continuous-rotation servo will be able to rotate this, and I'm going to go ahead and buy one along with my other parts

Which one ? (you don't mean one of those little toys that runs off 5V do you ?)
38 oz-in doesn't seem like much and the one you linked is not metal gear. It might work for two minutes and then the plastic gears will strip and that will be the end of that. If there was a counter weight to take the stress off the servo so the load is balance then it might be ok.

Remember the new plan is only to tilt the slats, not lift them - it will need much less torque.

A long time back I used a servo to tilt the slats on a blind. Actually worked pretty well. People could pan my web cam around and then watch the blinds as they opened and closed them. The trick was getting ~2.5 turns on the slat rod out of a .5 turn servo.

http://web.comporium.net/~shb/blindtilt.htm

To go from closed to open, I need to be able to turn 3 or 4 times, which is why I went with the continuous rotation servo. I didn't realize it didn't have position sensing like a normal servo. I'll have to look into that rotary shaft encoder.

EDIT: The Blind Tilt page is helpful, thanks. Good ideas about how to secure the entire setup. Some other things it brings up, though--I'll probably need long extension jumper cables if the servo is to be at the top of the window like that. Or maybe I'll just use some college fasteners to attach the Arduino setup to the wall nearby.

I'll probably need long extension jumper cables if the servo is to be at the top of the window like that.

I just used three conductors of cat3 four conductor telephone wire. I think the run was 12'-15' long. Always supply the servo ~6v.

By the way, a infobit from the Arduino page on Servos:

"Note that servos draw considerable power, so if you need to drive more than one or two, you'll probably need to power them from a separate supply (i.e. not the +5V pin on your Arduino). Be sure to connect the grounds of the Arduino and external power supply together."

(from Servo - Arduino Reference)

This implies that the Arduino should be able to power one Servo without help from a power supply for the servo. If it doesn't work out, I'll snag a power supply for the servo.

As for position sensing... I don't need the arduino to adapt much. It'll be executing the same routine over and over again. So once I figure out the speed needed for the application at hand, I shouldn't need any position sensing.

NeuralNova:
This implies that the Arduino should be able to power one Servo without help from a power supply for the servo. If it doesn't work out, I'll snag a power supply for the servo.

Regardless of what the documentation says, the reality is that even a single servo can easily require more current that the Arduino can safely supply, but you might just get away with it if it is a small servo and only lightly loaded.

For over a year now I've been using an inexpensive ULN2003 Stepper Motor Control Board and 5V Stepper Motor to open and close (not raise) a large mini blind. The shaft of the stepper motor is connected to the original hex shaped - plastic wand using a CNC stepper motor flexible Coupling. The stepper motor and controller is reconciled in a WireMold box with a round hole in the cover plate. I use about an 10' length of CAT5 to connect the stepper motor controller to an Arduino Meg 2560. Finally, I installed a magnet on one of the blind louvers and a hall effect sensor in the wiremold box so that I can determine absolutely whether the blind is open or closed.

Cheers,

Steve

WireMold 3027AE

An arduino probably can move an unloaded 9g size servo, which is commonly included in arduino kits. A continuous rotation servo probably won’t work well in a blinds setup. Hobby King has some fairly inexpensive sail winch servos like below. This one apparently turns six rotations and has a lot of torque…