Arduino contrôlée Servo exerciseur (2 / 2 étapes)

Étape 2 :

Voici le programme complet - gratuit que vous pouvez utiliser comme vous voudrez...
Ce code a été testé intensivement et je ne suis pas au courant de tous les bogues !

/*************************************************************/
/ *** S W E E P U S E C S--programme de Servo-variateur V.110308 *** /
/ *** Mark Theobald-- www.DisabledAdventurers.com *** /
/*************************************************************/
#include < Servo.h >
#include < EEPROM.h >

Servo Servo1 ;                   Créer un objet de Servo
int CPOS = 1500 ;        Position actuelle (en uSecs)
int vitesse = 2500 ;        Vitesse du servo (1-100 * 300)
int DELAY = 1000 ;        Délai entre les balayages (0-5000 millisecondes)
int INCR = 1 ;              Incrément de servo (uSecs 1-50)
int CSTOP = 1 ;              S’arrêter au Centre (oui ou non)
int AMIN = 675 ;          Absolu Min (Minimum = 675)
int AMAX = 2325 ;        Maximum absolu (Maximum = 2325)
int MIN, MAX ;                    Courant MIN & MAX valeurs
int PCPTS ;                         Position centrale de Passes de balayage
int Ct, LoopCount ;          Quelques Variables globales
char String [80] ;               Un tampon de chaîne
int nombre ;                     Une nombre Variable

int ABYTE, EPAD ;           pour la lecture et l’écriture EEPROM

void StoreDefaults (void) ;
void RetrieveDefaults (void) ;
void CheckSerial (void) ;
void SweepTo (int Position) ;
void ManualRotation (void) ;
void ManualEntry (void) ;
void GetANumber (void) ;

/*************************************************************/
void setup() {}

Servo1.Attach (9, AMIN, AMAX) ;            Fixer le SERVO jusqu'à la broche 9
Servo1.writeMicroseconds (1500) ;     Position des Servo à Position centrale
Serial.Begin (115 200 bauds) ;                          Cela correspond dans HyperTerminal !
Serial.Print ("\n\r") ;                                  Afficher le Menu de l’opérateur

Serial.print( "-------------------------------------------- \n\r" );
Serial.Print (« S W E E P U S E C S--servovariateur programme \n\r ") ;
Serial.print( "-------------------------------------------- \n\r" );
Serial.Print ("s/S = vitesse, i/I = mouvement d’augmentation d’échelon, d/D = retard \n\r") ;
Serial.Print (« n/N = Min, m/M = Max, < espace > = Pause,? = affichage \n\r ") ;
Serial.Print ("C = Centre Stop, L/R = Mode manuel, X = Reset \n\r") ;
Serial.Print ("Z = Store Defaults, P = entrez manuellement les Postion \n\r") ;
Serial.print( "-------------------------------------------- " );

MIN = AMIN ;                    Initialiser le MIN et MAX valeurs absolue min & MAX valeurs
MAX = AMAX ;
RetrieveDefaults() ;        Lire toutes les valeurs pouvant avoir été stockées en EEPROM
while (!. Serial.available()) ;                Attendre pour n’importe quelle touche pour commencer
Serial.Read() ;   }

/*************************************************************/
void loop() {}

sprintf (String, "\n\r%06d:", ++ LoopCount) ;    Garder une trace des boucles
Serial.Print (String) ;
SweepTo (MAX) ;
Serial.Print ("CW") ;                  Indiquer le dernier mouvement
CheckSerial() ;
Delay (retard) ;

Si (CSTOP & & CCPP) {//We veut pas s’arrêter au centre & &
SweepTo (1500) ;                     Balayage passe position centrale
Serial.Print ("Centre") ;
CheckSerial() ;
Delay (retard) ;    }

SweepTo (MIN) ;
Serial.Print (« Convention ») ;
CheckSerial() ;
Delay (retard) ;

Si (CSTOP & & CCPP) {}
SweepTo (1500) ;
Serial.Print ("Centre") ;
CheckSerial() ;
Delay (retard) ;    }    }

/*************************************************************/
void RetrieveDefaults() {}
EPAD = 0 ;

ABYTE = int (EEPROM.read (EPAD ++)) ;
MIN = ABYTE << 8 ;
ABYTE = int (EEPROM.read (EPAD ++)) ;
MIN = MIN | ABYTE ;
Serial.Print ("\n\rMIN:") ;
Serial.Print (MIN, DEC) ;
Si (MIN < AMIN ||  MIN > = MAX) MIN = AMIN ;

ABYTE = int (EEPROM.read (EPAD ++)) ;
MAX = ABYTE << 8 ;
ABYTE = int (EEPROM.read (EPAD ++)) ;
MAX = MAX | ABYTE ;
Serial.Print ("MAX:") ;
Serial.Print (MAX, DEC) ;
Si (MAX < = MIN || MAX > AMAX) MAX = AMAX ;

CCPP = MIN 1500 < & & MAX > 1500 ;     Position centrale de Passes de balayage

ABYTE = int (EEPROM.read (EPAD ++)) ;
Vitesse = ABYTE << 8 ;
ABYTE = int (EEPROM.read (EPAD ++)) ;
VITESSE = VITESSE | ABYTE ;
Serial.Print ("vitesse:") ;
Serial.Print (vitesse / 100, DEC) ;
Si (vitesse < 100 ||  VITESSE > 30000) Vitesse = 2500 ;

ABYTE = int (EEPROM.read (EPAD ++)) ;
RETARD = ABYTE << 8 ;
ABYTE = int (EEPROM.read (EPAD ++)) ;
RETARD = RETARD | ABYTE ;
Serial.Print ("retard:") ;
Serial.Print (DELAY / 50, DEC) ;
Si (retarder < 0 ||  RETARD > 5000) DELAY = 1000 ;

ABYTE = int (EEPROM.read (EPAD ++)) ;
INCR = ABYTE << 8 ;
ABYTE = int (EEPROM.read (EPAD)) ;
INCR = INCR | ABYTE ;
Serial.Print (« INCR: ") ;
Serial.Print (INCR, DEC) ;
Si (INCR < 1 ||  INCR > 50) INCR = 50 ;    }

/*************************************************************/
void StoreDefaults() {}
EPAD = 0 ;

EEPROM.write (EPAD ++, char ((MIN >> 8) & 0x00FF)) ;
EEPROM.write (EPAD ++, char (MIN & 0x00FF)) ;

EEPROM.write (EPAD ++, char ((MAX >> 8) & 0x00FF)) ;
EEPROM.write (EPAD ++, char (MAX & 0x00FF)) ;

EEPROM.write (EPAD ++, char ((vitesse >> 8) & 0x00FF)) ;
EEPROM.write (EPAD ++, char (vitesse & 0x00FF)) ;

EEPROM.write (EPAD ++, char ((retard >> 8) & 0x00FF)) ;
EEPROM.write (EPAD ++, char (retard & 0x00FF)) ;

EEPROM.write (EPAD ++, char ((INCR >> 8) & 0x00FF)) ;
EEPROM.write (EPAD, char (INCR & 0x00FF)) ;    }

/*************************************************************/
void CheckSerial() {}
char clé ;

alors que {(Serial.available())
Si ((clé = Serial.read()) == de ' ||  Clé == les de ' ||  Clé == '?')    {
Si (clé == de ' & & vitesse > 300) Vitesse-= 300 ;
Si (clé == s ' & & vitesse < 30000) Vitesse += 300 ;
Si (clé == '?')  Serial.Print ("\n\r") ;
sprintf (chaîne, « vitesse: % d », vitesse / 300) ;     0 - 100
Serial.Print (String) ;    }

Si (clé == « i » ||  Touche « I » == ||  Clé == '?')    {
Si (clé == « i » & & INCR > 1) INCR--;
Si (clé == « I » & & INCR < 50) INCR ++ ;
sprintf (chaîne, "Incr:% d", INCR) ;            0 - 50
Serial.Print (String) ;    }

Si (clé == a ' ||  Clé == a ' ||  Clé == '?')    {
Si (clé == a ' & & retarder > 49) DELAY-= 50 ;
Si (clé == a ' & & retarder < 5000) retard += 50 ;
sprintf (chaîne, « retard: % d », retard / 50) ;     0 - 100
Serial.Print (String) ;    }

Si (clé == n ||  Clé == n ||  Clé == '?')    {
Si (clé == ' ne) si ((MIN-= 20) < AMIN) MIN = AMIN ;
Si (clé == ' ne) si ((MIN += 20) > MAX - 1) MIN = MAX - 1 ;
sprintf (chaîne, "Min:% d", MIN) ;
Serial.Print (String) ;
CCPP = MIN 1500 < & & MAX > 1500 ;    } //Sweep passes neutre

Si (clé == suis ' ||  Clé == suis ' || Clé == '?')    {
Si (clé == suis ') si ((MAX-= 20) < MIN + 1) MAX = MIN + 1 ;
Si (clé == suis ') si ((MAX += 20) > AMAX) MAX = AMAX ;
sprintf (chaîne, « Max: % d », MAX) ;
Serial.Print (String) ;
CCPP = MIN 1500 < & & MAX > 1500 ;    }

Si (clé == « c » ||  Clé == "C") {}
CSTOP = ! CSTOP ;
sprintf (String, "\n\rStop @ Centre = %s \n\r", CSTOP ? "Oui": "Non") ;
Serial.Print (String) ;    }

Si (clé == "") {}
Serial.Print ("Pause") ;
while (!. Serial.available()) ;      Pause - attendre pour n’importe quelle touche
Serial.Read() ;
Serial.Print ("Run") ;    }

Si (clé == « x » ||  Clé == 'X') {//Reset toutes les variables
VITESSE = 7500 ;
RETARD = 1000 ;
INCR = CSTOP = PCPTS = 1 ;
MIN = AMIN ;
MAX = AMAX ;    }

Si (clé == « r » ||  Clé == « R » ||  Clé == « l » ||  Clé == "L")
ManualRotation() ;

Si (clé == « z » ||  Clé == 'Z') StoreDefaults() ;

Si (clé == « p » ||  Clé == 'P') {}
tout en Serial.read() (Serial.available()) ;       Tampon Clear
ManualEntry() ;    }    }    }

/*************************************************************/
void ManualEntry() {}
Serial.Print ("MODE d’entrée \n\n\rMANUAL") ;
sprintf (String, "---MIN:% d, MAX: % d", MIN, MAX) ;
Serial.Print (String) ;
Serial.Print ("Position \n\rNumeric < entrez >, < espace > = sortie \n\r") ;

tandis que (1) {}
GetANumber() ;
Si (numéro < 0) return ;
sprintf (String, ": %d", numéro) ;
Serial.Print (String) ;

Si (nombre > = MIN & & numéro < = MAX) {}
CPOS = nombre ;
Servo1.writeMicroseconds (CPOS) ;
Serial.Print ("\n\r") ;    }

else {}
Serial.Print ("n’est pas dans la gamme \n\r") ;
sprintf (String, "%d - %d < Enter > ou < espace > à Exit...\n\r", MIN, MAX) ;
Serial.Print (String) ;    }    }    }

/*************************************************************/
void GetANumber() {}
char de Key = 0 ;

Nombre = 0 ;
tandis que (touche! = "") {}
Si {(Serial.available())
Si ((clé = Serial.read()) == 13) return ;     CR
Si (clés > 47 & & clés < 58) {//ASCII « 0 » t h vous êtes « 9 »
Si nombre (Number) * = 10 ;                    Aucune attaque ne zéros !
Numéro += (Key - 48) ;    }    }    }

Nombre = -1 ;
retour ;    }

/*************************************************************/
void ManualRotation() {}
char clé ;

Serial.Print ("MODE de ROTATION de \n\n\rMANUAL") ;
Serial.Print (« \n\rl/L=Left, r/R = droite, < espace > = sortie \n\r ") ;

tandis que (1) {}
Si {(Serial.available())
Si ((clé = Serial.peek()) == « p » ||  Clé == 'P') return ;

Si ((clé = Serial.read()) == "") {}
Serial.Print ("\n\r") ;
retour ;    }

Si (clé == « r » ||  Clé == « R » ||  Clé == « l » ||  Clé == "L") {}
Si (clé == « r » & & CPOS < AMAX) CPOS ++ ;

Si (clé == « R ») {}
Si (CPOS < AMAX - 9) CPOS += 10 ;
d’autre CPOS = AMAX ;    }

Si (clé == « l » & & CPOS > AMIN) CPOS--;

Si (clé == « L ») {}
Si (CPOS > AMIN + 9) CPOS-= 10 ;
d’autre CPOS = AMIN ;    }

Servo1.writeMicroseconds (CPOS) ;
sprintf (String, ": %d", CPOS) ;
Serial.Print (String) ;    }    }    }    }

/*************************************************************/
void SweepTo (int Position) {}

Si (CPOS < Position) tandis que ((CPOS += INCR) < = Position) {}
Servo1.writeMicroseconds (CPOS) ;
pour (Ct = Vitesse ; CT < 30000 ; CT++) ;    }

autre chose tout en ((CPOS = INCR) > = Position) {}
Servo1.writeMicroseconds (CPOS) ;
pour (Ct = Vitesse ; CT < 30000 ; CT++) ;    }

Si (CPOS! = Position) Servo1.writeMicroseconds (CPOS = Position) ;    }

/*************************************************************/
/ *** FIN PROGRAMME *** /
/*************************************************************/

Articles Liés

Arduino contrôlée Servo Robot (Serbes)

Arduino contrôlée Servo Robot (Serbes)

quoi de mieux pour commencer à expérimenter avec open source microcontrôleurs ( Arduino ), puis en construisant votre propre robot source ( CC (SA-de)) ?Que faire avec votre serbe ?(Voici) - comment connecter votre serbe à l'internet et le lecteur su
Arduino : Contrôle de Servo avec manette PS2 (programme Visuino)

Arduino : Contrôle de Servo avec manette PS2 (programme Visuino)

Dans ce Instructable, vous apprendrez comment programmer Arduino pour contrôler le moteur d'asservissement d'un contrôleur de Play Station 2 avec l'aide de Visuino - un environnement de développement graphique facile à utiliser pour Arduino.Veuillez
Comment faire le mot de passe du clavier en utilisant arduino pour contrôler des servos et conduit

Comment faire le mot de passe du clavier en utilisant arduino pour contrôler des servos et conduit

Dans ce projet, je vous dira comment faire mot de passe du clavier en utilisant arduino et pour contrôler des servos et dirigée.tout d'abord pour rendre simple clavier avec la touche 4 pour visite oupour tout projet et autres, allez à http://arduinoo
Contrôler les Servos en utilisant le contrôleur de Servo SSC-32 et Arduino Uno

Contrôler les Servos en utilisant le contrôleur de Servo SSC-32 et Arduino Uno

il y a deux façons à travers lequel vous pouvez contrôler des servos à l'aide d'un contrôleur de servo SSC-32. Vous pouvez soit le faire directement à partir de la lynx SSC-32 Terminal ou via des commandes séries envoyées par une carte arduino. Ici,
Comment contrôler les Servo moteurs avec un Arduino

Comment contrôler les Servo moteurs avec un Arduino

Ce projet de miniatures vous montrera comment contrôler un moteur servo avec un Arduino, mais vous devez d'abord savoir ce qu'un moteur d'asservissement est en réalité !Servo-moteurs sont des types spéciaux de moteurs qui ne tournent autour en cercle
Arduino HVAC Thermostat/contrôleur de Servo

Arduino HVAC Thermostat/contrôleur de Servo

Bienvenue sur mon « verts » instructable ! Je vais vous montrer comment utiliser un Arduino, deux servo moteurs un capteur de température et certains métaux (ou bois) pour faire un thermostat numérique d'une unité de ventilation à travers les murs.Se
Série Servo Controller w/Arduino - contrôle jusqu'à 12 Servos simultanément à l’aide de l’Arduino et une connexion USB

Série Servo Controller w/Arduino - contrôle jusqu'à 12 Servos simultanément à l’aide de l’Arduino et une connexion USB

je vais vous montrer comment utiliser votre Arduino pour commander jusqu'à 12 servos simultanément avec gigue minimale.  À l'aide d'une simple interface série, vous pouvez contrôler la position du maximum de 12 canaux de servo.  Vous pouvez sauvegard
Arduino base contrôleur de servo série

Arduino base contrôleur de servo série

il s'agit d'un simple contrôleur serial pour servos multiples basées sur l'Arduino. (mon premier instructable trop:))L'essentiel du travail dans ce provenait d'obtenir le logiciel pour parler avec l'arduino et de faire un protocole pour les données à
Accelero Android servo d’arduino contrôle via bluetooth (inventeur de l’app)

Accelero Android servo d’arduino contrôle via bluetooth (inventeur de l’app)

Ce bref didacticiel vidéo montrent la manière facile de contrôler votre servo avec l'accéléromètre du téléphone android.Application créée avec App Inventor 2.Désolé pour la dernière partie de la vidéo, ma webcam peu ralenti.
Communication Arduino de contrôle moteur servo avec MATLAB

Communication Arduino de contrôle moteur servo avec MATLAB

Bu projede matlab gui ile arduino haberleşmesi yapılarak servo motorun hareket etmesi sağlanmıştır.MATLAB ile arduino iletişimi için matlab arduino paketi dosyasını indiriniz.Kullanılan komponentler :Arduino UnoMoteur servoÉtape 1: vidéoPlus d'inform
Arduino contrôlée mangeoire pour animaux

Arduino contrôlée mangeoire pour animaux

Ce projet permet aux animaux de compagnie à être nourris à un taux constant qui n'implique pas de vous lever plus d'un doigt. Il y a une rampe d'accès dans la boîte qui permet aux aliments d'entrer dans la roue qui est actionnée par un servo qui dist
Faites-vous un Robot Arduino contrôlée de télécommande !

Faites-vous un Robot Arduino contrôlée de télécommande !

Bonjour les gars.Abhay et Akshay ici !Aujourd'hui que nous allons faire une TV distance contrôlée Robot que non seulement fonctionne comme un charme, mais vous pouvez également mettre à jour en éditant le code et en utilisant quelques boutons plus pr
Laser Galvo - Arduino contrôlée

Laser Galvo - Arduino contrôlée

Arduino contrôlée laser galvo. La servocommande de miroirs diriger le laser UV laissant une traînée phosphorescente sur la feuille de vinyle glow-in-the-dark.Posté sur notes.robives.comÉtape 1 :À partir d'une feuille de vinyle lumineux d'eBay et poin
Distributeur de friandise/chien Arduino contrôlée

Distributeur de friandise/chien Arduino contrôlée

Dans cette Instructables j'ai va décrire comment construire un distributeur de friandise/nourriture chien automatique utilisant un Arduino Duemilanove (l'Uno est la nouvelle version de la même planche). L'intervalle de minuterie peut être réglée via