...........
شرح محرك السيرفو بالاردوينو ثلاث كودات لفهم اساس عمل Servo moto
في هذا الدرس سنتعلم كيفية التحكم بمحرك السيرفوموتور servomoteur) )
سوف نحاول التعرف علي السرفو متور عناصره طريقة عمله كيفية تحريك المحرك بمختلف الاتجاهات مع ثلاث كودات اردوينو مختلفه
المكونات
ServoMotor محرك سيرفو
10kΩ variable resistor’pot’
Breadboard
Arduino Uno R3
اسلاك توصيل
محرك السيرفو هو عبارة عن محرك يأتي مع علبة تروس تولد عزم أكبر، و يستطيع هذا المحرك الألتفاف 180 درجة و في بعض الأنواع 360 درجة
ولكي يبقى جهاز سيرفوموتور في موضع معين، يجب إرسال نبضة بطول يتراوح بين 1 و 2 ميلي ثانية كل 20 ميلي ثانية (أي بتردد 50 هرتز).
وتتطابق نبضة قدرها 1 ميلي ثانية واحدة مع زاوية 0 °.
النبضة من 2 ميلي ثانية تقابل زاوية 180 درجة.
وبإرسال نبضة بطول وسيط، يتم الحصول على زوايا مختلفة، بزاوية 90 درجة بنبضة تبلغ 1،5 ميلي ثانية، على سبيل المثال.
لمحرك السيرفو 3 اسلاك و هي
Vcc "و يكون بين 4.8 - 6 فولت" مدخل تغذية
Gnd مدخل الأرضي
مدخل التحكم و الذي نرسل الأوامر عبره لمحرك السيرف
فيديو الشرح
VIDEO
الكود 1 ..........
#include //import de la bibliothèque Servo
Servo accel; //création de l'objet Servo "accel"
int pinServo=9; //pin de commande du servo
int pinBouton=8;//pin de lecture du bouton poussoir
int cumul=0; //variable d'appui
void setup() {
pinMode(pinBouton,INPUT_PULLUP); //mode INPUT_PULLUP pour le poussoir
accel.attach(pinServo); //liaison de l'objet Servo au pin de commande
Serial.begin(9600);//pour lecture sur la console (Optionnel)
}
void loop() {
boolean etatBouton=digitalRead(pinBouton); //lecture de l'état du bouton
//si le bouton est appuyé
if (!etatBouton){// en mode INPUT_PULLUP on obtien 0 quand on appuie !
cumul++; // on fait augmenter la valeur de la variable
if (cumul>1000) //test limite d'augmentation
cumul=1000;//mise à limite si dépassement
}
//si le bouton n'est pas appuyé
else{
cumul--; //on fait diminuer la valeur de la variable
if (cumul<0) //test si limite de diminution
cumul=0;//mise à la limite si dépassement
}
Serial.println(cumul); //on affiche la valeur sur la console (Optionnel)
int pos=map(cumul,0,1000,0,4);//on mappe de 0 à 4 (5 positions) dans un variable pos
int angle=0; //on initialise une variable angle
switch (pos){// va switcher en fonction de la valeur pos
case 1:
angle=45;
break;
case 2:
angle=90;
break;
case 3:
angle=135;
break;
case 4:
angle=179;
break;
default:
angle=0;
}
accel.write(angle); //on place le servo à la position angle
}
الكود 3 ..........
#include
Servo monServo;
int pos = 0;
const int pinLed = 13; // Led sur le board
const long blinkTimeMs = 2000; // temps de clignotement de la led (2 sec)
const int FAST = 50; // interval entre deux clignotement (rapide)
const int SLOW = 150; // interval entre deux clignotement (lent)
const int FIXED = -1; // valeur spécial pour éclairage continu
void setup(){
pinMode( pinLed, OUTPUT );
// Attacher la pin 9 à l'objet servo.
// ATTN: le code initialise l'angle à 90 degrés par défaut.
monServo.attach(9);
// remettre l'angle à 0 degrés
monServo.write( 0 );
}
void loop(){
// Faire clignoter led 13 sur le board.
// Démarrage de séquence --> clignotement rapide
blinkBoardLed( FAST );
// Passer de 0 a 180° par angle de 10 degré
for( int iAngle=0; iAngle<= 180; iAngle+=10 )
{
monServo.write(iAngle);
delay( 250 );
}
// Clignotement lent entre deux séquences
blinkBoardLed( SLOW );
// Angle décroissant progressif
for( int iAngle = 180; iAngle>=0; iAngle-- )
{
monServo.write( iAngle );
delay( 10 );
}
// Clignotement lent entre deux séquences
blinkBoardLed( SLOW );
// Angle arbitraire de 45 degrés
monServo.write( 45 );
// Find de séquence -> eclairage fixe
blinkBoardLed( FIXED );
}
/* Fait clignoter la led 13 sur le board pendant 2 secondes
*
* interval: Interval de clignotement. -1 pour fixe.
*/
void blinkBoardLed( int interval ){
long startMillis = millis();
// temps que pas 2 sec d'écoulée
while( (millis() - startMillis) < blinkTimeMs ) {
switch( interval ){
case -1 : // Cas spécial, allumage fixe
digitalWrite( pinLed, HIGH );
delay( blinkTimeMs ); // attendre le temps total
digitalWrite( pinLed, LOW );
break;
default:
// faire clignoter
digitalWrite( pinLed, HIGH );
delay( interval );
digitalWrite( pinLed, LOW );
delay( interval );
} // eof Case
} // eof While
}
أمراً
مهماً جداً هو أن السيرفو يحتاج لنبضات دقيقة للتحكم به , و ليست كل مداخل
المتحكم مؤهلة للتعامل مع محرك السيرفو .
يمكنك استخدام أي مدخل من المداخل
التناظرية Analoge
(A0-A5) و استخدام المداخل الرقمية التي تدعم التعديل النبضي PWM و هي (D3,D5,D6,D9,D10,D11) " في
بطاقات الأردوينو التي تستخدم المتحكم ATMEGA328 مثل ال UNO
فني ستلايت
ردحذفيتوافر لدينا رقم فني ستلايت يتميز عن الجميع فى تقديم جميع الخدمات المختلفة التى تتعلق بالرسيفر والستلايت لذلك ان اردت ان تتعامل مع فني ستلايت عليك الاتصال بنا وسوف تستطيع الوصول الى فني ستلايت الكويت الذى يحترف هذا العمل ويقوم بتقديمه بأفضل صورة لهذه الخدمة
رقم فني ستلايت
https://www.satellitetechnician.net/
أزال المؤلف هذا التعليق.
ردحذفأزال المؤلف هذا التعليق.
ردحذف