Styra en liten linjära ställdon med Arduino (3 / 7 steg)
Steg 3: Ladda upp koden till din Arduino
Du kan hitta här demonstrationen koden i RobotGeek bibliotek och verktyg enligt:
RobotGeekSketches -> Demos -> LinearActuator -> linearActuatorExpDemo -> linearActuatorExpDemo.ino
Denna kod kommer att få oss genom de följande tre avsnitten. Du kommer att behöva koppla in det linjära ställdonet i olika stift baserat på avsnittet i den handledning du arbetar på.
/***********************************************************************************
* RobotGeek linjära ställdon Experimenter's Kit Demo
* ________
* | \---------\___________________________
* __| | || --------------------|__
* (o | FIRGELLI | o || ____________________| o)
* |__________________/--------------------------||
*
*
* Följande skiss gör att du kan styra en Firgelli linjära ställdon med
* den RobotGeek Slider, RobotGeek knopp, RobotGeek Joystick och RobotGeek tryckknappar
*
* http://www.robotgeek.com/robotgeek-experimenters-kit-linear-actuator
*
*
* Ledningar
* Linjärt ställdon - Digital Pin 9 , 9, 10 eller 11
*
* Knopp-Digital Pin 10
* Joystick - Analog pinne 1
* Slider - Analog stift 2
*
* Tryckknapp - Digital stift 2
* Tryckknapp - Digital Pin 4
* Tryckknapp - Digital stift 7
*
* Tröjor för stift 3/5/6 och 9/10/11 ska anges till "VIN"
*
*
* Kontroll beteende:
* Flytta skjutreglaget eller ratten kommer att flytta den linjära ställdon att hålla absolut position.
* Flytta joysticken kommer att flytta det linjära ställdonet stegvis.
* Att trycka på en av knapparna flyttas linjärt ställdon till en förutbestämd plats.
*
***********************************************************************************/
Inkluderar
#include //Servo bibliotek kan användas för Firgelli Mini linjära manöverdon
Linjärt ställdon stift
CONST int LINEARPIN_BUTTON = 6; Linjärt ställdon påAnalog Pin 0
CONST int LINEARPIN_KNOB = 9; Linjärt ställdon påDigital Pin 9
CONST int LINEARPIN_SLIDER = 10; Linjärt ställdon påDigital Pin 11
CONST int LINEARPIN_JOYSTICK = 11; Linjärt ställdon påDigital Pin 6
Analog ingång Pins
CONST int KNOB_PIN = 0; Knopp på
CONST int JOYSTICK_PIN = 1; Joystick (vertikala) på Analog Pin 1
CONST int SLIDER_PIN = 2; Reglaget på analoga stift 2
Digital ingång Pins
CONST int BUTTON1_PIN = 2; -Knappen 1 på Digital stift 2
CONST int BUTTON2_PIN = 4; Knappen 2 på Digital Pin 4
CONST int BUTTON3_PIN = 7. Knapp 3 på Digital stift 7
Generiska Dödband gränser - inte alla joystics kommer att centrera på 512, så dessa gränser ta bort "drift" från styrspakar som är off-center.
CONST int DEADBAND_LOW = 482; minska värdet om drift uppstår, höja den för att öka känsligheten runt mittläget
CONST int DEADBAND_HIGH = 542; öka värdet om drift uppstår, minska den för att öka känsligheten runt mittläget
Max/min pulsvärden i mikrosekunder för de linjära manöverdon
CONST int LINEAR_MIN = 1050;
CONST int LINEAR_MAX = 2000.
variabler som ändras:
int button1State = 0; variabel för att läsa tryckknapp status
int button2State = 0; variabel för att läsa tryckknapp status
int button3State = 0; variabel för att läsa tryckknapp status
Servo linearKnob, linearSlider, linearButton, linearJoystick; skapa servo objekt för att styra de linjära manöverdon
int knobValue, sliderValue, joystickValue; variabler att hålla den sista behandlingen från analoga stiften. Värdet kommer att vara mellan 0 och 1023
int valueMapped; joystick värdena kommer att ändras (eller "mappas") till nya värden som ska skickas till det linjära ställdonet.
variabler för aktuella positionella värdet som skickas till det linjära ställdonet.
int linearValue_Knob = 1500;
int linearValue_Slider = 1500;
int linearValue_Button = 1500;
int linearValue_Joystick = 1500;
int hastighet = 2;
void setup()
{
initiera linjära manöverdon som servo objekt
linearKnob.attach(LINEARPIN_KNOB); fäster/aktiverar det linjära ställdonet servo-objekt
linearSlider.attach(LINEARPIN_SLIDER); fäster/aktiverar det linjära ställdonet servo-objekt
linearButton.attach(LINEARPIN_BUTTON); fäster/aktiverar det linjära ställdonet servo-objekt
linearJoystick.attach(LINEARPIN_JOYSTICK); fäster/aktiverar det linjära ställdonet servo-objekt
Analoga stift behöver inte initieras
använda writeMicroseconds till sätta de linjära manöverdon till deras standard positioner
linearKnob.writeMicroseconds(linearValue_Knob);
linearSlider.writeMicroseconds(linearValue_Slider);
linearButton.writeMicroseconds(linearValue_Button);
linearJoystick.writeMicroseconds(linearValue_Joystick);
}
void loop()
{
Förinställda positioner för knappkontroll
om tryckknappen trycks värdet linjär
button1State = digitalRead(BUTTON1_PIN);
om (button1State == hög) {
Ange positionsvärdet
linearValue_Button = 1300;
}
button2State = digitalRead(BUTTON2_PIN);
om (button2State == hög) {
Ange positionsvärdet
linearValue_Button = 1500;
}
button3State = digitalRead(BUTTON3_PIN);
om (button3State == hög) {
Ange positionsvärdet
linearValue_Button = 1700;
}
Analog direkt kontroll
Läs värdena från den analoga sensorer
knobValue = analogRead(KNOB_PIN);
sliderValue = analogRead(SLIDER_PIN);
linearValue_Knob = karta (knobValue, 0, 1023, LINEAR_MAX, LINEAR_MIN); Karta analoga värde från sensorn till det linjära ställdonet
linearValue_Slider = karta (sliderValue, 0, 1023, LINEAR_MAX, LINEAR_MIN); Karta analoga värde från sensorn till det linjära ställdonet
Inkrementell Joystick kontroll
joystickValue = analogRead(JOYSTICK_PIN); Läs värdena från joysticken
bara uppdatera om joysticken är utanför deadzone (dvs flyttade oustide mittläget)
om (joystickValue > DEADBAND_HIGH || joystickValue < DEADBAND_LOW)
{
valueMapped = karta (joystickValue, 0, 1023, hastighet, - hastighet); Mappa analogt värde från infödda joystick värde (0 till 1023) till stegvis ändring (hastighet till - hastighet).
linearValue_Joystick = linearValue_Joystick + valueMapped; Lägg till mappade joystick värde för att nuvärdet
linearValue_Joystick = begränsa (linearValue_Joystick, LINEAR_MIN, LINEAR_MAX); //
}
Använda writeMicroseconds till sätta det linjära ställdonet till dess nya position
linearKnob.writeMicroseconds(linearValue_Knob);
linearSlider.writeMicroseconds(linearValue_Slider);
linearButton.writeMicroseconds(linearValue_Button);
linearJoystick.writeMicroseconds(linearValue_Joystick);
Delay(10);
}