Model Scenery Tutorials

Comprenshive Tips. Hints And Techniques For Budget Minded Diorama Maker, Model Train Enthusiast And Wargammer

This sketch will control the direction of rotation of a DC motor based on IR sensor output.  Flashing lights indicate the direction of rotation.

The code for this sketch is below.

A video and wiring diagram are in the editing queue.  If you need them, contact us and we will bump them up.

[code]
//Motor Control Sensor with flashing direction lights
/*When the motor is running, one of two LEDs on the control panel will flash indicating
the dirrection or rotation.*/

#define Sensor A0 //connects to output pin of sensor
#define runPin 5 // must a pwm pin
#define black 6 // connects to black wire on motor
#define red 7 // connects to red wire on motor
int rpm = 200; // sets speed of motor.

#define ledcw 8 // connect led indicating clockwise direction to this pin
#define ledccw 9 // connect led indicating counter-clockwise direction to this pin
int LEDflash;

//millis()
long t1 = 0;
long t2;
long flashTime = 1000;

void setup() {
Serial.begin(9600);
//Motot ————————————–
pinMode(Sensor, INPUT);
pinMode(runPin, OUTPUT);
pinMode(black, OUTPUT);
pinMode(red, OUTPUT);

//LEDs ————————————-
pinMode(Sensor, INPUT);
pinMode(ledcw, OUTPUT);
pinMode(ledccw, OUTPUT);
LEDflash = 1;
t2 = millis();
}

void loop() {

int valSensor = analogRead(Sensor);

if (valSensor > 500) {

digitalWrite(red, LOW);
digitalWrite(black, HIGH);
analogWrite(runPin, rpm);
}

if (valSensor < 500) {

digitalWrite(red, LOW);
digitalWrite(black, HIGH);
analogWrite(runPin, 0);
}

//LED Control
// —————————-
t1 = (millis() – t2);
if (valSensor > 500) {
digitalWrite(ledccw, LOW); //LED ccw should be ‘off’

if (t1 >= flashTime) { // flash timer has timed-out – swap ‘on’ and ‘off’
LEDflash = 1 – LEDflash;
t2 = millis();
Serial.println(t1);
Serial.print(“CW direction “);
Serial.println(LEDflash);
}
digitalWrite(ledcw, LEDflash);
}

//——————————–changing from CW to CCW

if (valSensor <= 500) {
digitalWrite(ledcw, LOW); //LED cw should be ‘off’

if (t1 >= flashTime) { //flash timer has timed out
LEDflash = 1 – LEDflash;
t2 = millis();
Serial.println(t1);
Serial.print(“CCW direction”);
Serial.println(LEDflash);
}
digitalWrite(ledccw, LEDflash);
}
}
[/code]

Scroll to top