Giới thiệu cảm biến EMG Điện cơ đồ EMG Electromyography là một kỹ thuật y học để đánh giá và ghi lạihoạt động điện được tạo ra bởi cơ xương, nhằm phát hiện các bất thường, mức độ kíchhoạ
Trang 1ĐẠI HỌC BÁCH KHOA
BÀI TẬP LỚN MÔN DUNG SAI VÀ KỸ THUẬT ĐO
ĐỀ TÀI: MÔ HÌNH CÁNH TAY ROBOT SINH HỌC (BIONIC
Trang 21.1 Giới thiệu cảm biến EMG 1
1.2 Cơ sở sinh học của bộ cảm biến EMG 2
1.3 Chọn lựa cảm biến EMG 3
2 Arduino uno R3 4
2.1 Sơ lược về Arduino Uno R3 4
2.2 Ứng dụng của Arduino Uno R3 6
2.3 Thông số kỹ thuật 7
3 DC SERVO 7
3.1 Tổng quan về DC SERVO AF-2941 7
3.2 Thông số kỹ thuật 8
3.3 Mạch điều khiển 8
4 Adapter, breadboard và hệ thống dây nối 9
4.1 Hệ thống dây nối 9
4.2 Nguồn adapter 9V 2A 9
4.3 Breadboard: 10
5 Sơ đồ đấu dây và thuật toán điều khiển 11
5.1 Sơ đồ đấu dây 11
5.2 Thuật toán và giải thích 12
6 Code Arduino 12
7 Thử nghiệm và kết Luận 18
7.1 Thử nghiệm 18
7.2 Kết Luận 18
Trang 31 Cảm biến EMG
1.1 Giới thiệu cảm biến EMG
Điện cơ đồ EMG (Electromyography) là một kỹ thuật y học để đánh giá và ghi lạihoạt động điện được tạo ra bởi cơ xương, nhằm phát hiện các bất thường, mức độ kíchhoạt hoặc để phân tích cơ chế sinh học chuyển động của con người hay động vật.EMG, hay Electromyography, là một công nghệ quan trọng trong y học và nghiêncứu cơ thể con người Nó ghi lại và phân tích các tín hiệu điện sinh ra từ hoạt động cơbắp trong quá trình co giãn Tín hiệu này là một biểu hiện điện của sự kích thích vàhoạt động của cơ bắp, mô tả các thay đổi về biên độ, tần số và pha trong thời gian xảyra
Mỗi đợt tín hiệu EMG phản ánh hành động của các đơn vị vận động (MU) - cácđơn vị cơ bắp cơ bản nhất - được điều khiển bởi hệ thống thần kinh Bộ não phát raxung thần kinh, truyền qua dây thần kinh đến các đơn vị vận động, gửi kích thích để
cơ bắp co bóp Trong trường hợp của những động tác cần độ chính xác và nhỏ, chỉmột số MU được kích hoạt Ngược lại, khi cần lực lượng lớn hơn, nhiều MU lớn hơnđược kích hoạt đồng thời
Tín hiệu EMG có thể được thu thập trên bề mặt da, dưới da và cung cấp các mứcthông tin khác nhau Nó được coi là bộ khuếch đại sinh học của các xung thần kinh,mang lại tỷ lệ tín hiệu trên tạp âm được cải thiện Trong vài thập kỷ qua, đã có nhữngtiến bộ công nghệ đáng kể, bao gồm thu nhỏ cảm biến và các thuật toán xử lý tín hiệutiên tiến Sự phát triển này đã giúp các cảm biến EMG và các tín hiệu EMG liên quan
có thể tìm thấy các ứng dụng trong nhiều lĩnh vực Trong y học điện chẩn đoán(EDX), EMG thường được sử dụng để bao phủ toàn bộ phổ kỹ thuật EDX bằng cách
sử dụng điện cực kim để ghi lại hoạt động điện của cơ
Tín hiệu EMG không chỉ ghi lại hoạt động cơ bắp mà còn chứa thông tin về sự traođổi hóa học trong cơ thể, như các ion kali và natri, tạo ra tiềm năng hành động (AP)trong các đơn vị cơ bắp
Điều này không chỉ mang lại thông tin về sự hoạt động cơ bắp, mà còn giúp hiểu
rõ hơn về cách não và hệ thần kinh tương tác, điều khiển các động tác vận động, và
Trang 41.2 Cơ sở sinh học của bộ cảm biến EMG
Hệ vận động của con người bao gồm hai phần: Phần thụ động bao gồm hệ xương
và hệ liên kết các xương (khớp xương), trong khi phần vận động liên quan đến hệ cơ
và hoạt động được điều khiển hoàn toàn bởi hệ thần kinh Cơ thể con người có ba hệ
cơ chính và được minh họa ở hình bên dưới: cơ vân (hay cơ xương), cơ vận động nộitạng (cơ trơn hoặc cơ tạng), và cơ vận động tim (cơ tim)
Hình 1:Các hệ cơ chính của cơ thể người
Trang 5- Cơ xương được các gân và xương gắn vào và được tác động đến chuyển động của xương
- Cơ trơn có ở trong thành của các cơ quan và cấu trúc như thực quản, dạ dày, ruột, phế quản, tử cung, niệu đạo, bàng quang, mạch máu, v.v
- Cơ tim (myocardium) có cấu trúc giống cơ xương và tìm thấy ở tim
1.3 Chọn lựa cảm biến EMG
EMG A10-09 là một mạch cảm biến cơ bắp rất dễ sử dụng, dùng để đo hoạt động
cơ bắp trong nghiên cứu y tế bằng các tín hiệu điện cơ (EMG) Cảm biến sẽ đo lọc,chỉnh lưu hoạt động điện của đầu ra cơ 0-VS Volts để lấy kích thước đầu ra tùy thuộcvào lượng hoạt động cơ bắp được chọn Dây và cảm biến có thể được sử dụng cho các
hệ thống điều khiển khác nhau
Trang 62 Arduino uno R3
2.1 Sơ lược về Arduino Uno R3
Hình 3: Arduino UnoArduino là một nền tảng mã nguồn mở được sử dụng để xây dựng các dự án điện
tử Arduino bao gồm cả bảng mạch lập trình (thường được gọi là vi điều khiển) vàmột phần mềm ( IDE ) được sử dụng để lập trình viết và tải mã máy tính lên bo mạch.Arduino Uno R3 được sử dụng vi điều khiển ATmega328, tương thích với hầu hếtcác loại Arduino Shield trên thị trường, có thể gắn thêm các module mở rộng để thựchiện thêm các chức năng như điều khiển motor, kết nối wifi hay các chức năng khác
Trang 7Sử dụng ngôn ngữ lập trình bắt nguồn từ C,C++ trên phần mềm riêng cho lập trìnhArduino IDE.
Arduino Uno R3 được kết nối trực tiếp với máy tính thông qua USB để giao tiếpvới phần mềm lập trình IDE, tương thích với Windows, MAC hoặc Linux Systems,tuy nhiên, Windows thích hợp hơn để sử dụng
Các chân nguồn
Arduino Uno R3 được cấp nguồn 5V qua cáp usb hoặc cấp nguồn ngoài thông quaAdaptor chuyển đổi , với điện áp khuyên dùng là khoảng 6-9V Có thể cấp nguồn từmáy tính qua cổng usb về
Các chân 5V, 3.3V là chân dùng để cấp nguồn đầu ra cho các thiết bị chứ khôngphải chân cấp nguồn vào
- Vin(Voltage Input): Dùng để cấp nguồn ngoài cho Arduino Uno, nối dươngcực vào chân nà và cực âm vào chân GND
- GND(Ground): Cực âm của nguồn điện cấp cho Arduino Uno Khi sử dụng cácthiết bị sử dụng những nguồn điện riêng biệt thì phải nối các chân này
- IOREF: Điện áp hoạt động của Arduino, có mức điện áp là 5V Không được sửdụng để lấy nguồn từ chân này
- RESET: Việc nhấn nút RESET trên mạch arduino tương tự như khi nối chânRESET với GND qua điện trở 10KΩ
Trang 8Hình 4: hình ảnh kết nối Arduino Uno R3
2.2 Ứng dụng của Arduino Uno R3
Aruino Uno R3 được sử dụng phổ biến trong việc tự thiết kế ra các mạch điện tử như điều khiển led, gửi dữ liệu lên lcd, điều khiển motor, hay được gắn thêm cácShield để kết nối nhiều module cảm biến khác để thực hiện thêm nhiều chức năng mở rộng như gửi dữ liệu qua wifi
Ngoài ra, trên thị trường còn có nhiều biến thể của Arduino Uno để thực hiện thêm các tính năng chuyên dụng, ví dụ như mCore, Orion trên mBot được chuyên dụng với việc dễ dàng phân biệt các loại module nào có thể sử dụng cắm vào trên các cổng để
dễ dàng sử dụng
Trang 92.3 Thông số kỹ thuật
3.1 Tổng quan về DC SERVO AF-2941
Động cơ DC này không phải là servo Nó giống như một động cơ DC cùng với bộtruyền động bánh răng bằng nhựa trong hộp Nó không phải là một động cơ siêumạnh, nó sẽ hoạt động tốt như một bánh xe robot nhỏ Nó cũng rẻ hơn rất nhiều so vớimicro servo (liên tục hoặc không liên tục) vì không có bảng điều khiển bên trong.Việc kiểm soát tốc độ được thực hiện bằng cách điều khiển các dây dẫn nguồn vàbằng cách điều khiển xung điện, hướng điều khiển được thực hiện bằng cách hoán đổicực nguồn - giống như bất kỳ động cơ DC có chổi than nào Chạy từ 4-6VDC Loạiđộng cơ này không thể điều khiển trực tiếp từ chân vi điều khiển Mà phải có cầu Hnhư L293D, TB6612 hoặc Tấm chắn động cơ, HAT động cơ hoặc Động cơ DC +Cánh lông bước Động cơ đi kèm với 2x ốc vít và 2x đai ốc để gắn vào khung máy.Không có mặt bích
Trang 10hoặc sừng - nó được thiết kế để gắn với các bánh xe nhỏ, có một ốc vít để gắn vào khichúng được cắm vào nhau.
Hình 5: Động cơ DC SERVO AF-2941
3.2 Thông số kỹ thuật
Kích thước: 32,3mm x 12,3mm x 29,9mm / 1,3" x 0,49" x 1,2"
Trọng lượng: 8,4g
Tốc độ không tải: 110RPM (4.8v) / 130RPM (6v)
Dòng điện chạy (khi không tải): 100mA (4.8v) / 120mA
(6v) Mô-men xoắn cực đại (4,8v): 1,3 kg/cm / 18,09 oz/in
Mô-men xoắn cực đại (6v): 1,5 kg/cm / 20,86 oz/in
3.3 Mạch điều khiển
Điều khiển động cơ servo với thư viện Arduino servo khá dễ dàng, nhưng mỗiđộng cơ đều tiêu tốn một chân pin quý giá - chưa kể đến sức mạnh xử lý của Arduino.Trình điều khiển servo qua 16 kênh PCA9685 sẽ điều khiển tối đa 16 servo qua I2Cchỉ với 2 chân Bộ điều khiển PLC trên bo mạch sẽ điều khiển đồng thời tất cả 16kênh mà không cần thêm chi phí xử lý Arduino
PCA9685 hoạt động với dải điện áp cung cấp là 2,3 V đến 5,5 V và đầu vào và đầu
ra có khả năng chịu được 5,5 V PCA9685 cho phép thời gian bật và tắt đầu ra của các
Trang 11chân so le để giảm thiểu xung dòng điện Thời gian trễ bật và tắt được lập trình độclập cho từng kênh trong số 16 kênh PCA9685 có bộ đếm gộp trước có thể lập trình đểđiều chỉnh độ rộng xung của nhiều thiết bị PCA9685 có chân đầu vào đồng hồ bênngoài sẽ chấp nhận đồng hồ do người dùng cung cấp (tối đa 50 MHz) thay cho bộ daođộng 25 MHz bên trong Tính năng này cho phép đồng bộ hóa nhiều thiết bị.PCA9685 cũng được tích hợp sẵn bộ tạo dao động để điều khiển PLC Tuy nhiên, tần
số được sử dụng để điều khiển PWM trong PCA9685 có thể điều chỉnh từ khoảng 24
Trang 12THÔNG SỐ KĨ THUẬT Adapter 9V 2A
- Điện áp đầu vào: AC100-240V 50/60HZ
- Đầu vào nguồn AC: chuẩn Hoa Kỳ
Breadboard là một công cụ hay thiết bị trong lĩnh vực điện tử, thường được sử dụng
để xây dựng mô hình nguyên mẫu của mạch điện tử mà không cần hàn hoặc sử dụngcác kết nối cố định Breadboard được thiết kế để giúp người làm việc trong lĩnh vựcđiện tử dễ dàng tạo và thay đổi mạch điện mà không cần sử dụng các kỹ thuật làmmạch cố định
Hình 8: Breadboard
Trang 135 Sơ đồ đấu dây và thuật toán điều khiển
5.1 Sơ đồ đấu dây
9685
Ngu
ồn 9v
Ngu
ồn 5v
Trang 14Thiết lập các thư viện cần thiết, xác định độ dài xung tối thiểu (xung PPM), xác
định các chân pin nối các cảm biến EMG.
#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>
Adafruit_PWMServoDriver mod_1 = Adafruit_PWMServoDriver(0x40);
#define SERVOMIN 90 //độ dài xung tối thiểu; xung PPM
5V-5.2 Thuật toán và giải thích
Giải thích thuật toán, do tín hiệu đọc từ cảm biếm EMG thông qua câu lệnhAnalog.read có độ nhiễu quá cao Bởi thế các hàm getStdDev sẽ lấy giá trị độ lệchchuẩn của các giá trị cảm biến đồng thời làm giảm độ nhiễu của cảm biến, khiến choviệc đọc giá trị và xác định ngưỡng kích hoạt dễ dàng hơn
Các hàm thuộc thư viện <Adafruit_PWMServoDriver.h>, sẽ cho phép ta điều khiểnnhiều servo cùng lúc Hàm handhold() và handlease() sẽ tiến hành xoay các servo mộtgóc 170 độ tương ứng với bàn tay nắm lại, hàm handlease() sẽ xoay các servo về lạigóc ban đầu tương ứng với bàn tay thả lỏng ra
Do cảm biến EMG sẽ cho ra các tín hiệu khác nhau ứng với từng người, từng vị tríkhác nhau, nên trước khi bắt đầu điều khiển servo ta tiến hành xác định ngưỡng kíchhoạt của các servo bằng cách tiến hành đo đạt giá trị độ lệch chuẩn của 6 Servo tại vịtrí ban đầu, sau đó tiến hành nắm tay lại để đo các ngưỡng kích hoạt của cảm biến,đây có thể gọi là giai đoạn setup và đặt ngưỡng
6 Code Arduino
Trang 15for (int i = 0; i < numReadings; i++)
{ total = total + val[i];
}
float avg = total/(float)numReadings;
return avg;
Trang 16/*
* Get the standard deviation from an array of ints
*/
float getStdDev(int * val, int numReadings)
{ float avg = getMean(val, numReadings);
long total = 0;
for (int i = 0; i < numReadings; i++) {
total = total + (val[i] - avg) * (val[i] - avg);
}
float variance = total/(float)numReadings;
float stdDev = sqrt(variance);
Trang 17float std1 = getStdDev(analogVals1, numReadings);
float std2 = getStdDev(analogVals2, numReadings);
float std3 = getStdDev(analogVals3, numReadings);
float std4 = getStdDev(analogVals4, numReadings);
float std5 = getStdDev(analogVals5, numReadings);
float std6 = getStdDev(analogVals6, numReadings);
Serial.print("Standard deviation: ");
Serial.println(std1);
Trang 20Tuy nhiên thiết bị còn tồn tại một số hạn chế về độ chính xác cao do chất lượnglinh kiện đi kèm theo giá thành Vướng mắc về sai số trong quá trình thu thập dữ liệu
đo đạc như: dung sai của các linh kiện điện tử, nhiễu do môi trường bên ngoài và cácthành phần bên trong mạch điện tử, sai số khi điện cực gắn trên da (da không đồngnhất về độ dày, mỏng, da khô hay khi đổ mồ hôi, v.v)
Trang 211 Dây breadboard là gì?, truy cập từ: la-gi.
http://arduino.vn/reference/day-breadboard-2 Nguyễn Sỹ Hiệp & Vũ Thị Nguyệt, “Nghiên Cứu Và Thiết Kế Bộ Thu NhậnTín Hiệu Điện Cơ EMG”, truy cập từ: