arduino board to monitor two sepearated encoders - arduino

I have two linear quadrature encoders controlling two stepper motors. These two stepper motors move a stage (one in x, the other in y). There might be a feedback between the two motors but I am not sure. I would like to use interrupt on arduino to monitor the changes in channels A and B of each encoder. Should I get an arduino board (e.g. mega) with more than 4 interrupts, each interrupt can handle a distinct ISR?
Thank you,

Related

GND Servo and Arduino

I was working in a little project with Arduino and two Servomotors
Why is it necessary to putting the GND from external source (necessary to power the servomotor) and Arduino GND together?
Why is not able to work properly with separated GND?
Whenever you interface your Arduino to a separate device -- or several -- you must establish a common ground. Perhaps your servos run off their own power of a small breadboard, or you have a sensor or a bunch of LEDs... in all cases you'll need to make a common ground for all components of the circuit.
If I'm hooking up more than a single LED or single sensor to my Arduino, I prototype on a breadboard and the first thing I do is connect the power GND pin of the Arduino to the blue/black ground rail of the breadboard. That ensures a common ground, which is vitally important as a reference 0V in any circuit you build.
In many well-designed multi-layer circuit boards for example, often one layer of copper is devoted entirely to GND so that every component will be able to have a solid connection to GND. Then it's referred to as a "ground plane" and is a common goal in good circuit board design.
Current flows from + to - in a circuit, from the highest to the lowest reference point. See details here and here.
The GND is a reference point usually 0v.
With different GND (I'm guessing different positive input as well), you might end up with:
some short circuits
independent circuits
reflection phase change if you are working with alternating currents
Anyway in a circuit the GND should always the same (even though it can be in multiple places).

Turn on light (bulb) with Arduino UNO and PIR Sensor

im trying to turn on the light (bulb) with my arduino UNO and one module with 4 relays. I can do it with one LED but with an bulb i can't. I have connected the wires like in the photo:
http://i.stack.imgur.com/GUuAS.jpg
I need a 1k ohm resistor or the module include it??
Here the bulb that I have:
http://i57.tinypic.com/10dbp90.jpg
Thanks!!!
In your wiring picture it appears that the only source of power is what the Arduino is getting from the USB cable. The purpose of a relay is typically to control the flow of a higher voltage source (such as multiple small batteries in series, a larger battery, or a wall outlet) using a lower voltage control signal (e.g. one of your Arduino's GPIO pins). The maximum current from VCC to ground that can be draw without damaging your Arduino is 200 mA (source). Power = voltage * current (p = i * v) and VCC is 5V. This means the total amount of power your Arduino can supply is 1 watt. This is likely significantly less than the amount of power required to turn on your light bulb.
The purpose of the resistor in the LED circuit is to limit the current going through the LED. This is more commonly done when the LED is connected directly to a GPIO pin in order to prevent more current from being drawn from a pin than the amount that will damage that pin. From the same source as the current limit from VCC, the limit for a GPIO pin is only 40 mA. I would recommend seeing if you can power your light bulb with a battery. You could then use this same size battery as the power source for your relay board.

Does Ardunino serial need a common ground

I have a device running off a different power supply, that I'm trying to talk to serially, it has TX and RX lines, GND and 2.7+ line, its quite grunty so It has its own PS.
I'm getting some odd results at the moment, so wondering if I need to use a common GND between the Arduino GND and the PS GND and the device GND.
Does serial require a common voltage reference point?
Its a mega 2560 R3
All signals require a reference voltage. Ground is what provides this reference for single-ended signals such as those used by a UART.
UART signals are composed of low-level and high-level signals.
The receptor, at the other end, to be able to understand your UART signal, must be aware of what is that low-level and high-level signals.
So you must put your UART GND to the GND of the receptor, and the high-level voltage must correspond to the TTL input level of your receptor.
For example, if the high-level of your UART is 2.7v, and your receptor input-level is 5v, you could encounter bad level detections sometime, because 2.7v could be detected as a low-level input.
For the low-level inputs, this is no problem because 0v is always 0v.
Sorry but... didn't you break your 2.7V device? Besides using a common ground, like Ignacio pointed out, when you have to interface something to something else you should ALWAYS check what are the correct voltage levels expected.
So did you check that the high voltage levels and low voltage levels are fulfilled? I think not. Because:
Arduino Uno (i just have the 328P datasheet on hand, so i'll use this) has an Atmega328P powered at 5V. The datasheet says that the Vih parameter (the minimum voltage sensed as a "high" value) is 0.6Vcc, which means 3V. So if you send him a 2.7V signal.... You are doing something wrong.
The 2.7V device has probably an absolute maximum voltage allowed on any pin of Vcc+0.3V. This means that the maximum voltage for each pin is 3V; if you go above this current starts flowing through the protection diode and... you blow your device. Now you are giving it 5V, so.... Puff...
If the above criteria are not fulfilled you have to put between the two circuits something. Which is
a resistor divider if you have to make the voltage lower (just two resistors) and a couple of transistors to make it higher
Opto-isolators (and you can keep the grounds separated)
Voltage translators (such as TXS0102)
other...

Arduino: Attach an interrupt to one of the higher pin numbers?

I have an Arduino Mega 2560. Is is possible to attach an interrupt on the higher pin numbers, for instance, D20 to D25? I tried PcInt, but it doesn't work with the higher pin numbers for some reason.
I have a custom board and it's using these pins, so my hands are tied in terms of what pins to use.
The pin mapping of the Mega2560 says that pins 20-25 aren't candidates for PCINTs (but 20 and 21 would have INTs). So the layout of the board makes it simply incompatible for this Arduino.

Arduino stepper

I am building a system with the Arduino Uno, a power shield (REf to model) and a bipolar stepper motor.
I cannot initiate the motor using the stepper library from Arduino. I instantiate my stepper with
Stepper myStepper(motorSteps, motorPin1,motorPin2m motorPin3,motorPin4);
And keep on with the example code provided with the Arduino.
When I launch the code on the Arduino, the motor emits some sounds, but it does not turn.
How can determine the right motor pins to use? On the power shield, which mode is to be used, PWM or PLL?
As you suggest, the adafruit motor shield should fit the arduino stepper library, as it uses a L293D to drive the motor. It can drive 2 stepper with an current of 0.6A (good for most of little stepper you can find in printers, floppy/CD/DVD reader...).
Be careful, they seem to use their own library for this shield, you can find it here :
http://www.ladyada.net/make/mshield/download.html
And to know how to connect your stepper, look here :
http://www.ladyada.net/make/mshield/use.html
Sorry to answer your comment this way, but I don't have enough reputation to comment... so please, +1 my answer if you think it's a good answer :)
It's normal that the arduino sketch doesn't work. It drives the motor like this:
PIN1 : coil 1, forward current
PIN2 : coil 1, backward current
PIN3 : coil 2, forward current
PIN4 : coil 2, backward current
Your shield drives the stepper this way:
PIN1 : current forward/backward
PIN2 : current intensity with PWM
PIN3 : current intensity with PWM
PIN4 : current forward/backward
Not a good idea to drive a stepper motor, as you don't even need PWM to drive a stepper. It's to drive a DC motor. You may write your own sketch to drive a stepper with that shield, but you should find a shield that fit the arduino to drive a stepper. Look for something like "UL2003 stepper module", it costs few dollars.
Edit: I've got one of those modules and it works like a charm. Be careful about the power you need. Maybe you need something like a L298N module. I've got few of them too and they work fine.
If the motor emits some sound, this is good news. At least you have contact with it. Since it is just a sound but no movement, there might be three things laying underneath of this behavior;
Wrong pin connections of the motor
Insufficient current feeding from the motor driver.
Step counts determined by the code using PWM might be
too less or too high as per the motor can handle.
I can offer this URL link to determine motor pin-outs;
How Can I Determine My Stepper Motor Wiring Without the Stepper Motor Pinout
In stepper motor how many wires you have? 4 or 6.
Your connection is faulty. That's why it makes such sound.
Test with multimeter. you find two wires give high resistance. other two give half from that. Connect the first two with motor driver out1 and second two with out2.
You didn't mention which motor driver you are using. Try with L298 motor driver shield.
I think the problem you are having is related to the kind of shield you are attempting to use. The power shield that you linked is designed for DC motors and you are attempting to use a stepper motor (see this website for an explanation of the difference).
I would recommend trying another shield (like the Sparkfun EasyDriver) that supports the use of a stepper motor.
The problem seems to be wrong connected motor pins.
Are you sure, you connect true windings to motor?
Measure the motor pins with ohmmeter. There should be two windings which have pins A1-A2 and B1-B2. Between these pins you should see some resistance value.
Then be sure you connect to shield with right order.
In mi projects I use a bipolar motor (a nema17), and you can drive it easy with a A4988 pololu (or drv8825, more powerfull, and more expensive).
Those drivers has an H bridge inside, and allows you to control the motor by a simple:
while(1){
digitalWrite(PIN_STEP, HIGH);
delay(1000);
digitalWrite(PIN_STEP, LOW);
delay(1000);
//1RPM = 100 microsecond delay for a 1.8 degree angle motor (200 steps per
turn)
}

Resources