Add arduino code to control stepper motors and implement Easycom2 protocol
parent
4751d9ed4d
commit
03abf6fb09
|
@ -0,0 +1,60 @@
|
|||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <math.h>
|
||||
|
||||
#define DIR_AZ 8
|
||||
#define STEP_AZ 9
|
||||
#define EN_AZ 7
|
||||
|
||||
#define DIR_EL 10
|
||||
#define STEP_EL 11
|
||||
#define EN_EL 12
|
||||
|
||||
#define SPD 200 //step per degree
|
||||
#define T_DEALY 10000
|
||||
#define T_STEPPER 1
|
||||
|
||||
int stepPosAz = 0;
|
||||
int stepAz = 0;
|
||||
int stepPosEl = 0;
|
||||
int stepEl = 0;
|
||||
long t1 = 0;
|
||||
|
||||
|
||||
void setup()
|
||||
{
|
||||
pinMode(DIR_AZ, OUTPUT);
|
||||
pinMode(STEP_AZ, OUTPUT);
|
||||
pinMode(EN_AZ, OUTPUT);
|
||||
digitalWrite(EN_AZ, LOW);
|
||||
digitalWrite(DIR_AZ, LOW);
|
||||
|
||||
pinMode(DIR_EL, OUTPUT);
|
||||
pinMode(STEP_EL, OUTPUT);
|
||||
pinMode(EN_EL, OUTPUT);
|
||||
digitalWrite(EN_EL, LOW);
|
||||
digitalWrite(DIR_EL, LOW);
|
||||
|
||||
Serial.begin(19200);
|
||||
}
|
||||
|
||||
void loop()
|
||||
{
|
||||
/*Time Check*/
|
||||
if (t1 == 0)
|
||||
t1 = millis();
|
||||
if (stepAz == 0 && stepEl == 0 && millis()-t1 > T_DEALY)
|
||||
{
|
||||
digitalWrite(EN_AZ, HIGH);
|
||||
digitalWrite(EN_EL, HIGH);
|
||||
}
|
||||
else
|
||||
{
|
||||
digitalWrite(EN_AZ, LOW);
|
||||
digitalWrite(EN_EL, LOW);
|
||||
}
|
||||
|
||||
cmd_proc();
|
||||
|
||||
stepper_move();
|
||||
}
|
|
@ -0,0 +1,51 @@
|
|||
void cmd_proc()
|
||||
{
|
||||
/*Serial*/
|
||||
static char buffer[256];
|
||||
char incomingByte;
|
||||
static int counter=0;
|
||||
char data[100];
|
||||
|
||||
/*Read from serial*/
|
||||
while (Serial.available() > 0)
|
||||
{
|
||||
incomingByte = Serial.read();
|
||||
/*new data*/
|
||||
if (incomingByte == '\n' || incomingByte == ' ' || incomingByte == '\r')
|
||||
{
|
||||
buffer[counter]=0;
|
||||
if (buffer[0] == 'A' && buffer[1] == 'Z')
|
||||
{
|
||||
strncpy(data, buffer+2, 100);
|
||||
double cmdAz = atof(data);
|
||||
|
||||
stepAz = deg2step(cmdAz)-stepPosAz;
|
||||
}
|
||||
else if (buffer[0] == 'E' && buffer[1] == 'L')
|
||||
{
|
||||
strncpy(data, buffer+2, 10);
|
||||
double cmdEl = atof(data);
|
||||
|
||||
stepEl = deg2step(cmdEl)-stepPosEl;
|
||||
}
|
||||
else if (buffer[0] == 'S' && buffer[1] == 'A')
|
||||
{
|
||||
stepAz = 0;
|
||||
}
|
||||
else if (buffer[0] == 'S' && buffer[1] == 'E')
|
||||
{
|
||||
stepEl = 0;
|
||||
}
|
||||
|
||||
counter = 0;
|
||||
|
||||
//Reset time
|
||||
t1 = 0;
|
||||
}
|
||||
/*Fill the buffer with incoming data*/
|
||||
else {
|
||||
buffer[counter] = incomingByte;
|
||||
counter++;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,49 @@
|
|||
/* Send pulses to stepper motor drivers */
|
||||
void stepper_move()
|
||||
{
|
||||
if(stepAz>0)
|
||||
{
|
||||
digitalWrite(DIR_AZ, HIGH);
|
||||
digitalWrite(STEP_AZ, HIGH);
|
||||
stepPosAz++;
|
||||
stepAz--;
|
||||
}
|
||||
else if(stepAz<0)
|
||||
{
|
||||
digitalWrite(DIR_AZ, LOW);
|
||||
digitalWrite(STEP_AZ, HIGH);
|
||||
stepPosAz--;
|
||||
stepAz++;
|
||||
}
|
||||
|
||||
if(stepEl>0)
|
||||
{
|
||||
digitalWrite(DIR_EL, LOW);
|
||||
digitalWrite(STEP_EL, HIGH);
|
||||
stepPosEl++;
|
||||
stepEl--;
|
||||
}
|
||||
else if(stepEl<0)
|
||||
{
|
||||
digitalWrite(DIR_EL, HIGH);
|
||||
digitalWrite(STEP_EL, HIGH);
|
||||
stepPosEl--;
|
||||
stepEl++;
|
||||
}
|
||||
|
||||
delay(T_STEPPER);
|
||||
digitalWrite(STEP_AZ, LOW);
|
||||
digitalWrite(STEP_EL, LOW);
|
||||
delay(T_STEPPER);
|
||||
|
||||
}
|
||||
/* Convert degrees to steps */
|
||||
int deg2step(double deg)
|
||||
{
|
||||
return(60*SPR*deg/360);
|
||||
}
|
||||
/* Convert steps to degrees */
|
||||
float step2deg(int Step)
|
||||
{
|
||||
return(360*Step/(SPR*60));
|
||||
}
|
Binary file not shown.
Binary file not shown.
After Width: | Height: | Size: 27 KiB |
|
@ -1,9 +1,7 @@
|
|||
SatNOGS Arduino
|
||||
===============
|
||||
|
||||
Repository of Arduino code and Arduino PCB for SatNOGS project.
|
||||
Repository of Arduino code for SatNOGS project.
|
||||
Refer to block diagram in the repository for wiring documentation.
|
||||
|
||||
The PCB is based in [Arduino Pro Micro](https://www.sparkfun.com/products/12640) and the [Pololu stepper motor driver](http://www.pololu.com/product/1182). In the picture below you can see the PCB.
|
||||
|
||||
![satnogs_PCB](https://raw.github.com/satnogs/satnogs-arduino/master/Pics/SatNOGS_Board_V1_1.png)
|
||||
![satnogs_Diagram](https://raw.github.com/satnogs/satnogs-arduino/master/Pics/Block Diagram.png)
|
Loading…
Reference in New Issue