مقدمـــــــــة عن المشروع
نتحدث اليوم عن التحكم في محرك السيرفو موتر من خلال لوحة المفاتيح أي ستكون المدخلات الاساسية لهذا المشروع هي الارقام المدخلة من لوحة المفاتيح تتم معالجتها من قبل الاردوينو لكي تخرج من خلال محرك السيرفو في قيم تماثلية تعكسها حركة السيرفو في التحرك من 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
}




