Servo Feedback Hack (gratis) (8 / 8 stap)

Stap 8: Auto bereik instelling


ik samen te stellen een vollediger codevoorbeeld gebaseerd op V2 van stap 7. Het zal het bereik van twee gekleed servo's, sla de reeks gegevens in EEPROM (feedback bereik en ons bereik pulse) automatisch ingesteld voor toekomstige opnieuw opstart. Er is ook een optie om te herstellen van de gegevens van de opgeslagen bereik op opnieuw opstarten.
Er is ook een mooi blok dat soepele servo versnelling en vertraging gebaseerd op de cosinus-functie genereert. Gotta min trig.
Geniet van!

/ * > Auto_Set_Range <
Het testen van code voor servo met gehackte feedback van interne pot.
Servo control kabel aangesloten op de digitale 10 en 11
Positie Feedback kabel aangesloten op analoge 0 en 1
Servo's zijn declaired in matrixvorm voor eenvoudige toevoeging van meer servo's.
Een spanning divider voortbouwen ARef pin: + 5V--4.7K--Aref--3.3K--GND
Met een gereguleerde spanning van 4.78V zal hij als gevolg van analoge referentie ~1.85V zijn
(Zie http://arduino.cc/en/Reference/AnalogReference)
Dit zal het verhogen van de resolutie van de potentiometer lezen.
Gebruik de volgende opdrachten op de Toggle tussen het lezen van de servo-feedback
en het lezen van elke andere analoge pin die moet zien 5V als referentie
analogReference(EXTERNAL); analoge 1023 ingesteld voltage dat op de ARef pin
analogReference(DEFAULT); Hiermee stelt u analoge 1023 op 5V of 3.3V afhankelijk van voeding

DEZE CODE KOMT IN OP 8,9 K IN HET GEHEUGEN. ZONDER ALLE SERIËLE FEEDBACK IS 8.3K
HET KON WORDEN VERMINDERD DOOR IEMAND SLIMMER DAN IK, IK BEN ZEKER STAAN!

*/

#include < Servo.h > //import servo bibliotheek
#include < EEPROM.h > //import EEPROM bibliotheek
Const int numServos = 2; Hoeveel servo's heb je?
Const int sPin [numServos] = {10,11}; welke pinnen ze correleren aan?
Servo servo [numServos]; verklaren van de servo-array

int highPulse [numServos]; hoge pulsbreedte
int lowPulse [numServos]; lage pulsbreedte
int een [numServos]; lowPulse feedback lezing
int B [numServos]; highPulse feedback lezing
int hier [numServos]; verplaatsen van hoek
int er [numServos]; hoek naar

float x [numServos]; hoek geconverteerd naar radialen voor het afleiden van de cosinus Golf

int h;
int t;
int feedBack; gebruikt om servo feedback waarde te houden
int knop = 2;
int e = 1; EEPROM adres om te beginnen met servo gegevens opslaan/ophalen
int hoek; hoek, is afgeleid van cosinus functie. verzonden naar servo in lus
int btwReadings = 20; vertragingstijd tussen
int whlReading = 3; vertragingstijd tussen analoge lezingen van interne pot

Boole rangeTest = false;
Booleaanse doneMove [numServos];

VOID Setup {}

Serial.begin(19200); uitgang voor seriële initialiseren
Serial.println ("het is op!");
analogReference(EXTERNAL);
pinMode (knop, INPUT);
for (int i = 0; ik < numServos; i ++) {}
pinMode (sPin[i],OUTPUT);
}
int n = EEPROM.read(0);
Als (n == 20) {}
callRange();
}
Als (rangeTest == false) {}
for (int i = 0; ik < numServos; i ++) {}
setRange(i); Ga test het bereik en de waarden instellen
doneMove [i] = true;
}
rangeTest = true;
EEPROM.write(0,20); geven aan de toekomstige startups dat we hebben dit gedaan!
}
delay(1000);
}

void loop {}

for (int i = 0; ik < numServos; i ++) {}
Als (doneMove [i] == true) {}
doneMove [i] = false;
hier [i] = er [i];
er [i] = willekeurige (180,1) + 0,5;
Als (daar [i] == here[i]) {daar [i] = willekeurige (180,1) + 0,5;}
Als (hier [i] < there[i]) {x [i] = 0;} else {x [i] = 180;}
Serial.Print ("Move servo");
Serial.Print(i);
Serial.Print ("uit");
Serial.Print(here[i]);
Serial.Print ("to");
Serial.println(there[i]);
}
}

calcCos (huidige en gewenste beeldpositie, stap, servo matrixpositie)
for (int i = 0; ik < numServos; i ++) {}
hoek = calcCos(here[i],there[i],1.5,i);
Als (doneMove [i] == false) {}
Servo[i].write(Angle);
delay(5);
}
}
} / / VOID LOOP END

/*
DEZE FUNCTIE AUTO-SETS HET SERVO-BEREIK
WORDT UITGEGAAN VAN DE DRUKKNOP OP PIN 2
*/

ongeldig setRange(int x) {//parameter doorgegeven is matrixpositie servo
int pb = 0; gebruikt om te houden van de drukknop lezing
int test; algemeen gebruik variabele
int h;
int t;
int pulse = 1500; eerst die ons pulse gebruikt in bereik test
Serial.Print ("druk op de knop instellen bereik van Servo[");
Serial.Print(x);
Serial.println("].");
while(!PB) {}
PB = digitalRead(Button);
}
PB = 0;
Serial.Print ("bereik limieten instellen in... 3");
voor (int i = 2; ik > = 0; i--) {//count beneden drie seconden
delay(1000);
Serial.Print("..");
Serial.Print(i);
}
Serial.println();
Servo[x].attach(sPin[x]);
vertraging(20);
Servo[x].writeMicroseconds(Pulse); Stuur servo naar midden van bereik
delay(2000); wachten om er te komen

{}
Pulse += 10; incriment ons pulse breedte
readMove(x,pulse);
} while(h > t); voorwaarde voor het bereik blijven testen
highPulse [x] = puls-20; wegblijven van extreme bereik
B [x] = h-10; feedback uit de buurt van extreme aanpassen
Serial.println();
Servo[x].writeMicroseconds(highPulse[x]);
Pulse = highPulse [x];
delay(500);
{}
Pulse-=10;
readMove(x,pulse);
} while(h < t);

lowPulse [x] = puls + 20;
Een [x] = t + 10;
Servo[x].writeMicroseconds(lowPulse[x]);

feedBack = getFeedback(x); huidige lezen uit de pot nemen
Er is [x] = map(feedBack,A[x],B[x],0,180); feedback naar mate uitvoer aanpassen
Servo[x].attach(sPin[x],lowPulse[x],highPulse[x]); deze servo koppelen
Servo[x].write(there[x]); afgeven van pulse voor waar we zijn

doneMove [x] = true;

test een [x] = >> 8;
writeE(test); lage feedbackscore lezing opslaan
writeE(A[x]);
testen = B [x] >> 8;
writeE(test); opslaan van hoge terugkoppeling lezing
writeE(B[x]);
testen = lowPulse [x] >> 8;
writeE(test); opslaan van lage control-pulse
writeE(lowPulse[x]);
testen = highPulse [x] >> 8;
writeE(test); hoge pols slaan
writeE(highPulse[x]);

Serial.println ("Feedback-bereik:");
Serial.Print(A[x]);
Serial.Print ("<>");
Serial.println(B[x]);
Serial.println ("ons Pulse bereik:");
Serial.Print(lowPulse[x]);
Serial.Print ("<>");
Serial.println(highPulse[x]);
Serial.Print("servo[");
Serial.Print(x);
Serial.println ("] aangesloten, gegevens die worden opgeslagen in EEPROM");

} //end setRange()

VOID writeE (byte b) {}
EEPROM.write(e,b);
e += 1;
}

VOID readMove (int n, int p) {}
t = getFeedback(n);
Servo[n].writeMicroseconds(p);
delay(btwReadings);
h = getFeedback(n);
Serial.println(h);
} //END SET BEREIK

/*
DEZE FUNCTIE LEEST DE INTERNE SERVO POTENTIOMETER
*/
int getFeedback(int a) {}
int j;
int de gemiddelde;
int resultaat;
int test;
int lezen [20];
Boolean gedaan;

voor (j = 0; j < 20; j ++) {}
lezen van [j] = analogRead(a); ruwe gegevens ophalen uit servo potentiometer
delay(whlReading);
} / / Sorteer de laag naar hoog in array van lezingen
= false; duidelijke vlag sorteren
terwijl (gedaan! = true) {/ / eenvoudige swap sorteren, worden de getallen van de laagste tot hoogste gesorteerd
= true;
voor (j = 0; j < 20; j ++) {}
Als ([j] lezen > lezen [j + 1]) {/ / hier nummers sorteren
testen = lezen [j + 1];
lezen van [j + 1] = lezen van [j];
lezen van [j] = test;
= false;
}
}
}
betekenen = 0;
voor (int k = 6; k < 14; k ++) {//discard de hoogste 6 en 6 laagste lezingen
bedoel += lezen [k];
}
resultaat = gemiddelde/8; gemiddelde nuttige lezingen
Return(result);
} / / END GET FEEDBACK

/*
DEZE FUNCTIE ROEPT EERDER BEREIK INSTELLEN VANAF EEPROM
WORDT UITGEGAAN VAN DE DRUKKNOP OP PIN 2
*/
ongeldig callRange() {}
int test;

Serial.Print ("To reset opgeslagen bereik druk op pin 2");
for (int i = 5; ik > = 0; i--) {}
Serial.Print("..");
Serial.Print(i);
for (int j = 0; j < 100; j ++) {}
Als (digitalRead(Button) == 1) {}
Serial.println();
delay(1000);
terugkeer;
}
delay(10);
}
}
Serial.println();
Serial.println ("Retreiving servo gegevens");
for (int i = 0; ik < numServos; i ++) {}
testen = readE();
Een [i] = test << 8; opgeslagen lage feedbackscore lezing krijgen
Een [i] = A [i] + readE();
testen = readE();
B [i] = test << 8; opgeslagen hoge terugkoppeling lezing krijgen
B [i] = B [i] + readE();
testen = readE();
lowPulse [i] = test << 8; krijgen storeed lage controle pulse
lowPulse [i] = lowPulse [i] + readE();
testen = readE();
highPulse [i] = test << 8; krijgen opgeslagen hoge controle-pulse
highPulse [i] = highPulse [i] + readE();
feedBack = getFeedback(i); huidige lezen uit de pot nemen
er [i] = map(feedBack,A[i],B[i],0,180); feedback naar mate uitvoer aanpassen
Servo[i].attach(sPin[i],lowPulse[i],highPulse[i]); deze servo koppelen
Servo[i].write(there[i]); afgeven van pulse voor waar we zijn
doneMove [i] = true; instellen om eerst verplaatsen
Serial.println ("Feedback-bereik:");
Serial.Print(A[i]);
Serial.Print ("<>");
Serial.println(B[i]);
Serial.println ("ons Pulse bereik:");
Serial.Print(lowPulse[i]);
Serial.Print ("<>");
Serial.println(highPulse[i]);
Serial.Print("servo[");
Serial.Print(i);
Serial.println ("] aangesloten, gegevens opgehaald vanaf EEPROM");
Serial.Print ("servo");
Serial.Print(i);
Serial.Print ("huidige positie =");
Serial.println(there[i]);
Serial.println();

}

rangeTest = true; Stel de vlag rangeTest
} //end callRange()

byte readE() {}
byte E = EEPROM.read(e);
e += 1;
terugkeer E;
} //END OPROEP BEREIK

/*
DEZE FUNCTIE MAAKT SMOOTH (COSINUS) BEWEGING VAN HIER NAAR DAAR
*/

int calcCos (int h, int th, float s, int n) {}
int r;
int;
if(h < th) {}
x [n] += s;
Als (x [n] > = 181) {doneMove [n] = true;}
r = (cos(radians(x[n]))*100);
een = map(r,100,-100,h,t);
}
if(h > th) {}
x [n]-= s;
Als (x [n] < = -1) {doneMove [n] = true;}
r = (cos(radians(x[n]))*100);
een = map(r,-100,100,h,t);
}
terug een;
} //END CALC COS

Gerelateerde Artikelen

Kubus Servo (G15) hack voor High Speed

Kubus Servo (G15) hack voor High Speed

Dit Instructable zal u begeleiden om te wijzigen van de kubus om te krijgen een hogere snelheid uit normale kubus servo Servo.Stap 1: Word klaar vereiste hulpmiddelenWat u zult moeten:1. een philips schroevendraaier.2. epoxy lijm voor plastic.3. cutt
Eenvoudige DJI Phantom Gimbal Hack gratis

Eenvoudige DJI Phantom Gimbal Hack gratis

Stap 1: Hey Guys,Dit is mijn eerste instructable tot nu toe, en ik dacht dat ik zou doen op iets dat had mij echt in de war. Toen ik eerst kocht het een gimbal van ebay voor mijn dji phantom hebben de gimbal niet een merk of instructies. Toen ik voor
Maak je eigen goedkope servo

Maak je eigen goedkope servo

ik had een probleem met sommige servo's die ik voor mijn arduino gekocht maar ik weet niet waarom, ze maakten sommige vreemde geluiden en werden tekening te veel stroom. Dus besloten heb ik om mijn eigen servo's!. Eerste van alle zijn belangrijk om t
Castle Clash hack IOS Android en iPhone 2014 Online bijgewerkt

Castle Clash hack IOS Android en iPhone 2014 Online bijgewerkt

Hoe gratis hack Castle Clash hack IOS Android en iPhone 2014 Online bijgewerktStap 1: Castle clash hack gratis download voor mobiele apparatenCastle clash hack gratis download voor mobiele apparaten. Castle clash hack gratis downloaden Castle clash h
Omkeerbare No-solderen wijziging van Parallax standaard Servo naar continue rotatie

Omkeerbare No-solderen wijziging van Parallax standaard Servo naar continue rotatie

ik nodig om een aantal Parallax standaard servo's aan continue rotatie voor een kids' robot workshop-project te wijzigen.  Ik kwam met een methode die vereist geen solderen en laat de servo terug om de positie van de operatie indien gewenst te worden
Twee wielen Robot ontwerpen & simuleren

Twee wielen Robot ontwerpen & simuleren

Als je hebt gelezen mijn andere Instructables weet je dat ik heb een liefde voor LED en verlichting. Een ander gebied dat ook gelijktijdig intrigeert en frustreert me is robotica.Twee wielen robots zijn erg populair, omdat ze je veel over Robotica, e
Interactieve Child's mobiele

Interactieve Child's mobiele

wat kun je met fluorescerende acryl als de inspiratie?  We kozen een glow-in-the-dark-baby mobiel, met een begeleidende speelgoed maakt.  Dit project werd afgerond als onderdeel van de Computing en ambachtelijke klasse bij Olin College of Engineering
Vibrerende afstandssensor

Vibrerende afstandssensor

Stel je wakker naast een lichte slaper en je hebt om naar de badkamer maar je bent in een worp zwarte hotelkamer. Zelfs een zaklamp zal wakker hem of haar maar je niet kan houden voor de komende drie uur wanneer het alarm afgaat. Wat als u kon het na
Multi-Functional Star Wars Astromech Droid

Multi-Functional Star Wars Astromech Droid

E4-B4Astromech droid voor het huis.Video links voor mobiele apparaten die de videominiaturen bovenstaande animatie wordt niet afgespeeld:Het maken van E4-B4 Astromech Droid VideoE4-B4: Showcase Video, deel 1E4-B4: Rocket Man VideoE4-B4: Zin in een dr
3D afgedrukt humanoidrobot voor onder 1000.00 USD

3D afgedrukt humanoidrobot voor onder 1000.00 USD

dit idee werd geboren uit mijn eerste 3D gedrukte humanoïde robot project. Mijn 3D gedrukte DARwIn-OP kloon. Ik leerde veel bij het doen van dit project en ik ben nog steeds bezig met het verbeteren van deze robot. Mijn project hadden niettemin een g
DIY Password Managers met behulp van Kurety

DIY Password Managers met behulp van Kurety

Online veiligheid wordt elk jaar steeds belangrijker. Het schijnt als wij groeien exponentieel in technologie doen degenen die willen leven verergeren voor bedrijven en consumenten. Ik vond het mijn plicht om een stap uit de buurt van de crafty DIY e
Hoe start een raket naar de ruimte: binnen BURPG deel 3

Hoe start een raket naar de ruimte: binnen BURPG deel 3

Dit weekend zag de inaugurele testen van de Mk. IIB test platform. Dit is een statische testsysteem ontworpen om ons om te testen de stuwkracht-vectoring systeem dat zal worden gebruikt op de Mk. V-raket, die gaat de ene ruimte. Tijdens het testen, h
Candy Crush geheime gids uw vrienden met hoge Scores Don't Want You To Know About

Candy Crush geheime gids uw vrienden met hoge Scores Don't Want You To Know About

Klik hier nu http://www.youtube.com/watch?v=E2cLTfcgQ2c en krijgen de nummer 1 Candy Crush geheim gids te verslaan alle uw Facebook vrienden topscores 100 procent juridische en volledig Hack gratis techniekenAls u als me bent, hebt u waarschijnlijk g
PROTEI_007

PROTEI_007

Protei_007 is het zevende prototype voor een project genaamd Protei, die een open source is, scharnierend, gesegmenteerd, robotachtige, onbemande, zeilboot, oorspronkelijk gebouwd om te varen tegen de wind, een lang olie-absorberende boom, om te help