Maintenant que c’est se balançant, je suppose que je vais rajouter les roues et le prendre pour un spin.
Photo 1: l’Arduino Uno connecté au pc et de servo et de potentiomètre 10 k qui mesure l’inclinaison du rotor gyroscope s’affiche. Le programme essaie de garder le niveau du rotor qui gardera à son tour le gyroscope équilibre sur les deux baguettes.
Remarque : pour un gyroscope équilibrer sur les baguettes du centre de masse (COM) doit être sur un centimètre au-dessus du rotor - un point qui m’a pris un certain temps à découvrir.
Photo 2: montre un gros plan du potentiomètre relié à l’axe de cardan du gyroscope. Il fonctionne très bien et est un indicateur précis de l’angle du rotor.
Photo 3: est un gros plan du mécanisme servo comptoir poids.
Photo 4: est un gyroscope à l’Université qui m’a donné une idée de comment faire mine.
Voici le programme complet :
Signal de servo est connecté à la broche 9 et la borne centrale de pot est connectée à A2. Aussi, vous devez connecter puissance servo et au sol et les deux broches de pot extérieur à 5 volts et encore sur l’Arduino.
Le moteur du gyroscope est alimenté séparément pour éviter toute interférence avec l’Arduino, bien qu’il pourrait probablement être actionné par le PWM de l’Arduino.
//******************************************************************************************************
#include
Servo servo1 ;
int servangle = 0 ; variable d’angle servo
int potPin = 2 ; Sélectionnez l’entrée pin pour le potentiomètre
int ledPin = 13 ; Sélectionnez le code pin de la LED
int val = 0 ; variable pour stocker la valeur provenant de la sonde
valInc int = 4 ;
int currAngle = 0 ;
int newAngle = 0 ;
int delayTime = 0 ;
void myServo (int newAngle, int angleInc, int curAngle, int incDelay) {}
Si (curAngle < newAngle) {}
pour (angle int = curAngle ; angle < newAngle ; angle += angleInc) {}
SERVO1.Write(angle) ;
Delay(incDelay) ; }
}
ElseIf (curAngle > newAngle) {}
pour (angle int = curAngle ; angle > newAngle; = angleInc d’angle) {}
SERVO1.Write(angle) ;
Delay(incDelay) ; }
}
}
void setup() {}
Serial.Begin(9600) ;
pinMode (ledPin, sortie) ; déclarer la ledPin comme une sortie
SERVO1.Attach(9) ;
SERVO1.Write(90) ;
}
void loop() {}
Val = analogRead(potPin) ; lire la valeur de la sonde du pot
delayTime = 10 ;
Si (val > = 420 & & val < = 435) digitalWrite (ledPin, HIGH) ; Allumez le ledPin
d’autre digitalWrite (ledPin, basse) ; désactiver le ledPin
Si (val > = 420 & & val < = 435) {newAngle = 90 ; delayTime = 40;}
ElseIf (val > = 300 & & val < 410) {newAngle = 50 ; delayTime = 1000;} forcer le dos vers le bas
ElseIf (val > 445 & & val < 500) {newAngle = 130 ; delayTime = 1000;} devant la force vers le haut
Serial.Print(Val) ; Serial.Print (« ang: ") ; Serial.println(newAngle) ;
Si (newAngle! = currAngle) {}
myServo(currAngle,newAngle,1,10) ;
Serial.Print(Val) ; Serial.Print (« ang: ") ; Serial.println(newAngle) ;
currAngle = newAngle ;
Delay(delayTime) ;
}
}
//******************************************************************************************************