From 03abf6fb0974dc3ffd98c35176e23e49a745d886 Mon Sep 17 00:00:00 2001 From: Agis Zisimatos Date: Tue, 11 Nov 2014 20:48:41 +0200 Subject: [PATCH] Add arduino code to control stepper motors and implement Easycom2 protocol --- Arduino/SatNOGS.ino | 60 +++++++++++++++++++++++++++++++++++++++++ Arduino/Serial.ino | 51 +++++++++++++++++++++++++++++++++++ Arduino/Stepper.ino | 49 +++++++++++++++++++++++++++++++++ Pics/Block Diagram.dia | Bin 0 -> 2240 bytes Pics/Block Diagram.png | Bin 0 -> 27348 bytes README.md | 6 ++--- 6 files changed, 162 insertions(+), 4 deletions(-) create mode 100644 Arduino/SatNOGS.ino create mode 100644 Arduino/Serial.ino create mode 100644 Arduino/Stepper.ino create mode 100644 Pics/Block Diagram.dia create mode 100644 Pics/Block Diagram.png diff --git a/Arduino/SatNOGS.ino b/Arduino/SatNOGS.ino new file mode 100644 index 0000000..1df4c03 --- /dev/null +++ b/Arduino/SatNOGS.ino @@ -0,0 +1,60 @@ +#include +#include +#include + +#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(); +} diff --git a/Arduino/Serial.ino b/Arduino/Serial.ino new file mode 100644 index 0000000..39076af --- /dev/null +++ b/Arduino/Serial.ino @@ -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++; + } + } +} diff --git a/Arduino/Stepper.ino b/Arduino/Stepper.ino new file mode 100644 index 0000000..bb63030 --- /dev/null +++ b/Arduino/Stepper.ino @@ -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)); +} diff --git a/Pics/Block Diagram.dia b/Pics/Block Diagram.dia new file mode 100644 index 0000000000000000000000000000000000000000..16b32e0854c03d1b1502f6ffc831e12be28c9870 GIT binary patch literal 2240 zcmb2|=3oE;Cg!(ueTyHP3AMfdC#rQew29HgZgEAB^-bTmin}d+p1oP5(s!msDO4o2 zU;pRZ+Y6pV#7|M3bRoq!;i^xhQA?Whf!`)l41fRf$3M$_Z>TrTbKc#rk_-RF&GG$| zIqB@XU-Rq!W@h}d-?RT`-7J^;5BEn3o~{1Tne#I4?pOI!MIZ0JeS7(`u;={gfiuNb ze8W;C@Bb5Anpx7_n)myCe%0Q$T+0F_cYZf}@0J>=@;FrT`=$)J`(KY=eDXbV;`&XQ z^|4vOd6Sk`Uaao9wEN%g^H;C#zZ+7#JNSI(F7b;xa^i(ws%x)`=x5Ik+1t_mH|u$K z&CG;}pDGIjmMoL|{y%J{?@Cp%Q)%z-|CO1Z8nY+*{$Z|cT-lZe5yHf z8vplr8`JB%zNPzbwO2cxGUwRwcXlUFom*A^ZrQKD`OAYoT<_ohhWGWYEI~uljXh7F zcFb5iDRWQF;@NMftz7vsG5F25wPE-5%kvJexqpkfELEv@-s7a;zwO~6-_7DbxD{4i zT;d}aAD6q;)9#<{yeZP@^bZ4ACHN(`3E)2ax5~PB_-*! zbzx0H=T)B*Y0Dm)%)9UZNy)lLcGvgKMq!+17p~V=O739Nln`ZTi}qZaoA_GMFO5HS zuVIdtcz>bS)G#R%laib{;+J<+oHq4JS^cWK^>IguORz|Po1TvRr{%wuFMhmzWB-v; zO!) z*lpQr_fmu5w_B=Lkcp`j7gJQEgn=`|makpM{r=dr_cff;SXFq9W0KLyrJp?9W%3TJ z6`dv3%Gh?pZzr1-o7J@oA7?*axN!IM4`&Z6wrj;cUB=Wi^T6TP9|UfFo*=lvi%;a7 zwL|q$#lw{$sh&m`7ApoYiNqUw>M-x0d{l3b4SO3;`@9b)?45hI&Qi{qDl|#^@W1sx z(=%nFrG7lGEt3%Ey!WC1XU)D-0*IFRa92eA^=^wL5F>$WqN>ypz)h?@6My%|)f7e2GM}?f` zRFSgRLXA@zr_}2P{gYTaIaF$AmEd%~Nv97S(|!`pI{9i!5L0SnZ|sJT%7;>=M1x%( zpZ64#Ph6aJ*6o0y?)6B9kjVABLobS)ThG=bl&kSbaHi|bwLaPR3bZUwZhj-@{P@(; zw7zSXuZUhVoVQ(f{(fUglKEi@N^XlK;9i zCCB|>@2Y+Nk8_@}o?frEi)sJs>>Eo98T9xAzI~c~kD2dg@4M-hTUjnu|J6Na!v6Q& ziS(P#HWz*0{Hq}P?>*j9WvyMcZKnh>eRh8=PHQ?PklItQC}~BJp*h=anN=HCt2X3^ zuKfJP#p?7_Qvny%4zJ|EiMlSXHL`(*Z>KkPKFX_}q^7Xq!z!&qtSYm1zub~~sjuxv zsni9F3#Nt%TfQeOy>>mAy>P>ZWnpZooTn~DME+Q3wZeN!Yn^QB#<`l@!Y)CYd$qeS zofBEgrj^Q=RSCNLwqDI@Fmtd+OxMJ|UAu?%zB*4YJBFD_L7{}RcRhK<4hdnR!6ULKO7zWx6dzaoBb?J%YzeI_+z}B zCEf+Ex*+0^%EjQ@+vX%VLC=zBMd+o9Snan*&KHMytGfA0E!JJO=2)Qa-gVR3*u`6} zUSd1(_sd7;2-&Z_QHh)!fop9Ixf!>HN6Dtj&N&|9a`Ee;rL3HB!OUGdF8@9^Wx|=B zJCdGjS&H|v&61nAN5L@Q`OD7Bv)AeHdrK+UK@Ye{*N<1WO%i4#f?{tJ9EEP z&(+qNrXBIVIe3|n=*h2D;&VQ%*F1jLMsQwo;N>qTcR2<(EtAPh+U*nU673tgf8D=X Y$9~VAYrp;Dzi0Kj^PkF0%VuBz0IDQaiU0rr literal 0 HcmV?d00001 diff --git a/Pics/Block Diagram.png b/Pics/Block Diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..4183f163fc321027ea4932b4bf34ef5fc4f4ae72 GIT binary patch literal 27348 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
-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 HDWM4fV}w$L literal 0 HcmV?d00001 diff --git a/README.md b/README.md index b37ef4a..5f295df 100644 --- a/README.md +++ b/README.md @@ -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) \ No newline at end of file +![satnogs_Diagram](https://raw.github.com/satnogs/satnogs-arduino/master/Pics/Block Diagram.png) \ No newline at end of file -- GitLab