Сап всем!
Сегодня я расскажу как я упоролся по 3D печати, и сделал бионическую руку. Дело было месяц назад. Ко мне как раз приехал мой новый принтер, и поэтому я сразу собрал его и полез на Thingiverse. Полазив там минут 30 я наткнулся на этот ништяк --> www.thingiverse.com/thing:2782111 , осознав уровень заинтересованности я решил напечатать бионическую руку. Спустя 3 часа работы в Fusion 360 я сделал свою 3D модель.
Напечатав её мне не понравился формфактор модели(т.к не было большого пальца, а сами фаланги нормально двигались только в одну сторону(пытался решить эту проблему с помощью резинок))
На следующий день я отрыл у себя гироскоп и сервы S3003 (клёвая тема) и поэтому поводу решил улучшить руку добавив движение по 2-м осям.
Как видно на фото в самих фалангах стало на одно отверстие больше (как это поможет увидите в конце))
Для перчатки мне понадобилось сделать модификацию (держалка платы ардуино), поэтому я быстро набросал 3D модель
Так же что бы избежать колхоза я сделал 3D модель перекрёстного крепления двух S3003
И вот закончив 3D моделирование я занялся прошивкой (на самом деле я делал это всё в перемешку))
Я решил создать управление руки на основе модуля NRF24L01 (т.к на тот момент у меня они завалялись). Что бы не глагольствовать напишу код сразу :
Перчатка
Рука
Схемы :
Рука
Перчатка
Думаю как собрать вы сами поймёте))
И вот что в конце получилось)
В конце у меня вышла довольно дешёвая и простая самоделка)) (кому интересно могу кинуть 3D модели)
Надеюсь я не утомил вас этой "Статьёй"
В проекте использовалось :
Arduino X2
Модуль питания NRF24L01 x2
NRF24L01 X2
Расширитель для серв на чипе PCA9685 X1
Потенциометр 10К X5
Шлейф от компа X1
В будующем перчатку заменю на ЭКГ модуль на чипе AD8232 (Супер ништяк), а руку на более правдоподобную (как получится).
P.s Пока пылилась V9 я успел проапгрейдить 3D модель до V35
Пальцы будут использованы с прошлой модели.
P.S Эта модель оказалась неудачной, поэтому я разработал новую.
Спасибо за просмотр))
Сегодня я расскажу как я упоролся по 3D печати, и сделал бионическую руку. Дело было месяц назад. Ко мне как раз приехал мой новый принтер, и поэтому я сразу собрал его и полез на Thingiverse. Полазив там минут 30 я наткнулся на этот ништяк --> www.thingiverse.com/thing:2782111 , осознав уровень заинтересованности я решил напечатать бионическую руку. Спустя 3 часа работы в Fusion 360 я сделал свою 3D модель.
Напечатав её мне не понравился формфактор модели(т.к не было большого пальца, а сами фаланги нормально двигались только в одну сторону(пытался решить эту проблему с помощью резинок))
На следующий день я отрыл у себя гироскоп и сервы S3003 (клёвая тема) и поэтому поводу решил улучшить руку добавив движение по 2-м осям.
Как видно на фото в самих фалангах стало на одно отверстие больше (как это поможет увидите в конце))
Для перчатки мне понадобилось сделать модификацию (держалка платы ардуино), поэтому я быстро набросал 3D модель
Так же что бы избежать колхоза я сделал 3D модель перекрёстного крепления двух S3003
И вот закончив 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));
}
}
Рука
Перчатка
Думаю как собрать вы сами поймёте))
И вот что в конце получилось)
В конце у меня вышла довольно дешёвая и простая самоделка)) (кому интересно могу кинуть 3D модели)
Надеюсь я не утомил вас этой "Статьёй"
В проекте использовалось :
Arduino X2
Модуль питания NRF24L01 x2
NRF24L01 X2
Расширитель для серв на чипе PCA9685 X1
Потенциометр 10К X5
Шлейф от компа X1
В будующем перчатку заменю на ЭКГ модуль на чипе AD8232 (Супер ништяк), а руку на более правдоподобную (как получится).
P.s Пока пылилась V9 я успел проапгрейдить 3D модель до V35
Пальцы будут использованы с прошлой модели.
P.S Эта модель оказалась неудачной, поэтому я разработал новую.
Вложения
-
465.7 KB Просмотры: 35
Изменено: