電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>易于使用的動力假肢開源分享

易于使用的動力假肢開源分享

2022-12-21 | zip | 0.22 MB | 次下載 | 免費

資料介紹

描述

一種易于使用的動力假肢——開源且價格合理。為適應持續(xù)發(fā)展而開發(fā)的簡單、有效、輔助技術。由一群勤奮的本科生為您帶來,他們熱衷于機器人技術被廣泛用于改善所有人生活質(zhì)量的未來愿景。雖然新技術的努力往往是揮霍無度的,但我們的腿的成本大約相當于一張中檔宜家沙發(fā)(550 美元)。

我們的項目和價格點在很大程度上依賴于新技術的利用,例如最近才出現(xiàn)的連續(xù) 3D 打印碳纖維。此外,我們的項目是完全開源的,因此學生、技術愛好者和截肢者都可以自由制造和完善它。我們希望該項目能夠立即提高感興趣的截肢者的功能質(zhì)量,并最終可能成為輔助技術領域擴散發(fā)展和未來研究的平臺。

?
?
?
?
1 / 4
?

信用到期的信用

該項目由猶他大學的Tommaso Lenzi 博士提出概念。這些材料全部由他的實驗室仿生工程實驗室贊助。去尤特斯。

?

pYYBAGORZM2AF4fwAAPjVQ4wNIE895.png
?

?

收集零件

要做的第一件事是訂購所有組件。他們需要幾天時間才能到達。我們已嘗試使用盡可能少的供應商,以避免不得不進行數(shù)十次采購。

拆卸鉆頭

該項目使用鉆頭,因為它是獲得強大的無刷直流電機電機控制器、行星齒輪組和可充電鋰離子電池的一種經(jīng)濟高效的方式。

?

3D打印

首選的 3D 打印機是 Markforged Mark Two,因為它能夠結合連續(xù)的碳纖維束,而 Ultimaker S5 則適用于 Tough PLA 組件。

我們用連續(xù)股碳纖維打印軸套連接器,以實現(xiàn)令人難以置信的 3D 打印重量強度比。前殼、后殼和電機外殼采用堅固的 PLA 印刷,用于初始原型制作,以降低成本并為這些組件設定基準。隨著我們繼續(xù)開發(fā),將探索使用 3D 復合打印機進行實驗以減輕重量并提高這些組件的耐用性。

總共需要制作六個打印文件:

  • 軸套接頭(碳纖維/瑪瑙復合材料)
  • 前殼(Tough PLA)
  • 后殼(Tough PLA)
  • 電機外殼(Tough PLA)
  • 墊片(Tough PLA)
  • 緊急停止(Tough PLA)

軸套連接器

使用具有以下設置的 Markforged Mark Two 或其他復合打印機

  • 噴嘴尺寸:標準
  • 打印層高:0.125 [mm]
  • 支持:瑪瑙
  • 填充率:37%
  • 碳纖維同心層數(shù):最多 15 個同心環(huán),所有墻壁都經(jīng)過加固,37% 填充,屋頂和地板層 5,墻層 3,三角形填充
  • 層數(shù):在第 139 - 278 層上加固,在所示尺寸中同心
pYYBAGOhJhWAHiSxAABahnfOkuo961.png
?

前殼、后殼和電機外殼

使用具有以下設置的 Ultimaker S5 或其他 Tough PLA 打印機

  • 噴嘴尺寸:AA 0.4
  • 印刷層高:0.2[mm]
  • 支持:PVA
  • 填充率:10%

墊片

使用具有以下設置的 Ultimaker S5 或其他 Tough PLA 打印機

  • 噴嘴尺寸:AA 0.4
  • 印刷層高:0.1[mm]
  • 支持:PVA
  • 填充率:100%

緊急停止

使用具有以下設置的 Ultimaker S5 或其他 Tough PLA 打印機

  • 噴嘴尺寸:AA 0.4
  • 印刷層高:0.06[mm]
  • 支持:PVA
  • 填充率:100%
poYBAGOhJhiAQIT5AABgheRdejc387.png
?

電子組裝

組裝電路板:

?
?
?
pYYBAGOhJhuAd72uAACCE2YgIM4461.jpg
?
1 / 2
?

在等待零件進來的同時,您需要訂購兩塊印刷電路板 (PCB)。一個用于主板,另一個用于地面反作用力 (GRF) 傳感器。您需要將 Gerber 文件發(fā)送到您最喜歡的制造廠。壓縮的 Gerber 文件可以在 GitHub 存儲庫上找到,文件路徑為“PCB -> Motherboard”和“PCB -> GRF”。隨訂單一起提交 .zip 文件。我們的董事會使用了以下細節(jié):

  • 層數(shù):2
  • 材質(zhì):FR4
  • 材料厚度:0.062 [英寸]
  • 單位尺寸:0.972 x 2.350 [in](主板)和 0.835 x 0.600 [in](GRF)
  • 銅重量:1 [oz]

當電路板到達時,在 BOM 中找到的參考標記中焊接適當?shù)慕M件(這些可以在與 Gerber 文件相同的文件路徑中找到)。

?
?
?
poYBAGOhJh2ASwR-AAB__vZXbVU859.png
?
1 / 2
?

如果您不知道如何將表面貼裝器件 (SMD) 安裝到 PCB,請觀看本教程。

組裝地面反作用力 (GRF) 傳感器:

將 3 [mm] 橡膠墊切成 52.0 x 52.0 [mm] 的正方形,然后在每個角上切出 10.0 x 10.0 [mm] 的正方形。它應該看起來大致像這樣。

pYYBAGOhJiKAYKKkAAAjABqKjqo289.png
?

以干凈的方式切割橡膠非常困難,但請盡力使線條筆直且切割成比例。這將使傳感器校準更容易,讀數(shù)更可靠。

接下來,我們需要將磁鐵安裝在底部金字塔的內(nèi)部(或者任何你用來連接塔的東西)。GRF 下死點到磁鐵上死點的最佳距離為 11.55 [mm],這也是最小距離。最大距離為 15.15 [mm]

pYYBAGOhJiSAFB2bAAA2fXF3SQA529.png
?

將電子設備安裝到主要結構上:

將緊急停止 (e-stop) 線穿過頂部金字塔平面的一側,然后收集慣性測量單元 (IMU) 線,并將 e-stop 和 IMU 線向下穿過金字塔平面,穿過指示的孔并引出靠近磁鐵(非鏈輪)側的軸。

?
?
?
poYBAGOhJjGAIMriAAEF09PWjao809.jpg
?
1 / 3
?

將這些和編碼器線沿著外殼干凈地布置到工字梁的通道,將它們固定在鏈條和鏈輪傳動系統(tǒng)之外。

將 GRF 的電線向上穿過工字梁上的底部金字塔平面。

?

pYYBAGOhXoOAcp9bAAAmuKlmsik972.png
?

將主板的電源線焊接到電池組連接器端子(抹刀連接器)。

?
?
?
poYBAGOhXoiAfE-sAAC0YylRpSk102.jpg
?
1 / 2
?

在此圖像中,焊接線是綠色到黑色端子(負極)和灰色到紅色端子(正極)。

如果您計劃使用定制電池(沒有電池監(jiān)控系統(tǒng))或電源運行腿,您還需要在紅色(正極)和黃色(參考)端子之間焊接一個 250 [Ohm] 電阻以復制牧田電池組中熱敏電阻的電阻。

注意:使用鋰電池很危險,因此請遵循正確的程序并確保裸露的電線不會短路。

布線完所有電線后,我??們需要將它們連接到主板。按照 GitHub 上文件路徑“PCB->Motherboard”中的引出線描述連接 20 位和 5 位 Molex 連接器

?
?
?
pYYBAGOhXouAex6PAACNVQCuM3A939.jpg
?
1 / 3
?

?

機械組裝

在組裝支腿之前,請務必準備好下面顯示和列出的所有零件。

poYBAGOhXpeAcOyvAAG8y_z5bnY179.png
?
poYBAGOhXqSAaMesAADeFMkmWhY955.png
?

1.組裝所需的第一步是修改軸套連接器襯套(第 3 部分)。如下圖所示,需要使用帶鋸將襯套切割成 0.5 [in] 的長度,然后去毛刺。然后需要將襯套安裝到軸套連接器(第 15 部分)。

poYBAGOhXqeAFq_7AAAhqmpR0us580.png
?

2.然后需要將 0.5 [in] 軸(第 13 部分)切割成 103 [mm],并擰上螺紋并攻絲以連接鏈輪。在軸兩端的中心鉆一個 5 [mm] 的孔,然后用 M6 螺栓攻絲。然后使用 1/2 [in]-13 模具,在軸的兩個外端創(chuàng)建螺紋。

pYYBAGOhXqqAbvpiAAAUNbi0b6U508.png
?

3.在軸套連接器 20 齒鏈輪(第 5b 部分)上,需要等距分布 4 個孔,并圍繞 0.5 [in] 孔的周邊鉆孔。孔的直徑需要為 3.4 [毫米],距鏈輪中心的距離為 8.89 [毫米](0.35 [英寸])(中心到中心測量值)。

poYBAGOhXqyAeWwYAAAk-69u3Ps091.png
?

4.接下來取出所有 4 [mm] 熱固插件并安裝在后殼(第 10 部分)上相應的 4 [mm] 間隙孔中。對頂部軸套連接器(第 15 部分)上的 3 [mm] 熱插件執(zhí)行相同操作。

pYYBAGOhXrGAaYoGAAAu1ryq7YY120.png
?

5.將兩個軸連同 0.5 [in] ID 襯套和相應的墊片一起安裝在框架的兩半之間。將編碼器(部件 12b)放入軸套連接器旁邊的槽中。固定所有螺栓以將外殼的兩個部分裝配在一起。左側 2 個螺栓為 M4-40 [mm](零件 6c),軸之間的 3 個螺栓為 M4-55 [mm](零件 6a),右側三個螺栓為 M4-50 [mm](零件 6b) ,底部軸邊緣的 2 個螺栓為 M4-25 [mm](第 6d 部分)。

poYBAGOhXraAPSzQAACKq2_d9Zw104.jpg
?

6.使用 M3-70 [mm] 螺栓(第 4a 部分)將頂部鏈輪(第 5b 部分)固定到軸套接頭上。

pYYBAGOhXr2APsHQAAAwBJUn1x4264.png
?

7.安裝電機(第 1 部分)并擰入用于電機外殼(第 11 部分)的 M4-12 [mm] 緊固件和 M4 螺母(第 6e 部分)。

?
?
?
poYBAGOhXsCATpdTAADg1x0mIrs676.jpg
?
1 / 2
?

8.在兩組鏈輪上安裝鏈條(第 7 部分)和主鏈節(jié)。

pYYBAGOhXsKAOz6qAACv84_k5Xo476.jpg
?

9.將 IMU(部件 12a)安裝到軸套連接器上。將 GRF(第 12d 部分)放置在連接框架的底部,然后是聚氨酯橡膠,最后是金字塔(第 8 部分)以將 GRF 固定到位。

pYYBAGOhXsSAfT8IAACoea5wc4M978.jpg
?
?
?
?
pYYBAGOhXseAFsm1AADShaTnIA4521.jpg
?
1 / 3
?

10.從電鉆手柄上切下 Makit 電鉆電池座,使其與頂部齊平。將電池端子(第 1 部分)和電機控制器固定在縮小的 Makita 電鉆外殼中。使用 M4-12 [mm] 螺釘將鉆頭外殼固定到后殼上。

?
?
?
poYBAGOhXsqAZO_vAABkAVGHJ8c837.jpg
?
1 / 2
?

代碼

您將需要 ArduinoTeensyduino(輕松)將 Teensy 4.0 上的以下代碼上傳到主板(第 12c 部分)。

傳感器驗證:

為確保所有傳感器和信號線都正常工作,請將代碼單獨上傳到 GitHub 的文件路徑“Verification -> verifying[sensorName]”。每段代碼都測試單個傳感器及其連接。

現(xiàn)在一切正常,讓我們開始移動這條腿。在首次啟動時嚴格遵循這些步驟至關重要,因為不正確的傳感器讀數(shù)會導致系統(tǒng)不穩(wěn)定。如果您運行了之前的所有代碼并且沒有返回任何錯誤,則傳感器讀數(shù)應該是正確的,但安全第一,請按照以下步驟操作:

注意:請勿在支腿通電時將 USB 數(shù)據(jù)線連接到主板,否則會損壞 Teensy。如果要在腿帶電的情況下連接主板,則USB電源和板卡電源必須分開。

  • 確保腿由頂部或底部金字塔固定
  • 關閉緊急停止(將紅色蓋帽向下推)
  • 使用 USB 轉 micro USB 電纜將計算機連接到主板
  • 上傳GitHub上“Integration -> testingPcontroller”文件路徑下的代碼到主板
  • 斷開計算機與主板的連接
  • 打開急停(擰紅帽)
  • 腿上的功率為 18 [V]

這是使腿來回擺動的代碼:

/*
* Auth: Justin Francis
* Date: 11/27/19
* Ver: 1.0
* Sum: this is a position P-controller for the Open source powered prosthetic //leg,
*      it oscillates the leg back and forth between 5 deg and 85 deg from vert//ical,
*      or it can be controlled with a potentiometer remotely.
*      written for teensy 3.2
*
* Mod:
*
*/

#include 
#include 

//empirically determined speed curve (x = thetaDotDes [rad/s], y = command vol//tage[rad/s])
#define MOT_CONTROL_CURVE (0.67 - 0.148*log(abs(thetaDotDes)))

//teensy 3.2 limits
#define DAC_RES 1023 //10 bit
#define DAC_MAX 3.3 //[V]

//incremental encoder interrupt pins
#define IncEncA 2
#define IncEncB 3

//use this for potentiometer control
// #define POT_CTRL

//use this for plotting
// #define PLOTTING

//use this for use with battery pack, comment out if using a current limited p//ower supply
//the reason being, the battery pack can supply enough power to tear the leg a//part if a signal
//is being processed incorrectly, this keeps that from happening.
#define TRIAL

//control vars
float P = 30; //proportional gain K_u ~= 35
float k; //conversion factor for theta dot to voltage for the controller output
float motCmd; //value to output to motor controller
float err; //controller error
float thetaDes = 0; //desire joint position [rad]
float theta, thetaDotDes; //joint position [rad], desire joint velocity [rad/s]

#ifdef POT_CTRL
float inputV; //potentiometer voltage [V]
const int POT_PIN = 14; //potentiometer pin
#endif

//motor vars
const int DAC_Pin = A14; //motor speed pin
const int directionPin = 5;
const int enablePin = 4;

//incremental Encoder
Encoder inc(IncEncA,IncEncB); //interrupt attach to digital pins 2 and 3
int counts, countsOld = 0;
const float INC_RES = 4096.0; //resolution of encoder [cpr]


void setup()
{
    Serial.begin(115200); //turn on serial port (display) at 115200 baud
    //set ports
    pinMode(DAC_Pin, OUTPUT);
    pinMode(directionPin, OUTPUT);
    pinMode(enablePin, OUTPUT);

    #ifdef POT_CTRL
    pinMode(POT_PIN, INPUT);
    #endif

    //this is needed for the motor startup sequence
    digitalWrite(enablePin, LOW);
    delay(200);

    #ifdef PLOTTING
    Serial.println("theta thetaDes");
    #endif
}


/*
* function to control the motor, takes in a desired velocity and commands the motor
* no return
*/
void MotorDrive(float thetaDotDes)
{
    if(thetaDotDes >= 0.0)
    {
    digitalWrite(directionPin, HIGH);
    }
    else
    {
    digitalWrite(directionPin, LOW);
    }
    digitalWrite(enablePin, HIGH);
    motCmd = MOT_CONTROL_CURVE; //[V]
    motCmd = constrain(motCmd, 0.0, .75); //anything outside of this voltage r            //ange cause the controller to pause
    analogWrite(DAC_Pin, (int)(motCmd*DAC_RES/DAC_MAX)); //convert command int        //o voltage
}


float i = 0; //used for oscillations
void loop()
{
    //read sensor
    counts = inc.read();

    //potentiometer control
    #ifdef POT_CTRL
    inputV = analogRead(POT_PIN) * (3.3/1024); //[V]
    #endif

    //standard oscillations
    #ifndef POT_CTRL
    thetaDes = (PI/2.2*sin(i));
    i += 0.0001; //this needs to decrease if the teensy 4.0 is used because of    //faster clock
    #endif

    //convert to radians
    theta = (((float)counts/INC_RES))*2*PI; //[rad]

    #ifdef POT_CTRL
    thetaDes = inputV * (PI/(3.3*2)) - .5; //[rad]
    #endif

    #ifdef TRIAL
    thetaDes  = constrain(thetaDes, -.5, 1.5);
    #endif

    #ifdef PLOTTING
    Serial.print(theta*.25);Serial.print("\t");Serial.println(thetaDes*.25);
    #endif

    //find err
    err = thetaDes - theta; //rad

    //calc correction
    thetaDotDes = P * err; //[rad/s]

    //command system
    MotorDrive(thetaDotDes);

    //feedback (not needed for P controller)
}

現(xiàn)在腿應該來回擺動,在擺動的兩端停幾秒鐘。

第一次試運行后,可以使用以下步驟為腿加電。

  • 打開急停(擰紅帽)
  • 以 18 [V] 為腿供電

可選的無線通信(高級)

通過使用第二個 Raspberry Pi Zero W 作為控制器,可以最輕松地進行無線通信。然后可以通過連接到現(xiàn)有網(wǎng)絡或將其中一個樹莓派設置為接入點來實現(xiàn)設備之間的通信

連接到同一網(wǎng)絡后,Python 的套接字庫可用于使用 GitHub 上文件路徑“wireless_communication”中的代碼在兩個 Pi 之間創(chuàng)建服務器(在腿上)客戶端(遠程)關系。

服務器設置(Python)

import socket

# establish connection
HOST = "INSERT SERVER IP ADDRESS"
PORT = "INSERT OPEN PORT" # e.g. port above 5000
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print "socket created"

# check for valid host and port
try:
    s.bind((HOST,PORT))
except socket.error:
    print "bind Failed"

# establish connection
s.listen(1)
print "Socket awaiting messages"
(conn, addr) = s.accept()
print "connected"

# await and receive messages
while True:
    data = conn.recv(1024)
    print data

# close connection when finished
    conn.close()

客戶端設置(Python)

import socket
import Adafruit_ADS1x15
import time

# Configure wireless connection with server (board on leg)
HOST = "INSERT SERVER IP ADDRESS"
PORT = "INSERT OPEN PORT" # e.g. port above 5000

# Connect to server host/port
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))

# ADC Converter: Create an ADS1115 ADC (16-bit) instance.
adc = Adafruit_ADS1x15.ADS1115()

# Choose Gain
GAIN = 1

while True:
    # Read all the ADC channel values in a list.
    # Our joystick has two channels         (direction and button)
    values = [0]*2
    for i in range(2):
        # Read the specified ADC channel using the previously set gain value.
        values[i] = adc.read_adc(i, gain=GAIN)

        # we are currently only interested in the direction value
        command = str(values[0])

        # send command to the server
        s.send(command)

        # delay
        time.sleep(0.5)

通過模數(shù)轉換器 ( ADC),控制器的 Pi 可以讀取操縱桿的 ADC 通道值,然后將其發(fā)送到腿的 Pi。最后,通過 pySerial 庫,腿部的 Pi 可以將這些模擬值傳輸?shù)?Teensy 4.0,以控制電機的速度和方向。

將代碼添加到服務器代碼的頂部(Python)

import serial
import time

# connect with teensy, choose baud rate
ser = serial.Serial('/dev/tty/ACM0', 9600)

time.sleep(.5)

將代碼添加到服務器底部while 循環(huán)以與 Teensy (Python)通信

# send command to teensy
    ser.write(str(data))
    time.sleep(.1)

青少年設置(C++):

void setup() {
    Serial1.begin(9600);
    Serial.begin(9600);
}

void loop() {
    String readString = "";

    // read in message
    while (Serial.available())
    {
        delay(30);
        if (Serial.available() > 0)
        {
            char c = Serial.read();
            readString += c;
        }
    }

    // print message to serial monitor or use value to control motor
    if (readString.length() > 0)
    {
        Serial.println(readString);
    }
}

我們使用無線通信讓控制、數(shù)據(jù)收集、代碼重構和調(diào)試更加高效和方便。


下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1山景DSP芯片AP8248A2數(shù)據(jù)手冊
  2. 1.06 MB  |  532次下載  |  免費
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費
  5. 3TC358743XBG評估板參考手冊
  6. 1.36 MB  |  330次下載  |  免費
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費
  9. 5元宇宙深度解析—未來的未來-風口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費
  11. 6迪文DGUS開發(fā)指南
  12. 31.67 MB  |  194次下載  |  免費
  13. 7元宇宙底層硬件系列報告
  14. 13.42 MB  |  182次下載  |  免費
  15. 8FP5207XR-G1中文應用手冊
  16. 1.09 MB  |  178次下載  |  免費

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費
  3. 2555集成電路應用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費
  7. 4開關電源設計實例指南
  8. 未知  |  21549次下載  |  免費
  9. 5電氣工程師手冊免費下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費
  11. 6數(shù)字電路基礎pdf(下載)
  12. 未知  |  13750次下載  |  免費
  13. 7電子制作實例集錦 下載
  14. 未知  |  8113次下載  |  免費
  15. 8《LED驅動電路設計》 溫德爾著
  16. 0.00 MB  |  6656次下載  |  免費

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費
  3. 2protel99se軟件下載(可英文版轉中文版)
  4. 78.1 MB  |  537798次下載  |  免費
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費
  11. 6電路仿真軟件multisim 10.0免費下載
  12. 340992  |  191187次下載  |  免費
  13. 7十天學會AVR單片機與C語言視頻教程 下載
  14. 158M  |  183279次下載  |  免費
  15. 8proe5.0野火版下載(中文版免費下載)
  16. 未知  |  138040次下載  |  免費