Arduino kontrollerade animatronic trä huvud (läslampa) (13 / 27 steg)
I skissen finns initialisering koden till inkluderar servo biblioteket, deklarera variabler, definiera vilket stift är i användning etc. och funktionerna som anropas inom servoCheck() att köra koden som omplaceras servon.
Följande rad #include är biggy. Det ger i smart servo koden:
#include / / includes standard arduino servo klass (arkivet)
Nästa rad är att definiera en fördröjning (5 millisekunder) så servo inte är att vara alltför ofta justeras. Med ingen fördröjning, servon är att justeras hela tiden, och detta kan leda till utbrändhet. Om förseningen är för lång dock servon bli ryckig och långsam att svara.
int delay_val = 5; tilldelar servo increment lag (fördröjning mellan tillämpa värden) för båda servon
Servo kontroll bygger på analoga insignaler i form av variabel inspänningar, som Arduino konverteras till digitala värden (med andra ord nummer!) och sedan koden nedan används för att manipulera dessa nummer och skapa digitala utgångar för att flytta servon när ingångarna är varierande. Koden i servo.h biblioteket har alla grymta arbete. Koden måste du skriva sänder verkligen mycket enkel datavärden till funktioner från biblioteket för att göra det hända.
Inspänningar skapades med enkel variabla motstånd (potentiometrar), en för varje servo. Potentiometrar (KRUKAR) är lätta att återvinna från gamla elektriska kit, till exempel gamla radioapparater. Värdet på motståndet är inte särskilt viktigt. Vanligtvis är de 0-10 k ohm. För varje pott, två leverans polackerna är anslutna till marken (jorden) och 5V respektive och signal produktion är ansluten till en analog pin av Arduino.
Kopplingsschemat finns i steg 10. Det är mycket enkelt.
Denna bit förklarar första servo...
SERVO 1
Servo myservo; skapa objekt för att styra en servo servo
CONST int potPin1 = 0; förklarar vilken analog pin används för att ansluta analoga variabel spänning utdata från potentiometer 1 (kontroller servo 1)
int valPot1; variabel att läsa värdet från analoga PIN-koden för servo 1
SLUTET SERVO 1
Denna bit förklarar andra servo...
SERVO 2
Servo myservo2; skapa andra servo objekt för att styra en andra servo
CONST int potPin2 = 1; förklarar vilken analog pin används för att ansluta analoga variabel spänning utdata från potentiometer 2 (kontroller servo 2)
int valPot2; variabel att läsa värdet från analoga PIN-koden för servo 2
SLUTET SERVO 2
SERVON
void setup() {
När servon (myservo, myservo2) har förklarats, definieras de Arduino pin-anslutningarna:
bifoga servon
myservo.attach(5); tillmäter objektet servo servo på stift 5
myservo2.attach(9); fäster andra servo till pin 9 till andra servo objektet
}
När servon har definierats, 'servoCheck()' funktion definierades. Kallas i den Arduino standardfunktion 'Loop ()' för att upprepade gånger kolla för insatsvaror och konvertera dessa till utgångar som styr servon och översätta detta för att ögongloben rörelse.
void servoCheck() {
servostyrningar
Servo 1---
valPot1 = analogRead(potPin1); läser värdet i potentiometern (värde mellan 0 och 1023)
Den variabla valPot1 tar insignalen från en av potentiomaters.
För detta används kommandot analogRead(). Den berättar Arduino att konvertera raw analoga spänningen (inom intervallet 0 till 5 volt) till ett digitalt värde mellan 0 och 1023.
Servo koden behöver input värden mellan 0 och 179. Dessa värden används för att ange sin ståndpunkt. insatsen av 0 positioner servo spindeln på-90 grader och 179 ställer det i 90 grader. Nummerserier (0 - 1023 och 0-179) behöver skalas. Detta görs med hjälp av Arduino karta () funktionen. Detta tar de digitala värden (0 till 1023) levereras av funktionen analogRead() och skalar dem till ett tal mellan 0 en 179.
valPot1 = karta (valPot1, 50, 1000, 0, 179); skala den att använda den med servo (värde mellan 0 och 180)
myservo.write(valPot1); anger servo skalad värde
Delay(delay_val);
---servo 1 slutet
Detta är samma för andra servo
// servo 2 ------------------------
valPot2 = analogRead(potPin2); läser värdet i potentiometern (värde mellan 0 och 1023)
digitalWrite (ledPinJoystick, hög);
valPot2 = karta (valPot2, 50, 1000, 179, 0); skala den att använda den med servo (värde mellan 0 och 180)
myservo2.write(valPot2); anger servo skalad värde
Delay(delay_val);
---servo 2 slut
avsluta servostyrningar * /
}
Och det är allt det är