This is my first time posting on the Arduino forums, and I haven't actually gotten an Arduino board yet, but I'm very excited to get into some home automation. My project idea is very grandiose, as I'm sure everybody's has been at some point, but I'm hoping it's not too daunting. I would like to put thermo-sensors in every room of my house, and use that data to control the heating/cooling to provide the most control and comfort as possible. To gain more control over the system I want to use motorized duct dampers to keep the air moving only to where it is needed. So that's the grand plan, but obviously the devil is in the details. Since this is such a large project, I may just keep every post in this thread, depending on the etiquette here. So the first task I want to tackle is making my own motorized duct dampers.
These are my requirements for my motor
-Able to turn to a specific location every time
-Powered off brake (Holding brake)
-Low power usage
-Low maintenance
So after some searching it appears that either a servo motor or a stepper motor is my best bet. I really like stepper motors because they seem to be more maintenance free in that they don't have any brushes, the only problem I have with them is that they don't have any feedback loop. Server motors seem like an ideal fit, but I'm not sure of the longevity of those.
The next question would be the powered off brake. Would it be better to use an EM brake, or using a worm gear. I'm really liking the idea of using a worm gear since EM brakes can be pricey and the spring ones can be large.
With that said would it be best for me to try to create my own servo using a stepper motor with a feedback loop and a worm gear, or rig a worm gear into an existing servo motor. I know the gear ratios for a worm gear aren't ideal for most applications but speed is not really a concern with this project.
I really like stepper motors because they seem to be more maintenance free in that they don't have any brushes, the only problem I have with them is that they don't have any feedback loop.
Some do. Some don't. For the don't ones, you can add encoders to provide the feedback.
Server motors seem like an ideal fit, but I'm not sure of the longevity of those.
The size of the servo motor will be an issue, too. Specifically, the ability to generate the required torque.
The next question would be the powered off brake. Would it be better to use an EM brake, or using a worm gear. I'm really liking the idea of using a worm gear since EM brakes can be pricey and the spring ones can be large.
What do these dampers look like? Do they close (or open) automatically?
Motorized dampers exist, so you could avoid the need to build your own and just concentrate your efforts on sensing and controlling the dampers. A brief search shows that they're not cheap though.
Some do. Some don't. For the don't ones, you can add encoders to provide the feedback.
Do you happen to have an example of a stepper motor with a feedback loop prepackaged? I was thinking of using either a pot or rotary encoder for the feedback, but I didn't wan't to overload the arduino board trying to control a bunch of motors, probably 15-20, I haven't actually counted yet.
The size of the servo motor will be an issue, too. Specifically, the ability to generate the required torque.
That is what I was thinking as well. Ideally it wouldn't need much torque. If the duct damper has very low rotational friction, and there isn't any air moving over it, then it won't need much torque. Any additional torque needed for the worm gear is another story.
What do these dampers look like? Do they close (or open) automatically?
The motorized dampers on the market are either normally open, or normally closed. I don't particularly like this idea and would rather be able to set and angle and leave it there for a while. I have heard from somewhere, and I'd have to confirm is that you don't want to restrict more than 20% of your furnace air flow. Using a normally opened/normally closed type motorized damper would make this difficult to do and still be able to control the air conditioning in every room. Would I'd like to do is basically add a motor to a manual damper, something like this http://www.homedepot.com/h_d1/N-5yc1v/R-202907131/h_d2/ProductDisplay?catalogId=10053&langId=-1&keyword=duct+damper&storeId=10051#.UPbV8ifXa64 that I can control the angle of, and having it locked, in a no-power state.
Motorized dampers exist, so you could avoid the need to build your own and just concentrate your efforts on sensing and controlling the dampers. A brief search shows that they're not cheap though.
They are very pricey, easily over $100 and as I mentioned above, they are all either normally opened, or normally closed. This is less than ideal for what I'm trying to do.
i suggest you get an an arduino, some servos of various sizes, and a 6v power supply, and start experimenting. Also look at hvac dampers that are available to find inexpensive ones that might fit your needs, or get ideas for making your own.
i suggest you get an an arduino, some servos of various sizes, and a 6v power supply, and start experimenting. Also look at hvac dampers that are available to find inexpensive ones that might fit your needs, or get ideas for making your own.
That's what I'm thinking as well. Not sure if I want to get the uno or maybe a mega. The reason is that the servo library for the uno is limited to 12 servos. I'm gonna need 14-15 servos if I ever get this project going. I've also heard it might be easier and cheaper to just buy 2 unos and link them somehow. Anyways these are the dampers that are currently in my ducts.
So I've found some worm gear boxes over at Pololu:
They are pretty cheap, in both respects, but I think they just might work. I wanted to just buy my own worm gears, but they get pricey really quick and having to make my own gearbox doesn't sound fun.
I think I'm gonna get this servo
Its the highest torque one that I could find at a low price point.
I'm thinking I should be able to get these things before the end of the week. Any other ideas are welcome.
For $40 you can get a stand alone servo controller like the ssc-32 (32 servos) to attach to the arduino.
Do you know of a good sensor shield, something with 32 I/O pins. I still might just make my own servo with the arduino and a pot on each motor.
So I got the Arduino, and battery packs and I'm just waiting for the servo. I've been looking into the making my temperature sensor wireless nodes. At first I was thinking that the xbee was going to be my best bet, but after doing some more research, and messaging a few members, I'm thinking that RF will work out well. I have seen a lot of people using the RFM12, or RFM12B, but I think that I can use the RF-2400 for a good amount less money. What do you guys think.
I have attached a schematic of what I think should work for a nice low cost, low energy usage RF node. Is it alright to use the reset pin, P1, for reading the data from the temperature sensor?
Another question that I have is how long can you sleep the ATTINY85 for, I believe I saw somewhere it was 9s.
Lastly jeelabs uses a p-mosfet to shut down the RFM12. Would it be worth it to use the ATTINY84 to have more output pins for adding a p-mosfet?
Thanks for taking the time to read my silly questions.
So I finally got the servo motor in the mail today. I couldn't wait to hook it up. The setup was really simple, the only thing I found odd was that when I started I was able to drive the servo off of pin 13. After a couple of demos I couldn't use pin 13 any more. So I've been using pin 2 to drive the servo now instead. Any ideas about that?
This is my very simple code. I used java to communicate with my COM4 port to test out the servo. It works great so far. I'm currently trying to figure out what the range of this servo is, and I haven't found a datasheet for it yet. I have the TowerPro 9805BB.
So the next step is going to be making this thing wireless I think. I may even just use my laptop now to take commands over the LAN and send that data over com to the arduino. That way I can program up an android app for my tablet.
#include <Servo.h>
Servo myServo;
int incomingByte = 0;
int nPulseWidth = 1500 ; // 1500, defined in servo.h
void setup()
{
myServo.attach(2);
// the library sets all servos to 1500 ms pulse width by default, this is center for a steering servo
Serial.begin(9600);
Serial.println("Completed setup");
}
void loop()
{
if (Serial.available() > 0) {
incomingByte = Serial.read();
if(incomingByte>0 && incomingByte<180){
nPulseWidth = (int) (incomingByte/90.0*1000 + 500);
myServo.writeMicroseconds(nPulseWidth);
Serial.print("Sending Servo: ");
Serial.println(nPulseWidth,DEC);
}
}
}
Servo test code for use with the serial monitor that can be used to find the hard stop servo control limits. I've operated servos over four conductor cat3 telephone wire (control, +6v, ground, and spare wire).
// zoomkat 10-22-11 serial servo test
// type servo position 0 to 180 in serial monitor
// or for writeMicroseconds, use a value like 1500
// for IDE 0022 and later
// Powering a servo from the arduino usually *DOES NOT WORK*.
String readString;
#include <Servo.h>
Servo myservo; // create servo object to control a servo
void setup() {
Serial.begin(9600);
myservo.writeMicroseconds(1500); //set initial servo position if desired
myservo.attach(7); //the pin for the servo control
Serial.println("servo-test-22-dual-input"); // so I can keep track of what is loaded
}
void loop() {
while (Serial.available()) {
char c = Serial.read(); //gets one byte from serial buffer
readString += c; //makes the string readString
delay(2); //slow looping to allow buffer to fill with next character
}
if (readString.length() >0) {
Serial.println(readString); //so you can see the captured string
int n = readString.toInt(); //convert readString into a number
// auto select appropriate value, copied from someone elses code.
if(n >= 500)
{
Serial.print("writing Microseconds: ");
Serial.println(n);
myservo.writeMicroseconds(n);
}
else
{
Serial.print("writing Angle: ");
Serial.println(n);
myservo.write(n);
}
readString=""; //empty for next input
}
}
laadams85:
the only thing I found odd was that when I started I was able to drive the servo off of pin 13. After a couple of demos I couldn't use pin 13 any more. So I've been using pin 2 to drive the servo now instead. Any ideas about that?
Perhaps you have overloaded the pin by exceeding it's current capability, and the driver has burned out. Does that pin work at all now?
Perhaps you have overloaded the pin by exceeding it's current capability, and the driver has burned out. Does that pin work at all now?
That's what I was thinking but I'm not sure how that would happen, its just the signal wire. What is an easy way to test that pin? Can I wire that pin as an output and wire it to pin 12 to test it?
Also do you think its the circuitry that's shot or just the chip. I should be able to just replace the chip for cheap.
/*
Blink
Turns on an LED on for one second, then off for one second, repeatedly.
This example code is in the public domain.
*/
void setup() {
// initialize the digital pin as an output.
// Pin 13 has an LED connected on most Arduino boards:
pinMode(13, OUTPUT);
}
void loop() {
digitalWrite(13, HIGH); // set the LED on
delay(1000); // wait for a second
digitalWrite(13, LOW); // set the LED off
delay(1000); // wait for a second
}