Arduino kontrollerade Servo Exerciser (2 / 2 steg)

Steg 2:



Här är hela programmet - gratis för dig att använda som du vill...
Denna kod har testats utförligt och jag känner inte av några buggar!

/*************************************************************/
/ *** S W E E P U S E C S--Servo Drive Program V.110308 *** /
/ *** Mark Theobald-- www.DisabledAdventurers.com *** /
/*************************************************************/
#include < Servo.h >
#include < EEPROM.h >

Servo Servo1; Skapa ett Servo objekt
int CPOS = 1500; Nuvarande Position (i uSecs)
int hastighet = 2500; Servo hastighet (1-100 * 300)
int dröjsmål = 1000; Fördröjning mellan sveper (0-5000 uppdateringsförsök)
int INCR = 1; Servo Increment (1-50 uSecs)
int CSTOP = 1; Stanna vid Center (ja eller nej)
int AMIN = 675; Absolut Min (Minimum = 675)
int AMAX = 2325; Absolut Max (maximal = 2325)
int MIN, MAX; Nuvarande MIN & MAX värden
int SPCP; Sopa passerar mittläget
int Ct, LoopCount; Vissa globala variabler
char sträng [80]. En strängbuffert
int antal; Ett antal variabel

int ABYTE, EPAD; för läsa & skriva EEPROM

void StoreDefaults (void);
void RetrieveDefaults (void);
void CheckSerial (void);
void SweepTo (int Position);
void ManualRotation (void);
void ManualEntry (void);
void GetANumber (void);

/*************************************************************/
void setup() {

Servo1.attach (9, AMIN, AMAX). Bifoga SERVO till Pin 9
Servo1.writeMicroseconds (1500); Ståndpunkten Servo till mittläget
Serial.BEGIN (115200); Matcha detta i HyperTerminal!
Serial.Print ("\n\r"); Visa menyn operatör

Serial.print( "-------------------------------------------- \n\r" );
Serial.Print ("S W E E P U S E C S--Servo Drive Program \n\r");
Serial.print( "-------------------------------------------- \n\r" );
Serial.Print ("s/S = hastighet, i/I = flytta mellanskillnad, d/D = fördröjning \n\r");
Serial.Print ("n/N = Min, m/M = Max, < blanksteg > = paus,? = Display \n\r");
Serial.Print ("C = Center stopp, L/R = manuellt läge, X = Återställ \n\r");
Serial.Print ("Z = Store förstahandsval, P = ange position manuellt \n\r");
Serial.print( "-------------------------------------------- " );

MIN = AMIN; Initiera MIN och MAX värden till absolut MIN & MAX värden
MAX = AMAX;
RetrieveDefaults(); Läs alla värden som kan lagras i EEPROM
tag (!. Serial.available()); Vänta på valfri tangent för att börja
Serial.Read(); }

/*************************************************************/
void loop() {

sprintf (sträng, "\n\r%06d:", ++ LoopCount); Hålla reda på loopar
Serial.Print (sträng);
SweepTo (MAX);
Serial.Print ("CW"); Ange sista satsen
CheckSerial();
Delay (fördröjning);

om (CSTOP & & SPCP) {//We vill stanna vid center & &
SweepTo (1500); Sopa passerar mittläget
Serial.Print ("Center");
CheckSerial();
Delay (fördröjning); }

SweepTo (MIN);
Serial.Print ("CCW");
CheckSerial();
Delay (fördröjning);

om (CSTOP & & SPCP) {
SweepTo (1500);
Serial.Print ("Center");
CheckSerial();
Delay (fördröjning); } }

/*************************************************************/
void RetrieveDefaults() {
EPAD = 0;

ABYTE = int (EEPROM.read (EPAD ++));
MIN = ABYTE << 8.
ABYTE = int (EEPROM.read (EPAD ++));
MIN = MIN | ABYTE;
Serial.Print ("\n\rMIN:");
Serial.Print (MIN, DEC);
om (MIN < AMIN || MIN > = MAX) MIN = AMIN;

ABYTE = int (EEPROM.read (EPAD ++));
MAX = ABYTE << 8.
ABYTE = int (EEPROM.read (EPAD ++));
MAX = MAX | ABYTE;
Serial.Print ("MAX:");
Serial.Print (MAX, DEC);
om (MAX < = MIN || MAX > AMAX) MAX = AMAX;

SPCP = MIN < 1500 & & MAX > 1500; Sopa passerar mittläget

ABYTE = int (EEPROM.read (EPAD ++));
HASTIGHET = ABYTE << 8.
ABYTE = int (EEPROM.read (EPAD ++));
HASTIGHET = HASTIGHET | ABYTE;
Serial.Print ("hastighet:");
Serial.Print (hastighet / 100, DEC);
om (hastighet < 100 || SNABBA > 30000) hastighet = 2500;

ABYTE = int (EEPROM.read (EPAD ++));
DELAY = ABYTE << 8.
ABYTE = int (EEPROM.read (EPAD ++));
DELAY = FÖRSENING | ABYTE;
Serial.Print ("försening:");
Serial.Print (försening / 50, DEC);
om (FÖRSENA < 0 || FÖRDRÖJA > 5000) dröjsmål = 1000;

ABYTE = int (EEPROM.read (EPAD ++));
INCR = ABYTE << 8.
ABYTE = int (EEPROM.read (EPAD));
INCR = INCR | ABYTE;
Serial.Print ("INCR:");
Serial.Print (INCR, DEC);
om (INCR < 1 || INCR > 50) INCR = 50; }

/*************************************************************/
void StoreDefaults() {
EPAD = 0;

EEPROM.write (EPAD ++, char ((MIN >> 8) & 0x00FF));
EEPROM.write (EPAD ++, char (MIN & 0x00FF));

EEPROM.write (EPAD ++, char ((MAX >> 8) & 0x00FF));
EEPROM.write (EPAD ++, char (MAX & 0x00FF));

EEPROM.write (EPAD ++, char ((hastighet >> 8) & 0x00FF));
EEPROM.write (EPAD ++, char (hastighet & 0x00FF));

EEPROM.write (EPAD ++, char ((försening >> 8) & 0x00FF));
EEPROM.write (EPAD ++, char (dröjsmål & 0x00FF));

EEPROM.write (EPAD ++, char ((INCR >> 8) & 0x00FF));
EEPROM.write (EPAD, char (INCR & 0x00FF)); }

/*************************************************************/
void CheckSerial() {
char nyckel;

samtidigt (Serial.available()) {
om ((Key = Serial.read()) == 's "|| Nyckel == s ' || Nyckel == "?") {
om (nyckel == 's "& & hastighet > 300) hastighet-= 300;
om (nyckel == s ' & & snabba < 30000) hastighet + = 300;
om (nyckel == "?") Serial.Print ("\n\r");
sprintf (sträng, hastighet: % d", hastighet / 300); 0 - 100
Serial.Print (sträng); }

om (nyckel == "i" || Nyckel == "I" || Nyckel == "?") {
om (nyckel == "i" & & INCR > 1) INCR--;
om (nyckel == "I" & & INCR < 50) INCR ++;
sprintf (sträng, "Incr:% d", INCR); 0 - 50
Serial.Print (sträng); }

om (nyckel == hade "|| Nyckel == hade "|| Nyckel == "?") {
om (nyckel == hade "& & FÖRDRÖJA > 49) försening-= 50;
om (nyckel == hade "& & FÖRDRÖJA < 5000) försening += 50;
sprintf (sträng, försening: % d", dröjsmål / 50); 0 - 100
Serial.Print (sträng); }

om (nyckel == 'n' || Nyckel == 'N' || Nyckel == "?") {
om (nyckel == 'n') om ((MIN-= 20) < AMIN) MIN = AMIN;
om (nyckel == 'N') om ((MIN += 20) > MAX - 1) MIN = MAX - 1.
sprintf (sträng, "Min:% d", MIN);
Serial.Print (sträng);
SPCP = MIN < 1500 & & MAX > 1500; } //Sweep passerar mittläget

om (nyckel == är "|| Nyckel == är "|| Nyckel == "?") {
om (nyckel == är ") om ((MAX-= 20) < MIN + 1) MAX = MIN + 1.
om (nyckel == är ") om ((MAX + = 20) > AMAX) MAX = AMAX;
sprintf (sträng, Max: % d", MAX);
Serial.Print (sträng);
SPCP = MIN < 1500 & & MAX > 1500; }

om (nyckel == "c" || Nyckel == "C") {
CSTOP =! CSTOP;
sprintf (sträng, "\n\rStop @ Center = %s \n\r", CSTOP? "Ja": "Nej");
Serial.Print (sträng); }

om (nyckel == "") {
Serial.Print ("paus");
tag (!. Serial.available()); Pausad - vänta någon nyckel
Serial.Read();
Serial.Print ("Run");}

om (nyckel == "x" || Nyckel == "X") {//Reset alla variabler
HASTIGHET = 7500;
DELAY = 1000;
INCR = CSTOP = SPCP = 1;
MIN = AMIN;
MAX = AMAX; }

om (nyckel == "r" || Nyckel == "R" || Nyckel == "l" || Nyckel == "L")
ManualRotation();

om (nyckel == "z" || Nyckel == "Z") StoreDefaults();

om (nyckel == "p" || Nyckel == "P") {
samtidigt (Serial.available()) Serial.read(); Rensa buffert
ManualEntry(); } } }

/*************************************************************/
void ManualEntry() {
Serial.Print ("\n\n\rMANUAL post läge");
sprintf (sträng, "---MIN:% d, MAX: % d", MIN, MAX);
Serial.Print (sträng);
Serial.Print ("\n\rNumeric Position < ange >, < blanksteg > = Exit \n\r");

samtidigt (1) {
GetANumber();
om (nummer < 0) återvänder;
sprintf (sträng, ": %d", nummer);
Serial.Print (sträng);

om (nummer > = MIN & & nummer < = MAX) {
CPOS = nummer;
Servo1.writeMicroseconds (CPOS);
Serial.Print ("\n\r"); }

annat {
Serial.Print är ("inte i intervallet \n\r");
sprintf (sträng, "%d - %d < Enter > eller < blanksteg > till Exit...\n\r", MIN, MAX);
Serial.Print (sträng); } } }

/*************************************************************/
void GetANumber() {
char nyckel = 0;

Antal = 0;
medan (nyckel! = ' ') {
om (Serial.available()) {
om ((Key = Serial.read()) == 13) återvända; CR
om (nyckel > 47 & & nyckel < 58) {//ASCII '0' t h är du '9'
om (nummer) * = 10; Ingen ledande nollor!
Nummer += (nyckel - 48); } } }

Antal = -1;
hemkomst. }

/*************************************************************/
void ManualRotation() {
char nyckel;

Serial.Print ("\n\n\rMANUAL ROTATION läge");
Serial.Print ("\n\rl/L=Left, r/R = höger, < blanksteg > = Exit \n\r");

samtidigt (1) {
om (Serial.available()) {
om ((Key = Serial.peek()) == "p" || Nyckel == "P") återvända;

om ((Key = Serial.read()) == "") {
Serial.Print ("\n\r");
hemkomst. }

om (nyckel == "r" || Nyckel == "R" || Nyckel == "l" || Nyckel == "L") {
om (nyckel == "r" & & CPOS < AMAX) CPOS ++;

om (nyckel == "R") {
om (CPOS < AMAX - 9) + CPOS = 10;
annat CPOS = AMAX; }

om (nyckel == "l" & & CPOS > AMIN) CPOS--;

om (nyckel == "L") {
om (CPOS > AMIN + 9) CPOS-= 10.
annat CPOS = AMIN; }

Servo1.writeMicroseconds (CPOS);
sprintf (sträng, ": %d", CPOS);
Serial.Print (sträng); } } } }

/*************************************************************/
void SweepTo (int Position) {

om (CPOS < Position) medan ((CPOS += INCR) < = Position) {
Servo1.writeMicroseconds (CPOS);
för (Ct = hastighet; CT < 30000; CT++); }

annat samtidigt ((CPOS-= INCR) > = Position) {
Servo1.writeMicroseconds (CPOS);
för (Ct = hastighet; CT < 30000; CT++); }

om (CPOS! = Position) Servo1.writeMicroseconds (CPOS = Position); }

/*************************************************************/
/ *** SLUTET PROGRAM *** /
/*************************************************************/

Se Steg
Relaterade Ämnen

Arduino kontrollerade Servo Robot (serbiska)

vad bättre sätt för att börja experimentera med öppen källkod mikro-styrenheter ( Arduino ) då genom att bygga din egen öppen källkod robot ( CC (SA-av))?Vad till gör med din Serbiska?(här) - Hur ansluta din serbiska till internet och köra det över e...

Laser Galvo - Arduino kontrollerade

Arduino kontrollerad laser galvo. Servo driven speglar styra UV laser lämna ett fosforescerande spår på glöd-in-the-dark vinyl ark.Ursprungligen postat på notes.robives.comSteg 1:Börjar med ett blad av självlysande vinyl från eBay och en UV laserpeka...

Sällskapsdjur utegångsförbud: En Arduino kontrollerade sällskapsdjur dörr

Problemet: du vill begränsa den tid när ditt husdjur är tillåtet att gå utanför. Detta kan bero på att trakten inte är säkra för din katt eller liten hund på natten (plundringarna coyotes kommer att tänka på). Men du vill ha ditt husdjur för att kunn...

Arduino kontrollerade animatronic trä huvud (läslampa)

detta huvud är en läslampa som kan justeras för riktning av belysning, och nedtonade som krävs.Detta Instructable kombinerar Arduino programmering, några enkla elektronik, carving med hand och power tools, mekanisk kontroll och lite av träslöjd. Bort...

Arduino kontrollerade fyren

Översikt:Jag har ofta tänkt att en fyr skulle göra ett stort projekt för en Arduino, och så jag beslöt att ge det ett försök med någon av de lokala fyrarna här i Erie, Pennsylvania som inspiration. Jag valde Norr Pierhead fyr som vaktar ingången till...

Arduino-kontrollerade Wolf svans

hälsningar, eller ska jag säga, "Aaaaaooooooooooooh!" Gärna göra din bekantskap Karl wolf entusiast. Du har en inre wolf ande som är så ivriga att ge sig till känna att du har kommit mig att lära mig hur man gör din egen animatronic wolf svans,...

Arduino kontrollerade ljus dimmer

Varning: Vissa människor försöka bygga detta med en optocoupler med zerocrossing coz "som är bättre" rätt? Vissa får även höra i elektronik butiker är det bättre att använda sådan optocoupler. FEL. Detta fungerar endast med en random brand optoc...

Arduino VVS Servo termostat/Controller

Välkommen till mitt "gröna" instructable! Jag ska visa dig hur du använder en Arduino, två servo motorer en temperaturgivare och vissa metall (eller trä) för att göra en digital termostat för en genom väggen VVS enhet.Enligt CB Richard Ellis (et...

Infraröd Sensor guidade Arduino kontrollerade L293D Robot (del 2)

Här är del 2 av Arduino kontrollerade L293D Robot.Del 2 innehåller IR Sensors.This ingår i en serie av instructables leder till en rad efterföljare Robot.QRD1114 Infrarödsensor kopplad till ArduinoSteg 1: Ledningar IR sensorn till ArduinoNegativ från...

Arduino kontrollerade kök Timer

Alla ni måste har upplevt detta att du har något kokning på din gasspis medan å andra sidan du få upptagen tittar på TV eller få en djup konversation att du inser på upptäcka en lukt som det var helt bortskämd bara på grund av din slarv. Denna lilla...

Arduino kontrollerad bil Tracking System baserade på SMS-

Hej jag gjorde en Arduino kontrollerad bil Tracking System baserat på SMS för min fars bil.Använda modulerna är;Arduino nano V3.0SkyLab GPS-modulenWaveCom GSM-modulSoftwareSerial bibliotek, TinyGPS används för att kommunicera med moduler.När jag ring...

Trådlösa Arduino kontrollerade Tank (nRF24L01)

Hej!Idag kommer jag att visa dig hur man bygger en Arduino kontrollerade tank och fjärrkontroll. 3d tryckta delar av tanken (med undantag av registeransvarige, spåra guide och tank cover) ritades av timmiclark och kan hittas här.Steg 1: Samla materia...

Arduino kontrollerade CNC / 3D skrivare Hybrid

Moder natur gör... Vi bygger.BuildersBot säkringar 3D utskrift & CNC fräsning till en Builders dröm "3dprintingindustry.com"BuilderBot är en öppen Design maskin, som använder OpenMjukvara och öppen hårdvara. Det är en produkt av öppna projek...

Android & Arduino kontrollerade projektorn skärmen

detta är min första gången du använder Arduino, eller någon mikrokontroller. Jag är glad att det fungerat så bra men min fru kan inte bero på, travar av mikrokontroller som kommer att dyka upp på vår tröskel snart för framtida projekt. Någon feedback...

Wall-E's anti-sociala kusin: objekt att undvika Arduino kontrollerade Robot!

jag byggde nyligen en Arduino kontrollerade robot, som undviker objekt och skickar ut en PING)) ekolod att kontrollera om ett objekt är. När ett objekt har identifierats, roboten ryggen upp och vänder åt andra hållet!Jag kallar det anti-sociala robot...

Arduino-kontrollerade Smart Home

Detta Instructable skrevs av PubNub Evangelist Ian Jennings . Ians historia går igenom hans processen för att bygga en Arduino-kontrollerade smarta hem modell från grunden.--Tillbaka i September, vår grundare Stephen och jag pratade om olika sätt att...

Arduino kontrollerade Flight Simulator - "The Viper"

min Maker Faire projekt för 2012 är "The Viper"--en Arduino kontrollerade flight simulator inspirerad av shipen av det samma känt från SyFy kanalens TV-serien Battlestar Galactica. Den roterar 360 grader längs två axlar, vilket innebär att ja, d...

Arduino kontrollerade makt källa

Detta instructable beskriver hur du utformar en Arduino kontrollerad leverans strömkälla.En kort video som presenterar sitt arbete kan ses i min Youtube-kanalSteg 1: Design idéer, begagnade strategi... Syftet med projektet var att skapa ett litet dri...

Hexachord, en Arduino-kontrollerade musikinstrument

Förra året, med tidsfristen för Bay Area Maker Faire skapade jag ett nytt instrument som kallas Hexachord. Det var mycket roligt, en stor hit, och jag har haft chansen att göra ett antal samtal om det. Den design utmaningen var spännande och det fann...