Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.
Arduino
120 min
Share

تحكم فى محرك سيرفو بقبض عضلات يدك باستخدام الأردوينو

الأطراف الصناعية مثل اليد الصناعية، هي أجهزة تهدف إلى محاكاة الوظائف الطبيعية للأيدي البشرية. ولتحقيق هذا الهدف، كان لابد من إيجاد طرق مبتكرة للتحكم في حركة اليد الصناعية بطريقة طبيعية ودقيقة، ومن هذه الطرق استخدام حساس حركة العضلات.

Project Video

Overview

في هذا المشروع، سنقوم بتطوير نظام يتحكم في محرك السيرفو باستخدام إشارة كهربائية يتم توليدها من قبض عضلات اليد. حيث سنستخدم حساس استشعار حركة العضلات وسنستخدم شاشة كريستالية لعرض حالة العضلة ما إذا كانت منقبضة أم منبسطة.

Getting the Items

Arduino Uno R3 (Voltaat Version)
Get Item
Arduino Muscle signal sensor EMG Sensor
Get Item
Disposable Non-woven ECG & EMG Electrode Pad
Get Item
SG90 Servo -Positional Rotation
Get Item
2×16 LCD with I2C Module
Get Item
Energizer MAX 9V1 Battery
Get Item
9V battery adapter
Get Item
Half-size Breadboard
Get Item
Jumper Wires - Male to Male (40 Pack)
Get Item
Jumper Wires – Male to Female (40 Pack)
Get Item

Steps

بعد الانتهاء من توصيلات الدائرة قم بتوصيل اقطاب الحساس على زراعك على العضلة التى تريد استشعار انقباضها او انبساطها كما فى الصورة التالية.

Wiring it Up

تأكد من توصيل البطاريات بطريقة صحيحة كما فى الصورة حتى يعمل الجهاز بشكل سليم.

قم بتوصيل الأسلاك بين لوحة الأردوينو ومستشعر حركة العضلات ومحرك السيرفو والشاشة كما هو موضح بالصورة التالية:

التوصيلات من الاردوينو الى لوحة التجارب  :

•منفذ ال 5 فولت ← المنافذ الموجبة بلوحة التجارب

•منفذ الجراوند ← المنافذ السالبة بلوحة التجارب

التوصيلات من محرك السيرفو :

•الطرف الموجب من محرك السيرفو ← المنافذ الموجبة بلوحة التجارب

•الطرف السالب من محرك السيرفو ← المنافذ السالبة بلوحة التجارب

•طرف الاشارة من محرك السيرفو ← منفذ رقم 9 فى لوحة الاردوينو

توصيلات الشاشة الكريستالية :

•منفذ VCC للشاشة الكريستالية ← المنافذ الموجبة بلوحة التجارب

•منقذ GND للشاشة الكريستالية ← المنافذ السالبة بلوحة التجارب

•منفذ SDA للشاشة الكريستالية ← منفذ رقم A4 للاردوينو

‍•منفذ SCL للشاشة الكريستالية ← منفذ رقم A5 للاردوينو

التوصيلات من حساس الـ EMG  :

• الطرف السالب من الحساس ← المنافذ السالبة بلوحة التجارب  

•طرف الإشارة من الحساس ← منفذ رقم A0 في لوحة الأردوينو  

التوصيلات من البطاريات:  

• الطرف الموجب من البطارية الأولى ← منفذ +Vs بحساس الـ EMG  

• الطرف السالب من البطارية الأولى ← المنفذ GND الأوسط بين +Vs  و -Vs بحساس الـ EMG  

• الطرف الموجب من البطارية الثانية ← المنفذ GND الأوسط بين +Vs  و -Vs بحساس الـ EMG  

• الطرف السالب من البطارية الثانية ← منفذ -Vs بحساس الـ EMG

Coding

/*

Voltaat learn (http://learn.voltaat.com)

Link for full tutorial:

Tutorial: Building a device to read and visualize muscle activity using an Arduino board and an EMG (electromyography) sensor,

the EMG sensor will capture electrical signals generated by muscle contractions. We will use a screen to display the results

visually and also display the results through a graph on the computer, and we will controll servo motor with the muscle movement.

Connections from the Arduino to the breadboard:

• Arduino GND pin → Breadboard ground line

• Arduino 5V pin → Breadboard 5V line

Connection from the LCD:

• VCC pin → breadboard 5v line

• GND pin→ breadboard GND line

• SDA pin→ Arduino analog pin A4

• SCL pin → Arduino analog pin A5

Connections from the EMG sensor:

• SIG pin → Arduino analog pin A0

• GND pin→ breadboard GND line

Connections from the Batteries:

• The positive terminal of the first battery → +Vs port on the EMG sensor

• The negative terminal of the first battery → Middle GND port between +Vs and -Vs on the EMG sensor

• The positive terminal of the second battery → Middle GND port between +Vs and -Vs on the EMG sensor

• The negative terminal of the second battery → -Vs port on the EMG sensor

*/

#include "Servo.h"

#include "LiquidCrystal_I2C.h"

#define THRESHOLD 100 // Threshold to determine hand state

int EMGPIN = A0; // Analog pin connected to Muscle Sensor V3 Board

#define SERVOPIN 3 // Digital pin for the single servo

#define UPDATE_INTERVAL 500 // Update interval in milliseconds

// Initialize the I2C LCD (Address 0x27, 16 columns, 2 rows)

LiquidCrystal_I2C lcd(0x27, 16, 2);

Servo servo; // Define a single servo

unsigned long previousMillis = 0;

void openServo() {

   servo.write(0); // Open position

   lcd.clear();

   lcd.setCursor(0, 0);

   lcd.print("Muscle: Relaxed"); // Display relaxed status

   pinMode(EMGPIN,INPUT);

}

void closeServo() {

   servo.write(170); // Close position

   lcd.clear();

   lcd.setCursor(0, 0);

   lcd.print("Muscle: Contracted"); // Display contracted status

}

void setup() {

   Serial.begin(9600); // Set baud rate to 9600

   servo.attach(SERVOPIN); // Attach servo to the specified pin

   lcd.begin(16,2); // Initialize I2C LCD

   lcd.backlight(); // Turn on backlight

   lcd.setCursor(0, 0);

   lcd.print("Muscle Sensor"); // Display initial message

   pinMode(EMGPIN,INPUT);

}

void loop() {

   unsigned long currentMillis = millis();

   int value = analogRead(EMGPIN); // Read EMG sensor value

   if (currentMillis - previousMillis >= UPDATE_INTERVAL) {

       previousMillis = currentMillis;

       if (value > THRESHOLD) {

           closeServo(); // Close the servo if signal exceeds threshold

       } else {

           openServo(); // Otherwise, open the servo

       }

       

       lcd.setCursor(0, 1);

       lcd.print("output:"); // Display contracted status

       lcd.print(value); // Display contracted status

   }

   

   Serial.println(value); // Print sensor value to Serial Monitor

   

}

Testing it Out

بعد رفع الكود البرمجي على لوحة الأردوينو، قم بقبض عضلات يدك وبسطها. ستجد أنه يتم التحكم في محرك السيرفو وتحريكه بناءً على قبض وبسط عضلات يدك، وسيتم عرض حالة عضلة ذراعك ما إذا كانت منقبضة أم منبسطة على الشاشة الكريستالية.

Resources

No items found.