تقديم
منذ أن كان عمري 16 عاما أصبحت مهتما بالإلكترونيات وبعدها بالروبوتيك. بعدما ارتفع مستواي قليلا في البرمجة باستعمال بطاقة أردوينو، قررت حينها أن أصنع روبوتا أكثر تشويقا من روبوت بسيط يعتمد على عجلتين. أحببت فكرة الحصول على روبوت بستة أرجل لكني لم يكن عندي المال اللازم لشراءه. لذلك قررت صنع واحد رخيص اعتمادا على محركات السيرفو وخشب قابل للقطع يدويا. |
|
سنصنع روبوتا سداسي الأرجل بفكين وعينين مركبتين كما هو الحال للحشرات سداسيات الأرجل. وطالما الإنسان يرى في ما خلق الله في الطبيعة فيحاكيه، فنحن أيضا سنحاكي إحدى الخنافس سداسية الأرجل، ولك الحق في تغيير الروبوت في يناسب ذوقك. |
|
الجزء 1: الأجزاء الرئيسية
جسم الروبوت والفكين
العربية إنجليزية فرنسية |
الكمية |
القيمة أو الصيغة |
ألواح خشبية Wooden planks Planches de bois |
2x3mm |
|
شريحة من الألمنيوم Sheet of aluminium Feuille d'aluminium |
||
مبدد حراري Heatsink Dissipateur de chaleur |
احصل عليه من الخردة |
|
طلاء (صباغة) paint |
سوداء |
|
شرائح إسفنجية صلبة EVA foam |
أحمر وأسود |
|
براغي وصمولات Screws with nuts |
55 |
3 mm |
محركات السيرفو Servos |
14 |
12 للأرجل 2 للفكين |
المتحكم بالسيرفو Servo controller |
USC 16-channel |
|
لوحة أردوينو Arduino board |
UNO مثلا |
|
مقوم كهربائي Voltage Regulator Régulateur de tension |
UBEC 8A/15A |
|
بطارية ليبو LiPo battery |
العينين والمتحكم
العربية إنجليزية فرنسية |
الكمية |
القيمة أو الصيغة |
صمامات ضوئية LED |
64 |
أسود |
90 |
أحمر |
|
أسلاك كهربائية Wires |
أحمر وأسود |
|
متحكم Microcontroller |
2 |
Atmega8 |
مقبس Socket douille |
28 pin |
|
متذبذب بلوري Crystal oscillator Quartz |
16 MHz |
|
مكثف سيراميكي Ceramic capacitor Condesateur ceramique |
4 |
22pF |
مقوم كهربائي Regulator Régulateur |
LM7805 |
|
مقاومات Resistors Resistance |
12 |
220 Ohm |
كابلات Cables |
الكثير |
المتحكم عن بعد
العربية إنجليزية فرنسية |
الكمية |
القيمة أو الصيغة |
مقبض البلايستايشن 2 PS2 Joysticks Manche à balai PS2 |
2 |
|
بلوك دبابيس Screw terminal blocks Borniers à vis |
||
مقاومات Resistors Resistance |
10KOhm |
|
اللوحة المثقبة للتجريب Bread board |
(Y use one with 700 points) |
|
مقاومة متغيرة خطية slide potentiometer Potentiomètre linéaire |
50Kohm |
|
بطاقة أردوينو نانو Arduino nano |
V3.0 |
|
مقياس التسارع Accelerometer Accéléromètre |
MMA7361 3 axis |
|
نموذج مرسل/مستقبل Transceiver module Emetteur-récepteur |
NRF24L01 2,4 GHz |
البرامج
Arduino IDE |
USC Software |
AutoCad 2012 |
الأدوات
منشار Saw |
ورق مرحاض Toilet paper |
مبرد Lime |
مقص Scissors |
مثقاب كهربائي Electric Drill |
مسطرة Rule |
غراء (لصاق) Glue (cyanoacrylate glue) |
قلم رصاص Pencil |
مقبض تمساحي Tweezers |
مفك براغي Screwdriver |
الخطوة 2: تصميم الأجزاء وصنع النموذج
قمت بتصميم الأجزاء لتناسب محركات السيرفو من صنف SG90. صممت النماذج على الورق. استعملت صفيحة خشبية سمكها 3 ملم. رسمت عليها النماذج على حسب حجم محركات السيرفو. وعدد الأجزاء التي احتجتها هي كالتالي: القطعة A: نحتاج لـ 48 وحدة القطعة B: نحتاج لـ 6 وحدة. القطعة C: نحتاج لـ 12 وحدة القطعة D: نحتاج لـ 12 وحدة. القطعة E: نحتاج لـ 12 وحدة القطعة F: نحتاج لـ 12 وحدة. القطعة G: نحتاج لـ 12 وحدة القطعة H: نحتاج لـ 12 وحدة. القطعة I: نحتاج لـ 6 وحدة القطعة J: نحتاج لـ 2 وحدة. |
الخطوة 3: التقطيع
كل حسب استطاعته. بالنسبة لي فقد استخدمت منشارا، ومبردا ومثقابا كهربائيا ويدي. قبل الشروع في التقطيع من الأفضل أن تنجز ثقوبا باستعمال مثقابا كهربائيا قطره 3 ملم. بعد القطع من المستحسن لك أن تبرد حافات القطع بالمبرد حتى تصبح ملساء. |
الخطوة 4: التلصيق
الأدوات التي استخدمتها هنا هي: لصاق شديد (غراء)، وورق المرحاض (للتنظيف)، ومقابض. سنحتاج لأربع قطع من أجل صنع كل رجل سنوصلها بمحرك السيرفو. إذن، لكل رجل قم بلصق قطعة B بقطعة C. وآخر شيء يجب أن تفعله هو إلصاق قطعتين H ببعضهما البعض.
ملاحظة: إذا خشيت من عدم مطابقة الثقوب، فيمكنك تنفيذ اللصق أولا ومن بعد ذلك تنجز الثقوب. |
الخطوة 5: التزويق والتجميل
الأدوات التي استخدمتها هنا هي: أغلفة سوداء وحمراء، ولصاق، ومقص، وقلم وصباغة. إذا اردت أن تتقنها جدا فعليك أن تصبغ القطع أولا ثم تغلفها بالأغلقة كما ترى في الصور. |
الخطوة 6: تركيب محركات السيرفو
الأدوات التي استخدمتها هنا هي: الكثير من البراغي، مفك براغي ومحركات السيرفو. |
الخطوة 7: توصيل الأجزاء الإلكترونية
الأدوات التي استخدمتها هنا هي: لوحة أردوينو، المتحكم (كونترولور 16-قناة) بمحركات السيرفو، ومنظم UBEC 8A، وبطاريات LIPO.
التغذية الكهربائية سيحتاج متحكم (كونترولور) السيرفو لمنبعين للطاقة: منبع تغذية محرك السيرفو ومنبع تغذية الشريحة.
تعتمد معايير التغذية الكهربائية لمحركات السيرفو على المواصقات التي تجدها مرافقة للمحركات ذاتها. مثلا، لمحرك السيرفو من صنف SG-90 تعذية كهربائية تتراوح بين 4 و 5 فولط. فلا تنسى أن تفحص الجهد الكهربائي الذي تحتاجه محركات السيرفو التي اخترتها لهذا المشروع. |
||
إذا كانت الشريحة ستوصل من خلال الدخل VSS، فيجب أن تكون التغذية الكهربائية تتراوح بين 6.5 و 12 فولط. |
||
توصيل أردوينو، والمنظم USC ومحركات السيرفو
الأطراف التي تراها مؤطرة بالأحمر هي التي سيتم إيصال محركات السيرفو بها لتلقي الإشارة (احذر من مسألة الإتجاه عند التوصيل مع محركات السيرفو ).
لتوصيل الكونترولور USC، قم ببساطة بإيصال مربطه rx بالمربط tx لبطاقة أردوينو، وإيضا مربطه tx بالمربط rx لبطاقة أردوينو. بعدها صل مربطه GND ببطاقة أردوينو. |
الخطوة 8: البرمجة
قم بتحميل الملفات التالية التي ستحتاجها لصنع هذا الروبوت:
الأدوات التي استخدمتها هنا هي: برنامج أردوينو، وبرنامج USC، قم بتحميلهما من الملفات المذكورة.
قبل شروعك في البرمجة سيكون من الجميل معرفة القيم القصوى والقيم الدنيا لتحرك كل محرك من محركات السيرفو. لمعرفة هذا قم بتركيب الكونترولور USC داخل الروبوت. وحيث أننا سنبرمج المتحكم عن طريق الكابل USB، الذي سيصل الحاسوب بالروبوت، سنستطيع باستخدام البرنامج RIOS-USC التحكم بدوران المحركات واختبار نجاعة واتجاه دورانها.
بعد هذا الفحص الأولي، سننتقل لبرمجة بطاقة أردوينو من أجل التحكم بالمتحكم USC الذي بدوره سيتحكم بمحركات السيرفو. يعتبر الكونترولور USC جهازا تابعا، أي أن مهمته هو استقبال الأوامر وتنفيذها وفي المقابل فليس مهمته هي ”التفكير“.
مميزات بروتوكول الإتصال الذي استخدمناه هي كالتالي: serial communication (TTL level), baud rate 9600, no check bit, 8 data bits, 1 stop bit
التحكم في محرك واحد سنحتاج للأمر التالي: #1P1500T100\r\n بحيث ترمز:
التحكم في عدة محركات سنحتاج للأمر التالي: #1P600#2P900#8P2500T100\r\n بحيث ترمز:
في حدود دوران كل محرك، قم بحساب المجال الأقصى أو ”الخطوة“ لكل محركات السيرفو الأفقية لإيجاد أصغر خطوة من بينها جميعا وسنجعلها أقصى خطوة ندير بها محركات السيرفو. كما يجب فعل نفس الشيء مع محركات السيرفو العمودية. |
الخطوة 9: تصميم وتصنيع العينين
كنت أفكر في ما يمكنني إضافته للروبوت الخنفسابوت حتى أضفي عليه تصميما رائعا فوقع في خاطري تصميم عينين جذابتين يكون دروهما هو إظهار تفاعل الروبوت مع حركته والأوامر الصادرة من الشخص المتحكم به. لذلك قمت بعدة تصميمات لتشكيلات العينين ورسمتها على الورق، وفي النهاية راق لي التصميم الذي تراه في الصور وعلى الروبوت.
تتكون شاشة العين من زمرة تتألف من 32 صماما ضوئيا أزرق محيطة بمصفوفة مكونة من 5 صفوف و9 أعمدة لصمامات ضوئية حمراء. هذا من أجل جعل المصفوفة تظهر عدة إشعارات ثابتة ومتحركة على الشاشة. |
الخطوة 10: لوحة التحكم بالعينين
للتحكم بالعينين قمت بتصميمها على برنامج كما هو مذكور في المقال 1 ومن ثم طبعت التصميم على ورق لأنفذها بالطريقة المذكورة في المقال 3. المهم هذا يعتمد على الطريقة التي تختارها أنت:
|
الخطوة 11: الفكين
قبل أن أشرع في صنع الفكين، قما ببعض التصميمات له على ورق الكرتون من أجل إيجاد الشكل المناسب للروبوت الخنفسابوت. عندما وجدت الشكل الذي أبحث عنه صنعت الفكين من قطع الألمنيوم لمبدد كهربائي.
للتحكم في حركة الفكين استخدمنا محركي سيرفو معا. قمت أيضا بتزيينها بطليها بغطاء أسود وجوانب حمراء. يمكنك أيضا صباغتها لتلاءم شكل الخنفسابوت. |
الخطوة 12: تصميم الصندوق
الصور شارحة نفسها بنفسها. قم بتصميم الصندوق وصنعه كما تراه في الصور. |
الخطوة 13: النتيجة النهائية
تمثل هذه الخطوة اللمسات الأخيرة للروبوت. لكن خلال الخطوات القادمة سأقوم بشرح كيفية صنع مقبض التحكم التي من خلالها سنتحكم في روبوتنا. |
الخطوة 14: مقبض التحكم
الأدوات التي استخدمتها هنا هي: المنشار، والمبرد، والمثقب.
قمت بتصميم هذه اللوحات على برنامج كما هو مذكور في المقال 1 ومن ثم طبعت التصميم على ورق لأنفذها بالطريقة المذكورة في المقال 3. المهم هذا مرة أخرى يعتمد على الطريقة التي تختارها أنت:
صممت هذه اللوحات لتناسب حجم مقبض التحكم الخاص بجهاز الألعاب PS2. والسبب الرئيسي وراء تصميمي لهذه اللوحات الصغيرة هو تسهيل التوصيل بين حدي المقاومة المتغيرة والزر الضغطي الموجودة في بطاقة أردوينو. تضم هذه اللوحة مقاومة 10KOhm وهو الشيء الذي يجعل التوصيل بين الزر وأردوينو يحتاج لكابل فقط.
بعد الإنتهاء من صنعها قم بتوصيل الدبابيس التابعة للوحة مقبض التحكم على الشكل التالي:
|
الخطوة 15: كيف نستعمل النموذج 2.4GHz؟
قم بتحميل الملفات التالية التي ستحتاجها لصنع هذا الروبوت: |
|
استعملت نموذجين للتواصل اللاسكي/المذياعي من صنف nRF24L01 2.4GHz لتحقيق التواصل بين لوحتي أردوينو. مجال هذين النموذجين يقدر من مسافة 50 قدم إلى 2000 قدم.
وللمعلومة فقط، يعتمد هذين النموذجين على شريحة تسمى +nRF24L01 التي تضم خاصية الإرسال والإستقبال بتردد 2.4GHz، ومحلل الترددات المذياعية، ودارة منطقية تحوي بروتوكولا مسرعا للتواصل عن طريق الواجهة SPI. وهذين النموذجين يحتويان على هوائيتين مركبيتن داخليا.
يقوم النموذجين بالتواصل عن طريق إرسال واستقبال حزمة بيانات متوسطة الحجم خلال لحظة واحدة. في حالة إذا لم يتم ارسال أو استقبال البيانات بشكل صحيح، تقوم دارة تحديد الأخطاء وإعادة الإرسال بالمهمة لمعالجة هذه المشاكل. ويمكن لوحدة واحدة أن تتواصل في نفس الوقت مع 6 وحدات أخرى كاقصى حد.
استعن بالصورتين والجدول جانبه من أجل توصيل نموذج الإرسال والإستقبال ببطاقة أردوينو.
يجب أن تعرف أنه يجب عليك إيصال المربط VCC للنموذج بمربط 3.3V وليس 5.0V.
فيما يلي البرنامج الخاص بالأرسال وآخر خاص بالإستقبال. |
|
|
|
|
برنامج المرسل |
/* - WHAT IT DOES: Reads Analog values on A0, A1 and transmits them over a nRF24L01 Radio Link to another transceiver. 1 - GND 2 - VCC 3.3V !!! NOT 5V 3 - CE to Arduino pin 9 4 - CSN to Arduino pin 10 5 - SCK to Arduino pin 13 6 - MOSI to Arduino pin 11 7 - MISO to Arduino pin 12 8 - UNUSED
- Analog Joystick: GND to Arduino GND VCC to Arduino +5V X Pot to Arduino A0 Y Pot to Arduino A1 */
/*-----( Import needed libraries )-----*/ #include <SPI.h> #include <nRF24L01.h> #include <RF24.h>
/*-----( Declare Constants and Pin Numbers )-----*/ #define CE_PIN 9 #define CSN_PIN 10 #define JOYSTICK_X A0 #define JOYSTICK_Y A1
// NOTE: the "LL" at the end of the constant is "LongLong" type const uint64_t pipe = 0xE8E8F0F0E1LL; // Define the transmit pipe
/*-----( Declare objects )-----*/ RF24 radio(CE_PIN, CSN_PIN); // Create a Radio
/*-----( Declare Variables )-----*/ int joystick[2]; // 2 element array holding Joystick readings
void setup() /****** SETUP: RUNS ONCE ******/ { Serial.begin(9600); radio.begin(); radio.openWritingPipe(pipe); }//--(end setup )---
void loop() /****** LOOP: RUNS CONSTANTLY ******/ { joystick[0] = analogRead(JOYSTICK_X); joystick[1] = analogRead(JOYSTICK_Y); radio.write( joystick, sizeof(joystick) ); }//--(end main loop )-- |
برنامج المستقبل |
/* - WHAT IT DOES: Receives data from another transceiver with 2 Analog values from a Joystick - Displays received values on Serial Monitor 1 - GND 2 - VCC 3.3V !!! NOT 5V 3 - CE to Arduino pin 9 4 - CSN to Arduino pin 10 5 - SCK to Arduino pin 13 6 - MOSI to Arduino pin 11 7 - MISO to Arduino pin 12 8 - UNUSED */ /*-----( Import needed libraries )-----*/ #include <SPI.h> #include <nRF24L01.h> #include <RF24.h>
/*-----( Declare Constants and Pin Numbers )-----*/ #define CE_PIN 9 #define CSN_PIN 10
// NOTE: the "LL" at the end of the constant is "LongLong" type const uint64_t pipe = 0xE8E8F0F0E1LL; // Define the transmit pipe
/*-----( Declare objects )-----*/ RF24 radio(CE_PIN, CSN_PIN); // Create a Radio
/*-----( Declare Variables )-----*/ int joystick[2]; // 2 element array holding Joystick readings
void setup() /****** SETUP: RUNS ONCE ******/ { Serial.begin(9600); delay(1000); Serial.println("Nrf24L01 Receiver Starting"); radio.begin(); radio.openReadingPipe(1,pipe); radio.startListening();; }//--(end setup )---
void loop() /****** LOOP: RUNS CONSTANTLY ******/ { if ( radio.available() ) { // Read the data payload until we've received everything bool done = false;
while (!done) { // Fetch the data payload done = radio.read( joystick, sizeof(joystick) ); Serial.print("X = "); Serial.print(joystick[0]); Serial.print(" Y = "); Serial.println(joystick[1]); } } else { Serial.println("No radio available"); } }//--(end main loop )--- |
الخطوة 16: توصيل أداة التحكم والمقاومة المتغيرة الخطية
قمت أولا بتركيب جميع المركبات الإلكترونية، المكونة لمقبض التحكم، على لوحة التجريب المثقبة. قم ببساطة بتوصيل المرابط x وy وGND وVin لعصا كل مقبض للمرابط A0 و A1 و 5V وGND. والمقاومة المتغيرة الخطية بنفس الطريقة أيضا. |
الخطوة 17: كيف تستعمل مقياس التسرع MMA7361؟
قم بتحميل الملفات التالية التي ستحتاجها لصنع هذا الروبوت: |
يحتاج مقياس التسارع لقليل من الطاقة الكهربائية ويحتوي على دخل للتبديل بين النطاقين 1.5g± و 6g±. صفات أخرى يتضمنها مقياس التسارع من بينها: نمط السبات، شرطية الإشارة، مصفاة عبور منخفضة أحادية القطب، تعويضات درجة الحرارة، اختبار ذاتي، وتحديد السقوط الحر.
مميزاته هي كالتالي:
باستعمال المكتبة البرمجية للحساس AcceleroMMA7361 سيكون من السهل استعماله وبرمجته. الدوال التي يمكنك استخدامها من هذه المكتبة هي كالتالي: |
الدالة |
المهمة |
void begin() |
للتهيئة بنمط اعتيادي. |
void begin(int sleepPin, int selfTestPin, int zeroGPin, int gSelectPin, int xPin, int yPin, int zPin) |
للتهيئة بنمط الخاص. |
int getXRaw() |
ترجع بقيمة خام صحيحة للمحور X للمنفذ التناظري لبطاقة أردوينو. |
int getYRaw() |
ترجع بقيمة خام صحيحة للمحور Y للمنفذ التناظري لبطاقة أردوينو. |
int getZRaw() |
ترجع بقيمة خام صحيحة للمحور Z للمنفذ التناظري لبطاقة أردوينو. |
int getXVolt() |
ترجع بقيمة صحيحة للجهد الكهربائي بـ mV من المحور X للمنفذ التناظري لبطاقة أردوينو. |
int getYVolt() |
ترجع بقيمة صحيحة للجهد الكهربائي بـ mV من المحور Y للمنفذ التناظري لبطاقة أردوينو. |
int getZVolt() |
ترجع بقيمة صحيحة للجهد الكهربائي بـ mV من المحور Z للمنفذ التناظري لبطاقة أردوينو. |
int getXAccel() |
ترجع بقيمة صحيحة للتسارع من المحور X للمنفذ التناظري لبطاقة أردوينو (1G = 100.00). |
int getYAccel() |
ترجع بقيمة صحيحة للتسارع من المحور Y للمنفذ التناظري لبطاقة أردوينو (1G = 100.00). |
int getZAccel() |
ترجع بقيمة صحيحة للتسارع من المحور Z للمنفذ التناظري لبطاقة أردوينو (1G = 100.00). |
void getAccelXYZ(int _XAxis, int _YAxis, int _ZAxis) |
ترجع بقيم صحيحة للتسارعات للمحاور كلها. |
int getTotalVector() |
ترجع بقيمة صحيحة لمقدار متجهة التسارع. |
void setOffSets(int xOffSet, int yOffSet, int zOffSet) |
|
void calibrate() |
|
void setARefVoltage(double _refV) |
|
void setAveraging(int avg) |
تضع عدد القيم التي يجب أن يحسب متوسطها في الدالة getAccel، والإعتيادي فيها هو 10. |
int getOrientation() |
|
void setSensitivity(boolean sensi) |
إذا كان sensi يساوي HIGH فإن نسبة الحساسية ستصبح تساوي Gه1.5 -/+ إذا كان sensi يساوي LOW فإن نسبة الحساسية ستصبح تساوي Gه6 -/+ |
void sleep() |
تدفع الجهاز إلى نمط السبات (أي أن الجهاز سيصبح فاقدا للعمل) |
void wake() |
إذا كان الجهاز على نمط السبات فاستدعاء هذه الدالة يوقظه |
للمكتبة ثلاث نماذج بسيطة:
استعملت RawData للحصول على زاوية كل محور للمتحكم من أجل التحكم بالإنعطاف أو قل الميلان. |
#include <AcceleroMMA7361.h>
AcceleroMMA7361 accelero; int x; int y; int z;
void setup() { Serial.begin(9600); accelero.begin(8, 7, 6, 5, A5, A6, A7); accelero.setSensitivity(HIGH); //sets the sensitivity to +/-6G accelero.calibrate(); }
void loop() { x = accelero.getXRaw(); y = accelero.getYRaw(); z = accelero.getZRaw(); Serial.print("\nx: "); Serial.print(x); Serial.print("\ty: "); Serial.print(y); Serial.print("\tz: "); Serial.print(z); delay(500); //(make it readable) } |
الخطوة 18: تجميع الكل
ما بقي من التركيب هو وضع مقياس التسارع (accelerometer) على لوحة التحكم وتوصيله لبطاقة أردوينو نانو كما شرحنا في الخطوة السابقة. |
الخطوة 19: برمجة المتحكم عن بعد
اعتمادا على حدود حركة محركات السيرفو، يجب عليك أن تضع خارطة لقيم عددية تأمر بها بطاقة أردوينو لتحويل قيم المقاومة المتغيرة ومقياس التسارع إلى قيم داخل مجال دوران محركات السيرفو. الخارطة هي كالتالي: |
values[0] = map(values[0], 23, 1000, 900, 1500); //Value from slider pot values[1] = map(values[1], 23, 1000, 2100, 1540); //Value from slider pot values[3] = map(values[3], 1, 1033, -295, 295); //Value from y-axis of right joystick values[4] = map(values[4], 1, 1023, -295, 295); //Value from y-axis of left joystick values[5] = map(values[5], 1, 1023, -360, 360); //Value from x-axis of left joystick values[6] = map(values[6], 170, 500, -360, 360); //Value from x-axis of the accelerometer values[7] = map(values[7], 170, 510, -360, 360); //Value from y-axis of the accelerometer |
باستعمال أحد الأزرار على مقبضي التحكم أردت أن استعمل المثال المذكور في إحدى صفحات موقع أردوينو الذي يتمثل في عد عدد المرات التي يضغط فيها على الزر مما يؤدي إلى خلق نمط معين يستجيب له الخنفسابوت. http://arduino.cc/en/Tutorial/ButtonStateChange |
/* State change detection (edge detection) This example shows how to detect when a button or button changes from off to on and on to off. */
// this constant won't change: const int buttonPin = 2; // the pin that the pushbutton is attached to const int ledPin = 13; // the pin that the LED is attached to
// Variables will change: int buttonPushCounter = 0; // counter for the number of button presses int buttonState = 0; // current state of the button int lastButtonState = 0; // previous state of the button
void setup() { pinMode(buttonPin, INPUT); // initialize the button pin as a input pinMode(ledPin, OUTPUT); // initialize the LED as an output Serial.begin(9600); // initialize serial communication }
void loop() { buttonState = digitalRead(buttonPin); // read the pushbutton input pin if (buttonState != lastButtonState) { // compare the buttonState to its previous state // if the state has changed, increment the counter if (buttonState == HIGH) { // if the current state is HIGH then the button // wend from off to on: buttonPushCounter++; Serial.println("on"); Serial.print("number of button pushes: "); Serial.println(buttonPushCounter); } else { // if the current state is LOW then the button wend from on to off: Serial.println("off"); } } // save the current state as the last state, for next time through the loop lastButtonState = buttonState; // turns on the LED every four button pushes by // checking the modulo of the button push counter. // the modulo function gives you the remainder of // the division of two numbers: if (buttonPushCounter % 4 == 0) { digitalWrite(ledPin, HIGH); } else { digitalWrite(ledPin, LOW); } } |
أنشئت ثلاثة أنماط للتحكم بحركة الروبوت:
|
تأليف
تأليف: Deividmaxx
ترجمة بتصرف: محمد السهلي
المراجع
http://www.instructables.com/id/DIY-handmade-Hexapod-with-arduino-Hexdrake/?ALLSTEPS
التعليقات
www.facebook.com/Ibn.Alaqeed
هذا رابط الفيس الخاص بي ...
لكن رابطك غير موجود في الفايسبوك