土炮制機械手掌(Hand Robot)+彎曲傳感器-Arduino

 機械手掌(Hand Robot)土炮制-Arduino

最近在很多平台上看到機械手掌被廣範使用在義肢上,

使得有須求的人得到一個很好的輔助功能,我自己本身

也是有殘缺的人,雖然不是四肢上,是聽覺有問題,所以能

感同身受,我相信未來能發展到任何殘缺都有能輔助的

AI設備可使用。然後這個動機使我也想利用Arduino來\

做個機械手掌,了解一下箇中原理。

本想用3D列印手掌出來,但有點擔心要結合關節有難度

於是先用紙板裁剪,這裡要比較留意的是關節處要有足夠

的空間,才能彎曲,用紙板是最簡易的材料,因為紙板折彎後

放開,會自動攤平,其實也可以用實心的海綿,效果應該不錯。

材料

吸管若干支
紙箱紙板
小細線或尼龍線
伺服馬達 x5
PCA9685 x1
Arduino UNO x1




舵機固定在適當的位置後再來就剩下程式碼

程式碼

#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>
#define SERVO_FREQ 60 // Analog servos run at ~50 Hz updates
//angleMax=600
//angleMin=150
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();

int val;
void setup()
{
  Serial.begin(9600);
  pwm.begin();
  pwm.setOscillatorFrequency(27000000);
  pwm.setPWMFreq(SERVO_FREQ);  // Analog servos run at ~50 Hz updates
  delay(10);
}

void loop()
{
  for (int i = 500i > 200i-=20)
  {
    pwm.setPWM(10 , i);
    delay(50);
  }
  for (int i = 200i < 500i+=20)
  {
    pwm.setPWM(10i);
    delay(50);
  }

  for (int i = 500i > 200i-=20)
  {
    pwm.setPWM(20 , i);
    delay(50);
  }
  for (int i = 200i < 500i+=20)
  {
    pwm.setPWM(20i);
    delay(50);
  }

  for (int i = 500i > 200i-=20)
  {
    pwm.setPWM(80 , i);
    delay(50);
  }
  for (int i = 200i < 500i+=20)
  {
    pwm.setPWM(80i);
    delay(50);
  }

  for (int i = 500i > 200i-=20)
  {
    pwm.setPWM(90 , i);
    delay(50);
  }
  for (int i = 200i < 500i+=20)
  {
    pwm.setPWM(90i);
    delay(50);
  }

  for (int i = 500i > 200i-=20)
  {
    pwm.setPWM(100 , i);
    delay(50);
  }
  for (int i = 200i < 500i+=20)
  {
    pwm.setPWM(100i);
    delay(50);
  }

  for (int j = 500j > 200j-=20){
    pwm.setPWM(10j);
    pwm.setPWM(20j);
    pwm.setPWM(80j);
    pwm.setPWM(90j);
    pwm.setPWM(100j);
    delay(50);
  }
  for (int j = 200j < 500j+=20){
    pwm.setPWM(10j);
    pwm.setPWM(20j);
    pwm.setPWM(80j);
    pwm.setPWM(90j);
    pwm.setPWM(100j);
    delay(50);
  }

  for (int j = 500j > 200j-=20){
    pwm.setPWM(10j);
    pwm.setPWM(80j);
    pwm.setPWM(90j);
    pwm.setPWM(100j);
    delay(50);
  }
  delay(1000);
  for (int j = 200j < 500j+=20){
    pwm.setPWM(10j);
    pwm.setPWM(80j);
    pwm.setPWM(90j);
    pwm.setPWM(100j);
    delay(50);
  }

}


使用彎曲傳感器控制控制機械手掌

首先要先製作彎曲傳感器,然後弄成手套,可參考下篇

像上圖弄好以後,先測量每一個感測器的數值區間,我發現自制的感測器
沒有很穩定,數值會有點亂跳,所以我把感測的時間調高一點,不要讓它
偵測太頻繁。
#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>

#define SERVO_FREQ 60 // Analog servos run at ~50 Hz updates
//angleMax=600
//angleMin=150
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();

int valOne;
int valTwo;
int valthree;
int valfour;
int valfive;
int sensor_One=A0;
int sensor_Two=A1;
int sensor_three=A2;
int sensor_four=A3;
int sensor_five=A6;

void setup()
{
  Serial.begin(9600);
  pinMode(sensor_OneINPUT);
  pinMode(sensor_TwoINPUT);
  pinMode(sensor_threeINPUT);
  pinMode(sensor_fourINPUT);
  pinMode(sensor_fiveINPUT);
  pwm.begin();
  pwm.setOscillatorFrequency(27000000);
  pwm.setPWMFreq(SERVO_FREQ);  // Analog servos run at ~50 Hz updates
  delay(10);
}

void loop()
{
  valOne=analogRead(sensor_One);
  valOne=map(valOne90140200600);
  valTwo=analogRead(sensor_Two);
  valTwo=map(valTwo90140200600);
  valthree=analogRead(sensor_three);
  valthree=map(valthree90150200600);
  valfour=analogRead(sensor_four);
  valfour=map(valfour90150200600);
  valfive=analogRead(sensor_five);
  valfive=map(valfive90150200600);
  
  if (valOne<200){
    valOne=200;
  }
  if(valOne>600){
    valOne=600;
  }
  Serial.println(valOne);
  pwm.setPWM(10valOne);

  
  if (valTwo<200){
    valTwo=200;
  }
  if(valTwo>600){
    valTwo=600;
  }
  Serial.println(valTwo);
  pwm.setPWM(20 ,valTwo);

  
  if (valthree<200){
    valthree=200;
  }
  if(valthree>600){
    valthree=600;
  }
  Serial.println(valthree);
  pwm.setPWM(80 ,valthree);

  
  if (valfour<200){
    valfour=200;
  }
  if(valfour>600){
    valfour=600;
  }
  Serial.println(valfour);
  pwm.setPWM(90 ,valfour);

  
  if (valfive<200){
    valfive=200;
  }
  if(valfive>600){
    valfive=600;
  }
  Serial.println(valfive);
  pwm.setPWM(100 ,valfive);
  delay(400);

  Serial.println("------");
}

雖然沒有完美,但我想開始著手做3D列印的機械手掌,並使用市面上的
彎曲傳感器試試。











留言

這個網誌中的熱門文章

平衡小車(balance-Robot)-基本平衡-Arduino