Självinställande teleskop (3 / 4 steg)
Steg 3: Skriva din Arduino skiss
Tanken bakom detta projekt är att med varje steg i en stepper motor motsvarar en fast vinkel förändring. Till exempel om en stegmotor har 500 steg per varv, varje steg ska redovisa 360/500 = 0,72 grader skillnaden. Baserat på denna kunskap, kan vi justera teleskopet därmed.
Dock första sakerna första.
Kan ställa in vår skiss för en tråd Key Pad
måste du ladda ner OnewireKeypad.h biblioteket från Arduino Playground (http://playground.arduino.cc/Code/OneWireKeyPad)
Sedan ställa in konstruktorn för att det ska vara lätt efter exemplen.
Jag skulle först testa knappsatsen avläsningarna för att se om du får en tillförlitlig och konsekvent värden
definiera din karaktär nycklar:
char nycklar [] =
{ '1', '2', '3',
'4', '5', ' 6',
'7', '8', ' 9',
'*', '0', '#',};
Använd funktionerna "Key_State" och "Getkey". här är en snabb skiss att skicka nyckel värde till seriell print
#include
char nycklar [] = {'
1","2","3",
'4', '5',' 6',
'7', '8',' 9',
'*','0','#',
};
OnewireKeypad
Knappsatsen (serienummer, nycklar, 5, 3, A0, 4700, 1000);
void setup() {
Serial.BEGIN(115200);
}
void loop() {
Keypad.SetHoldTime(100);
Keypad.SetDebounceTime(50);
om ((Keypad.Key_State() == 3)) {
char knapptryckning = Keypad.Getkey();
Serial.println ("knappsatsen nyckel:");
Serial.println(keypress);
medan ((Keypad.Key_State())) {}
}
}
Main skissen beror på stegmotor och sköld du använder.
Jag använde 3 olika motorer och sköld, deras bild är fäst ovanför.
skiss för Seeed sköld v2.0 med Nema 11 stepper motor
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
NEMA stegmotor stift definitioner
#define MOTORSHIELD_IN1 8 //8
#define MOTORSHIELD_IN2 11 //11
#define MOTORSHIELD_IN3 12 //12
#define MOTORSHIELD_IN4 13 //13
#define CTRLPIN_A 9 //9
#define CTRLPIN_B 10 //10
#define fördröjningstid 10
int numberOfSteps;
void setup()
{
Definiera utgångsstift för nema stegmotor
pinMode (MOTORSHIELD_IN1, OUTPUT);
pinMode (MOTORSHIELD_IN2, OUTPUT);
pinMode (MOTORSHIELD_IN3, OUTPUT);
pinMode (MOTORSHIELD_IN4, OUTPUT);
}
void loop()
{
Flytta Nema stepper motor kommandon
numberOfSteps = 500.
While(numberOfSteps>0)
{forward();
numberOfSteps--; }
Delay(2000);
}
void Step_A1()
{digitalWrite(MOTORSHIELD_IN1,HIGH);
digitalWrite(MOTORSHIELD_IN2,LOW);
digitalWrite(MOTORSHIELD_IN3,LOW);
digitalWrite(MOTORSHIELD_IN4,LOW);
digitalWrite(CTRLPIN_A,HIGH);
digitalWrite(CTRLPIN_B,LOW);
}
void Step_B1() {
digitalWrite(MOTORSHIELD_IN1,LOW);
digitalWrite(MOTORSHIELD_IN2,LOW);
digitalWrite(MOTORSHIELD_IN3,HIGH);
digitalWrite(MOTORSHIELD_IN4,LOW);
digitalWrite(CTRLPIN_A,LOW);
digitalWrite(CTRLPIN_B,HIGH);
}
void Step_C1() {
digitalWrite(MOTORSHIELD_IN1,LOW);
digitalWrite(MOTORSHIELD_IN2,HIGH);
digitalWrite(MOTORSHIELD_IN3,LOW);
digitalWrite(MOTORSHIELD_IN4,LOW);
digitalWrite(CTRLPIN_A,HIGH);
digitalWrite(CTRLPIN_B,LOW);
}
void Step_D1() {
digitalWrite(MOTORSHIELD_IN1,LOW);
digitalWrite(MOTORSHIELD_IN2,LOW);
digitalWrite(MOTORSHIELD_IN3,LOW);
digitalWrite(MOTORSHIELD_IN4,HIGH);
digitalWrite(CTRLPIN_A,LOW);
digitalWrite(CTRLPIN_B,HIGH);
}
void forward() {
Step_A1();
Delay(delaytime);
Step_B1();
Delay(delaytime);
Step_C1();
Delay(delaytime);
Step_D1();
Delay(delaytime);
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Skiss för EasyDrive sköld och små Stepper motor ROB - 10551
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Smaall stegmotor EasyDrive sköld stift
int EASYSHIELDdir = 2;
int EASYSHIELDstep = 3;
void setup() {
EasyShield utgångsstift
pinMode (EASYSHIELDdir, OUTPUT);
pinMode (EASYSHIELDstep, OUTPUT);
}
void loop() {
Köra stepper motor i samband med EasyShield
för (jag = 0; jag < numberOfStep; i ++)
{
digitalWrite(EASYSHIELDstep,LOW);
digitalWrite(EASYSHIELDstep,HIGH);
delayMicroseconds(5000);
}
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
28BYJ stegmotor och sköld
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Stepper motor 28BYJ pin definitioner
#define STEPPER1 4
#define STEPPER2 5
#define STEPPER3 6
#define STEPPER4 7
#define fördröjningstid 8
void setup() {
Definiera utgångsstift för 28BYj stegmotor
pinMode (STEPPER1, OUTPUT);
pinMode (STEPPER2, OUTPUT);
pinMode (STEPPER3, OUTPUT);
pinMode (STEPPER4, OUTPUT);
void loop() {
While(numberOfSteps>0) {
stepperforward();
numberOfSteps--;
}
}
void Step_A() {
digitalWrite (STEPPER1, hög);
digitalWrite (STEPPER2, hög);
digitalWrite (STEPPER3, låg);
digitalWrite (STEPPER4, låg);
}
void Step_B() {
digitalWrite (STEPPER1, låg);
digitalWrite (STEPPER2, hög);
digitalWrite (STEPPER3, hög);
digitalWrite (STEPPER4, låg);
}
void Step_C() {
digitalWrite (STEPPER1, låg);
digitalWrite (STEPPER2, låg);
digitalWrite (STEPPER3, hög);
digitalWrite (STEPPER4, hög);
}
void Step_D() {
digitalWrite (STEPPER1, hög);
digitalWrite (STEPPER2, låg);
digitalWrite (STEPPER3, låg);
digitalWrite (STEPPER4, hög);
}
void stepperforward() {
en tand fram
Step_A(); Delay(delaytime);
Step_B(); Delay(delaytime);
Step_C(); Delay(delaytime);
Step_D(); Delay(delaytime);
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Efter att ha skrivit skissen för varje stegmotor, kan vi använda OnewireKeypad funktionen "addEventKey()" och "ListenforEventKey()" att ringa för varje stegmotor och ange ett numeriskt värde för deras enskilda stegstorlek.
Titta på bifogade komplett skissen att se komplett skissen med alla stegmotorer, LCD-display och nycklar händelsekod.