مقدمـــــــــة عن المشروع
نتحدث اليوم عن التحكم في محرك السيرفو موتر من خلال لوحة المفاتيح أي ستكون المدخلات الاساسية لهذا المشروع هي الارقام المدخلة من لوحة المفاتيح تتم معالجتها من قبل الاردوينو لكي تخرج من خلال محرك السيرفو في قيم تماثلية تعكسها حركة السيرفو في التحرك من 0 درجة الي 180 درجة ذهابا وايابا .
متطلبات المشروع
1 x Arduino Uno or similar
1 x Keypad (4×4)
1 x Servo Motor
-
-
-
-
مواتير ودرايفرات, جميع المنتجات
محرك سيرفو 180 درجة SG90 Rotation Servo Motor
لمحة سريعة
- الموديل: SG90
- الوزن: 9 جم
- جهد التشغيل: 3.0 فولت ~ 7.2 فولت
- المكونات المؤازرة: JR
للاطلاع على فكرة مشروع تساعدك على برمجة واستخدام هذا المنتج
- عزم الدوران عند الكشك عند 4.8 فولت: 1.2 كجم سم
- عزم الدوران عند الكشك عند 6.6 فولت: 1.6 كجم سم
SKU: AA213
طريقة العمل والتوصيل
أولا تتم توصيل أطراف لوحة المفاتيح مع الاردوينو وهي من النوع 4×4 ويمكنك أستخدام 3×4 أذا كانت متوفرة لديك ولكن تكون بحاجة للتعديل في الكود البرمجي . يمكن تحميل الداتاشيت للوحة المفاتيح من هنا Keypad (4×4) datasheet .
ثانيا يوصل السيرفو مع الاردوينو علي حسب الموضح في المخطط التالي . يمكنك تحميل الداتاشيت لسيرفو موتو من هنا servo motor datasheet .
ملاحظة يمكنك أستخدام لوحة تجارب أذا شئت ويمكنك توصيل المكونات مباشرة مع الاردوينو .
أخير ربط الاردوينو مع الحاسب ورفع الكود البرمجي عليها .
الكود البرمجي
لتحميل الكود البرمجي اضغط هنا
#include <Keypad.h> #include <Servo.h> // Set up keypad variables: int numKeyPresses = 0; // Track number of key presses int maxKeyPresses = 3; // Only allow 3 digits to be entered int keyPresses[3] = { 0, 0, 0 }; // Initialize an empty array to hold input const byte numRows= 4; // # of rows on the keypad const byte numCols= 4; // # of columns on the keypad // Set up servo variables: int angle = 0; // Angle in degrees to position servo [0-180] int angleMultiplier = 1; // Multiply by each digit, divide by 10 on each input Servo servo; // Create the servo object int servoPin = 3; // Set the servo pin char keymap[numRows][numCols]= // Setup the keypad layout { {'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', '8', '9', 'C'}, {'*', '0', '#', 'D'}, }; // Connect keypad ROW0, ROW1, ROW2 and ROW3 to these Arduino pins. byte rowPins[numRows] = { 11, 10, 9, 8 }; // Connect keypad COL0, COL1 and COL2 to these Arduino pins. byte colPins[numCols] = { 7, 6, 5, 4 }; // Create the Keypad Keypad kpd = Keypad( makeKeymap( keymap ), rowPins, colPins, numRows, numCols ); void setup() { Serial.begin(9600); // Start up serial comms resetAngleMultiplier(); // Start accepting numeric input servo.attach( servoPin ); // Attaches the servo to the servo object } // setup void loop() { char key = kpd.getKey(); if( key ) // Check for a valid key { if( key >= 0x41 && key <= 0x44 || key == 0x23 || key == 0x2A ) { resetInput(); Serial.println( "ERROR: Numeric input only!" ); } // ^ if invalid entry else // Else, entry is valid: { angle += angleMultiplier * ( key - 0x30 ); angleMultiplier /= 10; if( numKeyPresses == maxKeyPresses - 1 ) { setServo( angle ); // Use the input to turn servo resetInput(); } else { numKeyPresses++; } Serial.println( (String) angle ); } } // if( key ) } // loop void setServo( int angle ) { if( angle > 180 ) angle = 180; Serial.println( "Setting servo to " + (String) angle + " degrees." ); servo.write( angle ); // Set the servo position } // setServo void resetAngleMultiplier() { angleMultiplier = 1; /* We started out with a multiplier of 10^0 (or 1). For each number we want to accept, we want to have a multiplier one order of magnitude greater. So, for example, for 5 digits, the multiplier starts out as 10 000. */ for( int i = 0; i < maxKeyPresses - 1; i++ ) angleMultiplier *= 10; } // resetAngleMultiplier void resetInput() { resetAngleMultiplier(); // Reset the numeric input angle = 0; // Reset the angle numKeyPresses = 0; // Reset number of key presses }