- MPU6050 자이로 스코프 및 가속도계 센서
- 플렉스 센서
- 3D 프린트 된 Robotic ARM 준비 :
- 필요한 구성 요소 :
- 회로도 :
- 장갑에 MPU6050 및 플렉스 센서 장착
- 로봇 팔을위한 Arduino Nano 프로그래밍
- Arduino를 사용한 제스처 제어 로봇 팔의 작동
Robotic Arms는 매혹적인 엔지니어링 창작물 중 하나이며, 인간의 팔처럼 복잡한 작업을 수행하기 위해 이러한 작업이 기울어지고 움직이는 것을 보는 것은 항상 매력적입니다. 이러한 로봇 팔은 용접, 드릴링, 페인팅 등과 같은 강렬한 기계 작업을 수행하는 조립 라인의 산업에서 흔히 볼 수 있으며 최근에는 복잡한 수술 작업을 수행하기 위해 고정밀 첨단 로봇 팔도 개발되고 있습니다. 이전에는 로봇 팔을 3D 프린팅하고 ARM7 마이크로 컨트롤러를 사용하여 DIY 픽 앤 플레이스 로봇 팔을 만들었습니다. 다시 동일한 3D 인쇄 로봇 팔을 사용하여 Arduino Nano, MPU6050 자이로 스코프 및 플렉스 센서를 사용하여 손 제스처로 제어 되는 로봇 팔을 만들 것 입니다.
이 3D 인쇄 로봇 팔 위치는 MPU6050 자이로 스코프 및 플렉스 센서 가 부착 된 손 장갑을 통해 제어됩니다. Flex 센서는 Robotic Arm의 그리퍼 서보를 제어하는 데 사용되며 MPU6050은 X 축 및 Y 축의 로봇 이동에 사용됩니다. 프린터가없는 경우 Arduino Robotic Arm 프로젝트를 위해 만든 간단한 판지로 팔을 만들 수도 있습니다. 영감을 얻으려면 이전에 Arduino를 사용하여 만든 Record and Play Robotic Arm을 참조 할 수도 있습니다.
자세히 알아보기 전에 먼저 MPU6050 센서와 플렉스 센서에 대해 알아 보겠습니다.
MPU6050 자이로 스코프 및 가속도계 센서
MPU6050은 MEMS (Micro-Mechanical Systems) 기술을 기반으로합니다. 이 센서에는 3 축 가속도계, 3 축 자이로 스코프 및 내장 온도 센서가 있습니다. Acceleration, Velocity, Orientation, Displacement 등과 같은 매개 변수를 측정하는 데 사용할 수 있습니다. 이전에 MPU6050을 Arduino 및 Raspberry pi와 인터페이스했으며 Self Balancing 로봇, Arduino Digital Protractor 및 Arduino 경사계와 같은 몇 가지 프로젝트를 구축했습니다.
MPU6050 센서의 특징:
- 통신: 구성 가능한 I2C 주소가있는 I2C 프로토콜
- 입력 전원 공급 장치: 3-5V
- 내장 된 16 비트 ADC는 높은 정확도를 제공합니다.
- 내장 DMP는 높은 계산 능력을 제공합니다.
- 자력계와 같은 다른 I2C 장치와 인터페이스하는 데 사용할 수 있습니다.
- 내장 온도 센서
MPU6050의 핀아웃 세부 정보:
핀 | 용법 |
Vcc | 모듈에 전원을 제공하며 + 3V ~ + 5V 일 수 있습니다. 일반적으로 + 5V가 사용됩니다. |
바닥 | 시스템 접지에 연결 |
직렬 클록 (SCL) | I2C 통신을위한 클럭 펄스 제공에 사용 |
직렬 데이터 (SDA) | I2C 통신을 통한 데이터 전송에 사용 |
보조 직렬 데이터 (XDA) | 다른 I2C 모듈을 MPU6050과 인터페이스하는 데 사용할 수 있습니다. |
보조 직렬 클록 (XCL) | 다른 I2C 모듈을 MPU6050과 인터페이스하는 데 사용할 수 있습니다. |
AD0 | 하나 이상의 MPU6050이 단일 MCU에 사용되는 경우이 핀을 사용하여 주소를 변경할 수 있습니다. |
인터럽트 (INT) | MCU에서 데이터를 읽을 수 있음을 나타내는 인터럽트 핀 |
플렉스 센서
Flex 센서는 가변 저항에 불과합니다. 센서가 구부러지면 플렉스 센서 저항이 변경됩니다. 그들은 두 가지 크기에서 일반적으로 사용할 수있는 2.2 인치 와 4.5 인치.
프로젝트에서 플렉스 센서를 사용하는 이유는 무엇입니까?
이 제스처 제어 로봇 암에서 플렉스 센서는 로봇 암의 그리퍼를 제어하는 데 사용됩니다. 핸드 장갑의 플렉스 센서가 구부러지면 그리퍼에 부착 된 서보 모터가 회전하고 그리퍼가 열립니다.
Flex 센서는 많은 응용 분야에서 유용 할 수 있으며 게임 컨트롤러, 톤 생성기 등과 같은 Flex 센서를 사용하여 몇 가지 프로젝트를 구축했습니다.
3D 프린트 된 Robotic ARM 준비:
이 튜토리얼에서 사용 된 3D 프린팅 로봇 팔은 Thingiverse에서 제공되는 EEZYbotARM 이 제공 한 디자인을 따라 만들어 졌습니다. 3D 프린팅 로봇 팔을 만드는 전체 절차와 비디오를 사용한 조립 세부 사항은 위에서 공유 한 Thingiverse 링크에 있습니다.
위는 4 개의 서보 모터로 조립 한 후 3D 프린트 된 로봇 팔의 이미지입니다.
필요한 구성 요소:
- Arduino Nano
- 플렉스 센서
- 10k 저항기
- MPU6050
- 손 장갑
- 전선 연결
- 브레드 보드
회로도:
다음 이미지는 Arduino 기반 제스처 제어 Robotic Arm 의 회로 연결을 보여줍니다 .
MPU6050과 Arduino Nano 간의 회로 연결:
MPU6050 |
Arduino Nano |
VCC |
+ 5V |
GND |
GND |
SDA |
A4 |
SCL |
A5 |
서보 모터와 Arduino Nano 간의 회로 연결:
Arduino Nano |
서보 모터 |
전원 어댑터 |
D2 |
서보 1 주황색 (PWM 핀) |
- |
D3 |
서보 2 주황색 (PWM 핀) |
- |
D4 |
서보 3 오렌지 (PWM 핀) |
- |
D5 |
서보 4 주황색 (PWM 핀) |
- |
GND |
서보 1,2,3,4 갈색 (GND 핀) |
GND |
- |
서보 1,2,3,4 빨간색 (+ 5V 핀) |
+ 5V |
플렉스 센서는 두 개의 핀을 포함한다. 분극 단자를 포함하지 않습니다. 따라서 핀 1 P1은 10k의 풀업 저항으로 Arduino Nano의 아날로그 핀 A0에 연결되고 핀 2 P2는 Arduino에 접지됩니다.
장갑에 MPU6050 및 플렉스 센서 장착
우리는 MPU6050과 Flex Sensor를 장갑에 장착했습니다. 여기서 유선 연결은 Glove와 로봇 팔을 연결하는 데 사용되지만 RF 연결 또는 Bluetooth 연결을 사용하여 무선으로 만들 수 있습니다.
모든 연결 후 제스처 제어 로봇 팔 의 최종 설정 은 아래 이미지와 같습니다.
로봇 팔을위한 Arduino Nano 프로그래밍
평소 와 같이이 튜토리얼의 끝 부분에 작업 비디오와 함께 완전한 코드 가 제공됩니다. 여기에 몇 가지 중요한 코드 줄이 설명되어 있습니다.
1. 먼저 필요한 라이브러리 파일을 포함합니다. Wire.h 라이브러리의 Arduino 나노 & MPU6050 사이 I2C 통신에 사용되는 servo.h 서보 모터를 제어.
#포함
2. 다음으로, 서보 클래스의 객체가 선언됩니다. 4 개의 서보 모터를 사용함에 따라 servo_1, servo_2, servo_3, servo_4와 같은 4 개의 객체가 생성됩니다.
서보 servo_1; 서보 servo_2; 서보 servo_3; 서보 서보 _4;
3. 다음으로 MPU6050의 I2C 주소와 사용할 변수를 선언합니다.
const int MPU_addr = 0x68; // MPU6050 I2C 주소 int16_t axis_X, axis_Y, axis_Z; int minVal = 265; int maxVal = 402; 더블 x; 이중 y; 이중 Z;
4. 다음으로 void 설정 에서 직렬 통신에 대해 9600의 전송 속도를 설정합니다.
Serial.begin (9600);
그리고 Arduino Nano와 MPU6050 간의 I2C 통신이 설정됩니다.
Wire.begin (); // I2C 통신 초기화 Wire.beginTransmission (MPU_addr); // MPU6050과 통신 시작 Wire.write (0x6B); // 레지스터 6B에 쓰기 Wire.write (0); // 6B 레지스터에 0을 기록하여 재설정 Wire.endTransmission (true); // I2C 전송 종료
또한 서보 모터 연결을 위해 4 개의 PWM 핀이 정의되어 있습니다.
servo_1.attach (2); // 정방향 / 역방향 모터 servo_2.attach (3); // Up / Down_Motor servo_3.attach (4); // Gripper_Motor servo_4.attach (5); // 왼쪽 / 오른쪽 _ 모터
5. 다음으로 void 루프 기능에서 다시 MPU6050과 Arduino Nano 사이에 I2C 연결을 설정 한 다음 MPU6050의 레지스터에서 X, Y, Z 축 데이터를 읽고 해당 변수에 저장하기 시작합니다.
Wire.beginTransmission (MPU_addr); Wire.write (0x3B); // regsiter 0x3B로 시작 Wire.endTransmission (false); Wire.requestFrom (MPU_addr, 14, true); // 14 레지스터 읽기 axis_X = Wire.read () << 8-Wire.read (); axis_Y = Wire.read () << 8-Wire.read (); axis_Z = Wire.read () << 8-Wire.read ();
그런 다음 MPU6050 센서에서 축 데이터의 최소값과 최대 값을 -90에서 90 사이의 범위에 매핑합니다.
int xAng = map (axis_X, minVal, maxVal, -90,90); int yAng = map (axis_Y, minVal, maxVal, -90,90); int zAng = map (axis_Z, minVal, maxVal, -90,90);
그런 다음 다음 공식을 사용하여 0에서 360까지의 x, y, z 값을 계산합니다.
x = RAD_TO_DEG * (atan2 (-yAng, -zAng) + PI); y = RAD_TO_DEG * (atan2 (-xAng, -zAng) + PI); z = RAD_TO_DEG * (atan2 (-yAng, -xAng) + PI);
그런 다음 Arduino Nano의 A0 핀에서 플렉스 센서 아날로그 출력 데이터를 읽고 플렉스 센서의 디지털 값에 따라 그리퍼의 서보 각도를 설정합니다. 따라서 플렉스 센서 데이터가 750보다 크면 그리퍼의 서보 모터 각도는 0도이고 750보다 작 으면 180 도입니다.
int 그리퍼; int flex_sensorip = analogRead (A0); if (flex_sensorip> 750) { 그리퍼 = 0; } else { 그리퍼 = 180; } servo_3.write (gripper);
그런 다음 X 축에서 MPU6050의 0에서 60까지 의 움직임은 서보 모터의 로봇 팔의 전진 / 후진 동작에 대해 0도에서 90 도로 매핑됩니다.
if (x> = 0 && x <= 60) { int mov1 = map (x, 0,60,0,90); Serial.print ("F / R 이동 ="); Serial.print (mov1); Serial.println ((문자) 176); servo_1.write (mov1); }
그리고 X 축에서 MPU6050의 250에서 360까지 의 움직임은 서보 모터의 UP / DOWN 모션 로봇 팔에 대해 0도에서 90 도로 매핑됩니다.
else if (x> = 300 && x <= 360) { int mov2 = map (x, 360,250,0,90); Serial.print ("위 / 아래 이동 ="); Serial.print (mov2); Serial.println ((문자) 176); servo_2.write (mov2); }
Y 축에서 MPU6050이 0에서 60까지 이동하면 서보 모터의 로봇 팔 왼쪽 이동에 대해 90도에서 180도까지 매핑됩니다.
if (y> = 0 && y <= 60) { int mov3 = map (y, 0,60,90,180); Serial.print ("왼쪽 이동 ="); Serial.print (mov3); Serial.println ((문자) 176); 서보 _4.write (mov3); }
300에서 360까지 Y 축에서 MPU6050의 이동은 서보 모터의 로봇 팔 오른쪽 이동에 대해 0도에서 90 도로 매핑됩니다.
else if (y> = 300 && y <= 360) { int mov3 = map (y, 360,300,90,0); Serial.print ("오른쪽 이동 ="); Serial.print (mov3); Serial.println ((문자) 176); 서보 _4.write (mov3); }
Arduino를 사용한 제스처 제어 로봇 팔의 작동
마지막으로 코드를 Arduino Nano에 업로드하고 MPU6050 및 Flex 센서가 장착 된 장갑을 착용합니다.
1. 이제 손을 아래로 움직여 로봇 팔을 앞으로 움직이고 위로 움직여 로봇 팔을 위로 움직입니다.
2. 그런 다음 손을 왼쪽이나 오른쪽으로 기울여 로봇 팔을 왼쪽이나 오른쪽으로 돌립니다.
3. 손 장갑의 손가락으로 부착 된 플렉스 케이블을 구부려 그리퍼를 연 다음 해제하여 닫습니다.
완전한 작업은 아래 주어진 비디오에서 보여줍니다.