Controle van de positie van een Actuator met een analoge Sensor (2 / 3 stap)

Stap 2: programmeren


Het idee achter het programma is neem een lezing van de potentiometer (of andere analoge sensoren), neem een lezing van het standpunt van actuatoren en vergelijk ze. Als ze verschillend zijn, uit te breiden/intrekken de bedieningssleutel zodat deze overeenkomen met hen. We zullen de functie map() gebruiken om te vereenvoudigen van de vergelijking.

De map() functie heeft een bereik van waarden, en zet deze om in een ander bereik.

Bijvoorbeeld: Zeggen dat uw sensor geeft een input van 0-1023. Maar uw actuator geeft feedback van 400-600. U zou de functie map() van de potentiometer feedback, het bereik van 0-1023 dalen tot 400-600. Hierdoor heeft een gemakkelijkere vergelijking met uw sensor. De andere optie is om het bereik van de bedieningssleutel, van 400-600 tot 0-1023 stimuleren. De functie zou uitzien: kaart (variabele, 400,600,0,1023);

Als u een signaal neerzet, verliest u precisie. Als de sensor waarden van 0-1000 geeft, en je zet het neer op 400-600, wijzigt u uit een 1000 punt naar een bereik van 200 punten. Dat zal de precisie slechter maken met een factor 5. De sensor moet wijzigen 5 keer, 200, 201, 202, 203, 204, 205 voordat het verandert van 440 441. Hebt u een nauwkeurige applicatie, dit kan een probleem, maar voor de meeste gevallen, het moet goed zijn.

Hier is de code met commentaren verklaren van elk onderdeel, de code is ook aangesloten:

 /* Sample code to control the position of an actuator with potentiometer feedback using a MegaMoto. The main loop of this program checks the potentiometer, and moves the actuator accordingly. Written by Progressive Automations This example code is in the public domain. */ const int feedback = A0; //potentiometer from actuator const int pot = A1; //pot from throttle const int enable = 8; const int PWMA = 11; const int PWMB = 3; int actMax = 760; int actMin = 250;//positions of actuator int potMin = 0; int potMax = 1023; int precision = 2;//how close to final value to get int checkingInterval = 50;//how often position is checked (milliseconds) int rawcurrentPosition = 0; int currentPosition = 0; int rawdestination = 0; int destination = 0; int difference = 0;//values for knowing location void setup() { pinMode(feedback, INPUT);//feedback from actuator pinMode(pot, INPUT);//feedback from potentiometer pinMode(enable, OUTPUT); pinMode(PWMA, OUTPUT); pinMode(PWMB, OUTPUT);//three pins for MegaMoto digitalWrite(enable,HIGH); Serial.begin(9600); } void loop() { destination = getDestination(); currentPosition = analogRead(feedback);//check where you are Serial.print("Position "); Serial.println(analogRead(feedback)); difference = destination - currentPosition;//find out how far you are from the destination if (currentPosition > destination) pullActuatorUntilStop(destination);// choose what action to take else if (currentPosition < destination) pushActuatorUntilStop(destination); else if (difference < precision && difference > -precision) stopActuator(); }//end void loop int getDestination() { rawdestination = analogRead(pot);//read the potentiometer to get the destination destination = map(rawdestination, potMin,potMax,actMin,actMax);//convert the potentiometer feedback to match the actuator return(destination); }//end getDestination void pushActuatorUntilStop(int destination) { destination = getDestination(); int temp = analogRead(feedback); difference = destination - temp;//check difference to see if continue moving, or stop while (difference > precision || difference < -precision) { destination = getDestination(); temp = analogRead(feedback); //continue checking difference difference = destination - temp; pushActuator(); }//end while delay(25); stopActuator(); }//end pushActuatorUntilStop void pullActuatorUntilStop(int destination) { destination = getDestination(); int temp = analogRead(feedback); //check difference to see if continue moving, or stop difference = destination - temp; while (difference > precision || difference < -precision) { destination = getDestination(); temp = analogRead(feedback); //continue checking difference difference = destination - temp; pullActuator(); }//end while delay(25); stopActuator(); }//end pullActuatorUntilStop void stopActuator() { analogWrite(PWMA,0); analogWrite(PWMB,0); }//end stopActuator void pushActuator() { analogWrite(PWMB,255); analogWrite(PWMA,0); }//end pushActuator void pullActuator() { analogWrite(PWMB,0); analogWrite(PWMA,255); }//end pullActuator 

Gerelateerde Artikelen

Controle van een kleine Lineaire servomotor met Arduino

Controle van een kleine Lineaire servomotor met Arduino

Deze Arduino Lineaire Actuator Tutorial toont hoe de controle van een Firgelli kleine Lineaire servomotor met behulp van een Arduino compatibel board en verschillende input sensoren, waaronder een Slider en rotatie knop voor directe besturing, Joysti
Controle van een grote Lineaire servomotor met Arduino

Controle van een grote Lineaire servomotor met Arduino

Deze Arduino Lineaire Actuator Tutorial laat zien hoe om te doen basic handmatige bediening van een grote Lineaire servomotor met behulp van een Arduino en twee knoppen. In de eerste set van code, de eerste knop breidt de bedieningssleutel en het twe
Controle van een solenoïde met Arduino

Controle van een solenoïde met Arduino

Deze Arduino solenoïde Tutorial toont hoe de controle van een solenoïde gebruik van druktoetsen en een estafette met uw compatibele controller van Arduino. Elektromagneten zijn elektromagnetisch gedreven actuatoren. Wanneer spanning wordt toegepast o
Controle van een Camera met een Arduino en RS232 Shield

Controle van een Camera met een Arduino en RS232 Shield

Dit leerprogramma zal u tonen hoe u kunt controleren vele verschillende aspecten van de werking van een camera's met een Arduino. Deze bewerking kan worden de pan en tilt camera, zoom en focus van de lens, en RGB kenmerken. De Arduino zal gebruik mak
Controle van een magneetventiel met Scratch

Controle van een magneetventiel met Scratch

USB-controle van een magneetventiel met behulp van Lego Wedo robotica en "Scratch" programmeringR. D. Goodwin, W. Lecorchick, O. Ouatarra, Siderits, P. Mazari, C. RimmerMagneetafsluiters openen en sluiten met lage spanning RelaisWe illustreren h
Controle van een Computer met je gedachten!

Controle van een Computer met je gedachten!

Controle van uw computer met uw geest zeker lijkt iets nog steeds uit een sci-fi film, maar controle van de mening is eigenlijk een relatief gemakkelijke en goedkope iets te bereiken. Een goedkoop speelgoed van de EEG, laten we gebruiken de kracht va
Analoge versnellingsmeter controle van een Servo

Analoge versnellingsmeter controle van een Servo

Dit is een methode voor het besturen van een servo met behulp van de vierkante pulse output van een Memsic dual-axis versnellingsmeter. Echter, in tegenstelling tot andere methoden die gebruikmaken van een microcontroller-apparaat, zal ik u tonen u h
Controle van een LED licht-strip kleur via een Arduino en een iPhone over BLE

Controle van een LED licht-strip kleur via een Arduino en een iPhone over BLE

Dit leerprogramma zal u tonen hoe u kunt besturen van een analoge RGB LED light strip via een Arduino en een iOS-apparaat. Het zal gebruik maken van de lichtshow-app waarmee u één kleur instellen of het maken van een lichtshow met een reeks van kleur
Een analoge sensor van textiel verbinden met Arduino

Een analoge sensor van textiel verbinden met Arduino

Dit instructable wordt uitgelegd hoe u een analoge sensor op de Arduino aansluiten (in ons geval gebruikt een Lilypad).Materiaal dat u zal nodig:-een Lilypad Arduino (www.sparkfun.com)-een FTDI boord (www.sparkfun.com)-een USB A naar mini B kabel (ww
Bouwen van een analoge elektriciteitsmeter voor gebruik

Bouwen van een analoge elektriciteitsmeter voor gebruik

ik heb gebruikt een elektrische meter van Kill A Watt (http://www.p3international.com/products/special/P4400/P4400-CE.html) voor een tijdje en ik besloten om te bouwen van een analoge. Dit project ging van eenvoudig, met een ampèremeter één paneel en
Monteren van een Triple Sensor bord

Monteren van een Triple Sensor bord

Dit instructable laat zien hoe te monteren en de stukken van een triple sensor board solder.  Dit bord triple sensor zal worden gebruikt in de SALAMANDER sensoren project (salamandersensors.org) te voelen zowel licht en water stroming in de lokale wa
Controle van een OWI robotarm met Arduino

Controle van een OWI robotarm met Arduino

de OWI rand robotarm is een goedkope en geweldig 5-mate-van-vrijheid robotic arm dat alleen kost $37. Het is een grote kit met een kind op te bouwen en meer dan een paar uur tot finish zal niet duren. Uit de doos, kan het alleen worden gecontroleerd
Controle van een RC auto met behulp van de computer

Controle van een RC auto met behulp van de computer

In dit project, ik een goedkope getransformeerd RC auto behoort tot mijn zoon in een autonome auto met behulp van enkele eenvoudige stappen en Arduino. De auto kan worden gecontroleerd met de PC via seriële of USB-poort, of via de Arduino autonoom ka
Controle van een RepStrap met verwerking

Controle van een RepStrap met verwerking

dit instructable laat zien hoe u kunt vele openlijk beschikbare projecten samen een interessante en complexe systeem te bouwen. Zij is geïnspireerd op diverse communautaire projecten waaronder: RepRap, Arduino, verwerking, Linux en, natuurlijk, Instr