ARDUINO Бионическая рука на радиоуправлении V6 и V9

Kelll31

★✩✩✩✩✩✩
29 Дек 2018
24
22
Где то
Сап всем!
Сегодня я расскажу как я упоролся по 3D печати, и сделал бионическую руку. Дело было месяц назад. Ко мне как раз приехал мой новый принтер, и поэтому я сразу собрал его и полез на Thingiverse. Полазив там минут 30 я наткнулся на этот ништяк --> www.thingiverse.com/thing:2782111 , осознав уровень заинтересованности я решил напечатать бионическую руку. Спустя 3 часа работы в Fusion 360 я сделал свою 3D модель.1546113215268.png
1546113398316.png
Напечатав её мне не понравился формфактор модели(т.к не было большого пальца, а сами фаланги нормально двигались только в одну сторону(пытался решить эту проблему с помощью резинок))
На следующий день я отрыл у себя гироскоп и сервы S3003 (клёвая тема) и поэтому поводу решил улучшить руку добавив движение по 2-м осям.
1546113626424.png
Как видно на фото в самих фалангах стало на одно отверстие больше (как это поможет увидите в конце))
1546113693892.png
Для перчатки мне понадобилось сделать модификацию (держалка платы ардуино), поэтому я быстро набросал 3D модель
1546114165065.png
Так же что бы избежать колхоза я сделал 3D модель перекрёстного крепления двух S3003
1546114266386.png
И вот закончив 3D моделирование я занялся прошивкой (на самом деле я делал это всё в перемешку))
Я решил создать управление руки на основе модуля NRF24L01 (т.к на тот момент у меня они завалялись). Что бы не глагольствовать напишу код сразу :
Перчатка
C++:
#include <SPI.h>                                      
#include <nRF24L01.h>                                  
#include <RF24.h>
#include "I2Cdev.h"
#include "MPU6050.h"
#include <Servo.h>
#if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE
#include "Wire.h"
#endif
MPU6050 accelgyro;
int16_t ax, ay, az;
int16_t gx, gy, gz;
RF24 radio(9, 10);                          
int data[7];
int potent1;
int potent2;
int potent3;
int potent4;
int potent5;
#define OUTPUT_READABLE_ACCELGYRO
bool blinkState = false;
const byte averageFactor = 5;
int sensorValue = 0;
void setup() {
  Serial.begin(38400);
radio.begin();                                
   radio.setChannel(5);
   radio.setDataRate     (RF24_1MBPS);
   radio.setPALevel      (RF24_PA_HIGH);
   radio.openWritingPipe (0x1234567890LL);
    #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE
        Wire.begin();
    #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE
       Fastwire::setup(400, true);
    #endif
    Serial.println("Initializing I2C devices...");
    accelgyro.initialize();
    Serial.println("Testing device connections...");
    Serial.println(accelgyro.testConnection() ? "MPU6050 connection successful" : "MPU6050 connection failed");
}

void loop() {
    accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
    #ifdef OUTPUT_READABLE_ACCELGYRO
        Serial.print("a/g:\t");
        Serial.print(ax); Serial.print("\t");
        Serial.print(ay); Serial.print("\t");
        Serial.print(az); Serial.print("\t");
        Serial.print(gx); Serial.print("\t");
        Serial.print(gy); Serial.print("\t");
        Serial.println(gz);
    #endif

    #ifdef OUTPUT_BINARY_ACCELGYRO
        Serial.write((uint8_t)(ax >> 8)); Serial.write((uint8_t)(ax & 0xFF));
        Serial.write((uint8_t)(ay >> 8)); Serial.write((uint8_t)(ay & 0xFF));
        Serial.write((uint8_t)(az >> 8)); Serial.write((uint8_t)(az & 0xFF));
        Serial.write((uint8_t)(gx >> 8)); Serial.write((uint8_t)(gx & 0xFF));
        Serial.write((uint8_t)(gy >> 8)); Serial.write((uint8_t)(gy & 0xFF));
        Serial.write((uint8_t)(gz >> 8)); Serial.write((uint8_t)(gz & 0xFF));
    #endif
potent1 = analogRead(A3);
potent2 = analogRead(A2);
potent3 = analogRead(A1);
potent4 = analogRead(A0);
potent5 = analogRead(A6);
data[0] = potent1;                        
data[1] = potent2;  
data[2] = potent3;                      
data[3] = potent4;
data[4] = potent5;
data[5] = ax;
data[6] = ay;
Serial.println(ax);
Serial.println(ay);
radio.write(&data, sizeof(data));                
}
Рука
C++:
#include <SPI.h>                                      
#include <nRF24L01.h>                                
#include <RF24.h>      
#include <iarduino_MultiServo.h>
RF24 radio(9, 10);
iarduino_MultiServo MSS;
int q,w,e,r,t,y,u;
int data[7];
void setup() {
  delay(1000);
  MSS.servoSet(0, SERVO_SG90);
  MSS.servoSet(1, SERVO_SG90);
  MSS.servoSet(2, SERVO_SG90);
  MSS.servoSet(3, SERVO_SG90);
  MSS.servoSet(4, SERVO_SG90);
  MSS.servoSet(5, SERVO_FutabaS3003);
  MSS.servoSet(6, SERVO_FutabaS3003);
  MSS.begin();                                                
    radio.begin();                                    
    radio.setChannel(5);                              
    radio.setDataRate     (RF24_1MBPS);                
    radio.setPALevel      (RF24_PA_HIGH);            
    radio.openReadingPipe (1, 0x1234567890LL);        
    radio.startListening  ();
MSS.servoWrite(0,180);
MSS.servoWrite(1,180);
MSS.servoWrite(2,180);
MSS.servoWrite(3,180);
MSS.servoWrite(4,0);
MSS.servoWrite(5,80);
MSS.servoWrite(6,120);

     
}

void loop() {
   if(radio.available()){                            
        radio.read(&data, sizeof(data));              
   MSS.servoWrite(0,map(data[0],470,210,180,0));
   MSS.servoWrite(1,map(data[1],1025,760,180,0));
   MSS.servoWrite(2,map(data[2],410,120,180,0));
   MSS.servoWrite(3,map(data[3],1025,770,180,0));
   MSS.servoWrite(4,map(data[4],1025,900,0,100));
   MSS.servoWrite(5,map(data[5],-16000,16000,20,180));
   MSS.servoWrite(6,map(data[6],16000,-16000,160,20));
}
}
Схемы :
Рука
1546114474330.png

Перчатка
1546114437557.png


Думаю как собрать вы сами поймёте))
И вот что в конце получилось)
Ajy57WglAEo.jpg
MLPBX_j8ABQ.jpg
Dk8bqjaXH5k.jpg
zKcziZch724.jpg
oAHVscaDdWg.jpg
В конце у меня вышла довольно дешёвая и простая самоделка)) (кому интересно могу кинуть 3D модели)
Надеюсь я не утомил вас этой "Статьёй"

В проекте использовалось :
Arduino X2
Модуль питания NRF24L01 x2
NRF24L01 X2
Расширитель для серв на чипе PCA9685 X1
Потенциометр 10К X5
Шлейф от компа X1

В будующем перчатку заменю на ЭКГ модуль на чипе AD8232 (Супер ништяк), а руку на более правдоподобную (как получится).
P.s Пока пылилась V9 я успел проапгрейдить 3D модель до V35
1546115971810.png
1546115985417.png
Пальцы будут использованы с прошлой модели.
P.S Эта модель оказалась неудачной, поэтому я разработал новую.
Спасибо за просмотр))
 

Вложения

Последнее редактирование:

BoronnikovAI

✩✩✩✩✩✩✩
3 Авг 2018
17
8
Блин, очень круто получилось) Моделькой руки не поделишься? А то я как раз миоэлектричесеие протез ом занимаюсь, но до моделирования никак руки не доходят)
 

Kelll31

★✩✩✩✩✩✩
29 Дек 2018
24
22
Где то

Вложения