Pages: [1]   Go Down
Author Topic: IR remote controlled stepper motor with interrupt trouble  (Read 1244 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 17
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi guy's, I'm pretty new in here so I hope I can get some help here.

So I'm controlling a stepper motor through 8bit shift register on Arduino UNO. I've a NEC IR remote control and a basic IR receiver. With it I'm controlling the speed of the motor using attachInterrupt function. I did not do any debouncing or similar circuitry. In the software side I'm using the mentioned interrupts and IRremote library.

Now to the problem, I cant achieve that the values received by the controller change instantly as i press the button on the RC. I have to be lucky to get the moment when the signal is received well e.g i want to transmit 0xFF52AD and its just -1 and 0 and if I'm lucky it transmits the proper number. I can also mention that with the motor spinning at lower speeds it is easier to transmit the value

I hope you can give me some advice guy's

I include the code also
Code:
#include <IRremote.h>

int pin = 13;
volatile int state = LOW;
int recv = 2;
short int latchPin = 8;
short int clockPin = 12;
short int dataPin = 11;
short int d = 50;
volatile int val;

IRrecv irrecv(recv);
decode_results results;

void setup()
{
  pinMode(pin, OUTPUT);
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
  Serial.begin(9600);
  irrecv.enableIRIn();
  irrecv.blink13(true);
  attachInterrupt(0, motorSpeed, RISING); //interrupt
}

void loop()
{
 
    switch (results.value){  //I have chosen 3 buttons for 3 speeds
    case 0xFF30CF:
      d = 50;
      break;
    case 0xFF38C7:
      d = 12;
      break;
    case 0xFF52AD:
      d = 3;
      break;
  }
  //just the motor driving part of the code
    digitalWrite(latchPin, LOW);
  shiftOut(dataPin, clockPin, MSBFIRST, 0b1110011);
  digitalWrite(latchPin, HIGH);
  delay(d);
    digitalWrite(latchPin, LOW);
  shiftOut(dataPin, clockPin, MSBFIRST, 0b11100110);
  digitalWrite(latchPin, HIGH);
  delay(d);
    digitalWrite(latchPin, LOW);
  shiftOut(dataPin, clockPin, MSBFIRST, 0b11011100);
  digitalWrite(latchPin, HIGH);
  delay(d);
    digitalWrite(latchPin, LOW);
  shiftOut(dataPin, clockPin, MSBFIRST, 0b10111001);
  digitalWrite(latchPin, HIGH);
  delay(d);
  Serial.println(val);
}

void motorSpeed()
{
  if (irrecv.decode(&results)) { //receiving the input
    val = results.value;
    irrecv.resume();
  }
}

Thank you
Logged

0
Online Online
Shannon Member
****
Karma: 162
Posts: 10489
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Sounds like a hardware issue - is the stepper motor sharing power with the IR receiver?  That's
a recipe for huge amounts of interference - motors and sensitive electronics should be
separately powered wherever possible.

A circuit diagram / photo / description would be informative...
Logged

[ I won't respond to messages, use the forum please ]

Offline Offline
Newbie
*
Karma: 0
Posts: 17
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

MarkT, thank you very much for your advice, I managed to resolve my problem by connecting separately the motor to the arduino 5V source and the sensor to the 3,3V source and to be sure i used different grounds also. Now my remote is working without a flaw.

Thanks again very much smiley-wink
Logged

Pages: [1]   Go Up
Jump to: