View Single Post
  #6  
Old 26-04-2018, 11:49 AM
redbeard's Avatar
redbeard (Damien)
Registered User

redbeard is offline
 
Join Date: Nov 2010
Location: Adelaide
Posts: 558
Quote:
Originally Posted by ZeroID View Post
Hey Damien, I'd be interested in seeing the circuit and sketch for the focuser control. I have a Duinotech board and a stepper motor module sitting on my desk to try and make work.
Hi Brent,

See code below:
It's very basic and easy to read.
This one is DC motor control not stepper, and they need to be controlled different ways. I have yet to do any stepper code for this module, but I have used one of those Stepper Jaycar units. (https://www.jaycar.com.au/arduino-co...oller/p/XC4458).

I have no actual circuit drawing as it's so easy I have this in my head, the code lets you know what pin goes to where. I've attached pics of the pinouts and input table.

Here is a good tutorial:
https://tronixlabs.com.au/news/tutor...a-and-arduino/

This is a link to the stepper library I used with the Jaycar module:
http://www.airspayce.com/mikem/arduino/AccelStepper/


When I get a chance, I will create a stepper version based on a Moonlite focuser.

Let me know if you have any questions.

Cheers,
Damien

Arduino Code:
=========

//DC MOTOR CONTROL - Damien Poirier 2018
//ARDUINO NANO

#define PWM_LEVEL 9 //USE ANY PWM PINS
#define DC_MOTOR_A 6
#define DC_MOTOR_B 7

#define SPEED_1 A0 //BUTTONS - USING THE ANALOG PINS IN DIGITAL MODE
#define SPEED_2 A1
#define SPEED_3 A2
#define SPEED_4 A3

#define TRAVEL_IN A7 //3 //USING THE ANALOG PINS FOR FOCUS BUTTONS - I ACTUALLY DON'T RECCOMEND USING ANALOG PINS UNLESS YOU HAVE NO DIGITAL PINS LEFT, MIGHT NEED EXTERNAL PULLUS
#define TRAVEL_OUT A6 //4

#define LED_1 A4 //LED'S - USING THE ANALOG PINS IN DIGITAL MODE, HOWEVER ANALOG PINS A6 AND A7 CANNOT BE USED AS DIGITAL IN THE NANO
#define LED_2 A5
#define LED_3 3
#define LED_4 4

const byte PWM_LEVEL_L1 = 80;
const byte PWM_LEVEL_L2 = 130;
const byte PWM_LEVEL_L3 = 190;
const byte PWM_LEVEL_L4 = 255;

const byte PWM_MAX = 255;

boolean trap_button_out;
boolean trap_button_in;

String GET_COMMAND;

void setup()
{
pinMode(PWM_LEVEL, OUTPUT);
pinMode(DC_MOTOR_A, OUTPUT);
pinMode(DC_MOTOR_B, OUTPUT);

//SPEED BUTTONS
pinMode(SPEED_1, INPUT_PULLUP);
pinMode(SPEED_2, INPUT_PULLUP);
pinMode(SPEED_3, INPUT_PULLUP);
pinMode(SPEED_4, INPUT_PULLUP);

//TRAVEL BUTTONS
pinMode(TRAVEL_IN, INPUT); //NOTE, NO INPUT PULLUPS ON ANALOG 6 % 7. SHOULD USE DIGITAL PINS WITH PULLUPS IF POSSIBLE
pinMode(TRAVEL_OUT, INPUT);

//LED'S
pinMode(LED_1, OUTPUT);
pinMode(LED_2, OUTPUT);
pinMode(LED_3, OUTPUT);
pinMode(LED_4, OUTPUT);

Serial.begin(9600);

digitalWrite(DC_MOTOR_A, LOW); //SET MOTOR DRIVER TO STANDBY MODE
digitalWrite(DC_MOTOR_B, LOW);
analogWrite(PWM_LEVEL, PWM_MAX); //SET MAXIMUM DEFAULT SPEED

analogWrite(TRAVEL_IN, 255); //SET BUTTONS INPUT HIGHISH - NORMALLY USE DIGITAL PINS FOR THIS
analogWrite(TRAVEL_OUT, 255);

digitalWrite(LED_1, LOW);
digitalWrite(LED_2, LOW);
digitalWrite(LED_3, LOW);
digitalWrite(LED_4, HIGH); //TURN ON LED 4, OTHERS OFF

trap_button_out = 0;
trap_button_in = 0;
}



void loop()
{
boolean get_speed_button_1;
boolean get_speed_button_2;
boolean get_speed_button_3;
boolean get_speed_button_4;

boolean get_travel_in_button;
boolean get_travel_out_button;

get_travel_out_button = analogRead(TRAVEL_OUT);
get_travel_in_button = analogRead(TRAVEL_IN);

get_speed_button_1 = digitalRead(SPEED_1);
get_speed_button_2 = digitalRead(SPEED_2);
get_speed_button_3 = digitalRead(SPEED_3);
get_speed_button_4 = digitalRead(SPEED_4);



//FOCUS
//=====
if(get_travel_out_button == 0)
{
if(trap_button_out == 0)
{
trap_button_out = 1;
digitalWrite(DC_MOTOR_A, HIGH);
digitalWrite(DC_MOTOR_B, HIGH);
digitalWrite(DC_MOTOR_A, LOW);
}
}
else
{
if(trap_button_out == 1)
{
trap_button_out = 0;
digitalWrite(DC_MOTOR_A, HIGH);
digitalWrite(DC_MOTOR_B, HIGH);
digitalWrite(DC_MOTOR_A, LOW);
digitalWrite(DC_MOTOR_B, LOW);
}
}

if(get_travel_in_button == 0)
{
if(trap_button_in == 0)
{
trap_button_in = 1;
digitalWrite(DC_MOTOR_A, HIGH);
digitalWrite(DC_MOTOR_B, HIGH);
digitalWrite(DC_MOTOR_B, LOW);
}
}
else
{
if(trap_button_in == 1)
{
trap_button_in = 0;
digitalWrite(DC_MOTOR_A, HIGH);
digitalWrite(DC_MOTOR_B, HIGH);
digitalWrite(DC_MOTOR_A, LOW);
digitalWrite(DC_MOTOR_B, LOW);
}
}






//SPEED
//=====

if(get_speed_button_1 == false)
{
analogWrite(PWM_LEVEL, PWM_LEVEL_L1);
digitalWrite(LED_1, HIGH);
digitalWrite(LED_2, LOW);
digitalWrite(LED_3, LOW);
digitalWrite(LED_4, LOW);
delay(50);
}

if(get_speed_button_2 == false)
{
analogWrite(PWM_LEVEL, PWM_LEVEL_L2);
digitalWrite(LED_1, LOW);
digitalWrite(LED_2, HIGH);
digitalWrite(LED_3, LOW);
digitalWrite(LED_4, LOW);
delay(50);
}

if(get_speed_button_3 == false)
{
analogWrite(PWM_LEVEL, PWM_LEVEL_L3);
digitalWrite(LED_1, LOW);
digitalWrite(LED_2, LOW);
digitalWrite(LED_3, HIGH);
digitalWrite(LED_4, LOW);
delay(50);
}

if(get_speed_button_4 == false)
{
analogWrite(PWM_LEVEL, PWM_LEVEL_L4);
digitalWrite(LED_1, LOW);
digitalWrite(LED_2, LOW);
digitalWrite(LED_3, LOW);
digitalWrite(LED_4, HIGH);
delay(50);
}

serialEvent();
delay(100);
}

void serialEvent()
{
while (Serial.available() > 0)
{
char GET_SERIAL_DATA = Serial.read();
GET_COMMAND += GET_SERIAL_DATA;

if (GET_SERIAL_DATA == '#')
{


//FOCUS COMMANDS
//==============

if(GET_COMMAND.endsWith(":F+#")) //out
{
Serial.print(GET_COMMAND);
digitalWrite(DC_MOTOR_A, HIGH);
digitalWrite(DC_MOTOR_B, HIGH);
digitalWrite(DC_MOTOR_A, LOW);
}

if(GET_COMMAND.endsWith(":F-#")) //in
{
Serial.print(GET_COMMAND);
digitalWrite(DC_MOTOR_A, HIGH);
digitalWrite(DC_MOTOR_B, HIGH);
digitalWrite(DC_MOTOR_B, LOW);
}

if(GET_COMMAND.endsWith(":FQ#")) //stop
{
Serial.print(GET_COMMAND);
digitalWrite(DC_MOTOR_A, HIGH);
digitalWrite(DC_MOTOR_B, HIGH);
digitalWrite(DC_MOTOR_A, LOW);
digitalWrite(DC_MOTOR_B, LOW);
}



//SPEED COMMANDS
//==============

if(GET_COMMAND.endsWith(":F1#"))
{
Serial.print(GET_COMMAND);
analogWrite(PWM_LEVEL, PWM_LEVEL_L1);
digitalWrite(LED_1, HIGH);
digitalWrite(LED_2, LOW);
digitalWrite(LED_3, LOW);
digitalWrite(LED_4, LOW);
}

if(GET_COMMAND.endsWith(":F2#"))
{
Serial.print(GET_COMMAND);
analogWrite(PWM_LEVEL, PWM_LEVEL_L2);
digitalWrite(LED_1, LOW);
digitalWrite(LED_2, HIGH);
digitalWrite(LED_3, LOW);
digitalWrite(LED_4, LOW);
}

if(GET_COMMAND.endsWith(":F3#"))
{
Serial.print(GET_COMMAND);
analogWrite(PWM_LEVEL, PWM_LEVEL_L3);
digitalWrite(LED_1, LOW);
digitalWrite(LED_2, LOW);
digitalWrite(LED_3, HIGH);
digitalWrite(LED_4, LOW);
}

if(GET_COMMAND.endsWith(":F4#"))
{
Serial.print(GET_COMMAND);
analogWrite(PWM_LEVEL, PWM_LEVEL_L4);
digitalWrite(LED_1, LOW);
digitalWrite(LED_2, LOW);
digitalWrite(LED_3, LOW);
digitalWrite(LED_4, HIGH);
}
GET_COMMAND = "";
}
}
}
Attached Thumbnails
Click for full-size image (l298n-dual-2a-motor-driver-module-tronixlabs-australia-pinout.jpg)
104.0 KB75 views
Click for full-size image (s-l1600.jpg)
154.4 KB50 views
Reply With Quote