Quote:
Originally Posted by ZeroID
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 = "";
}
}
}