I'm new to the forum and to Arduino as well. I'm working on a project and have come a long way in the last 2 weeks or so that I've been working on it. I'll describe what I've done so far and where I'm going with this as well as some questions regarding how to implement software to get started and then after some testing some additional software logic. So here's what I've got.
I'm building a semaphore signal for my live steam train club, the Los Angeles Live Steam Railroad Museaum LALSRM....(http://www.lals.org/
). I'm using a motor/encoder/gearbox combination I read about here: (http://www.robotroom.com/FaulhaberGearmotor.html
). I've changed the output gear to one I bought which is indexed and connects via a timing belt to another indexed gear on the semaphore rotation axis shaft. I've got a 1:3 (12-tooth to 36 tooth) gear ratio. So according to the article above the motor will make ~141 rotations per one rotation of the output shaft. With this set up if I need to turn the semaphore from green to red I'll be rotating the shaft exactly 90 degrees. Or from red to amber or amber to green 45 degrees. With the gearing I've got that means the motor output shaft has to turn either 270 degrees (90 x 3) or 135 degrees (45 x 3). At ~141 revolutions of the motor per revolution of the output shaft this translates to (270/360) x 141 = 105.75 motor revolutions total maximum.
This is important because it means that we don't need to consider a large number of interrupts or missing encoder pulses. I've done some basic test and found a few things out. First, I using the Arduino Uno board with the motor shield from SparkFun. I followed the tutorial and got two of the Faulhaber gearmotors running using the code example on the page (http://www.sparkfun.com/tutorials/195
). Next I did a rough test of the motors strength and using a vice grip I held the motor and ran the example code. I increased the time so the signal would keep running in one direction to be sure it would rotate from horizontal to vertical without stopping. Using just the USB connection to my computer the motor had just enough strength to lift the semaphore arm ! So I plugged in the 9-v power supply that came with the beginners kit I bought from Adafruit. With that the motor had no problem turning the signal... As we will be using the 12 volt power from the track system I'm certain this little motor can do the job. Also, I'm going to add bearings to the semaphore shaft set up as it has none now, just a bolt going through some metal collar. The reduced friction will make it much easier for the motor to do its job..
I also read this article:http://www.circuitsathome.com/mcu/reading-rotary-encoder-on-arduino#more-3206
and duplicated it using the same pins on the motor shield connected to the encoder pins of the Faulhaber motor/encoder. I increased the bit size for the count (int16_t) and turned the motor shaft by hand 100 rotations. The serial console showed the count as I turned. The count was flawless. No missed steps ! Even rotating as fast as I could and the count was perfect. At 141 rotations of the motor per one rotation of the output shaft I got 141 x 4 = 564 counts per revolution. At 100 revolutions I got EXACTLY 56400 pulse counts ... Perfect.
So I know I can control the motor AND read the encoder. Now I need to do the following before final 'tweaks' are applied. I need a program that will move the motor an exact number of rotations in the desired direction. Anywhere from +105.75 to -105.75 rotations. I'll start at 100% power (5v) to the motor and see how much I can cut that down using pwm before the motor struggles too much. The reason for this is that we don't want the semaphore to move real fast as it's supposed to be authentic...
So I'd like to have a simple demo program that moves the signal in some test sequence. So start at position A rotate +90 degrees, rotate -45 degrees, rotate -45 degrees, stop. That will be a great starting point for the program and there is little else to do after that.
I'll start with the motor just sitting on my desk. After the basic program is working I'll hook it up to the semaphore. I'm still working on how to mount the motor rigidly in the signal base, where the Arduino will also be. Should be done in a few days with that and hope to have the basic program functioning by then.
Thanks in advance for any help with this. My father, who is 80 years old got me to take on this project for our club. He is in between cancer treatment/surgery and I'd love to at least get the demo complete before the next operation (probably in the next 2 weeks or so). I've been working diligently to keep this project on track and I've learned a lot already. I'm sure my program isn't all that complicated and with a little help I ca get this thing done quickly.
Anyway, thanks again, and I hope I didn't ramble too much. I will supply whatever information anyone might want to clarify any points I might have missed.
P.S. Go easy on me, I'm a newbie here.