Arduino kontrollerade animatronic trä huvud (läslampa) (2 / 27 steg)
Steg 1: Arduino ämnen som behandlas i detta Instructable (inc. Arduino skiss)
http://Arduino.cc/en/main/arduinoBoardUno
Jag har försökt att ta de praktiska detaljer frågor som uppstod i praktiken. Detta projekt riktar sig två huvudfrågor Arduino:
- Servo kontroll - hur du använder Arduino skript för att omvandla en fysisk ingång till något som mekaniskt kommer att kontrollera placeringen av ett fysiskt föremål i 2 dimensioner (ögonglober!)
- En enkel lampa krets - hur till få Arduino att konvertera signalen från indata och göra det slå ett ljus på och justera ljusstyrkan (mörkläggning)
Arduino gemenskapen är enorm (både i storlek och hjälpsamhet!). Detta projekt erkänner alla de människor som ger den.
Servo scripting är baserat på "Servo.h - avbrott-driven Servo bibliotek för Arduino med 16 bitars timers-Version 2"
av Michael Margolis. Respekt!
http://code.Google.com/p/Arduino/source/browse/trunk/libraries/servo/servo.h?r=1088
Den kompletta Arduino skissen redovisas här som referens. Det gick igenom 10 versioner att komma till detta.
Det finns inget mycket sofistikerad. Skriptet kommentarer förklara vad den gör.
I senare steg i detta Instructable, har jag lagt extra utökade kommentarer om koden inom ramen för specifika åtgärder (t.ex. för servostyrningar för ögonglober)
Detta är en ".ino" skiss. Detta är en senare Arduino format. Det började som en ".pde"
/*
Lampa huvud - arduino skiss att styra en fjärrkontroll läsa lampa huvud
Andrew Lewis januari 2012
Denna kod är i public domain.
Servo scripting är baserat på Servo.h - avbryta driven Servo bibliotek för Arduino använder 16-bitars timers-Version 2 av Michael Margolis. Respekt!
http://code.Google.com/p/Arduino/source/browse/trunk/libraries/servo/servo.h?r=1088
Version 10
Denna version använder tre potentiometrar (KRUKAR) som indata wired över spänning rälsen (varierar mellan 0 och 5V).
Variabel utspänning av varje separat styrning 2 servon och 2 lysdioder (drift som ett par)
Spänningen läses upp av arduino av 3 analoga ingångar (1 per pott)
Utgångarna från Arduino till servon är från digital stift, som använder puls modulering för att kontrollera spänning produktion.
Nätaggregatet är en standard 5V, en 2A. Måste det ha denna mängd nuvarande att driva servon och högeffekts-LED
*/
DEFINIERA LAMPOR
ställa in lampan pin-koder
CONST int lampPin = 5; förklarar den ANALOG INPUT pin-kod för signal - i
CONST int ledPinEyes = 3; antal LED utgångsstiftet för ögongloben lysdioder - ut
int valLamp = 0; variabel att läsa analog insignal från brytare till uppsättningen av lampor
SLUTET LAMPOR
DEFINIERA SERVON
#include < Servo.h > / / includes standard arduino servo klass
int delay_val = 5; tilldelar servo increment lag (fördröjning mellan tillämpa värden) för båda servon
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
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 1
SERVON
void setup() {
pinMode (lampPin, ingång); sätter upp digital pin som indata för på/av LED-ingångssignal (för ögonen)
pinMode (ledPinEyes, produktionen); / / Detta är utdata som slår på lampor på eller av
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
}
void loop() {
lampCheck(); / / Kontrollera lampan INPUT och justera ljusstyrka
servoCheck(); Kontrollera för servo ingångar och justera position
}
void servoCheck() {
servostyrningar
Servo 1---
valPot1 = analogRead(potPin1); läser värdet i potentiometern (värde mellan 0 och 1023)
digitalWrite (ledPinJoystick, hög);
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
// 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 * /
}
lampa funktioner * /
void lampCheck() {
valLamp=analogRead(lampPin);
valLamp = karta (valLamp, 20, 1023, 0, 255); skala den att använda den med servo (värde mellan 0 och 180)
valLamp = begränsa (valLamp, 0,255);
analogWrite (ledPinEyes, valLamp);
}