机械手控制程序

机械手的控制程序

/* P的范围最好是  按照下面给出的测试范围给值
*/
#001P0800T1000!
#001P1500T1000!			//单个控制    (大拇指)     P的数值越小弯曲程度越大  2100-600
#001P2100T1000!

#002P0800T1000!
#002P1500T1000!			//单个控制    (食指)		P的数值越大弯曲程度越大   0800-2050
#002P2050T1000!

#003P0800T1000!
#003P1500T1000!			//单个控制    (中指)		P的数值越大弯曲程度越大   0800-2100
#003P2100T1000!

#004P0800T1000!
#004P1500T1000!			//单个控制    (无名指)		P的数值越大弯曲程度越大  0800-2200
#004P2200T1000!

#005P0800T1000!
#005P1500T1000!			//单个控制    (小拇指)		P的数值越大弯曲程度越大  0800-2100
#005P2100T1000!
/*    Arduino Long Range Wireless Communication using HC-12
                      Example 01
   by Dejan Nedelkovski, www.HowToMechatronics.com
*/
#include <SoftwareSerial.h>

SoftwareSerial HC12(10, 11); // HC-12 TX Pin, HC-12 RX Pin

byte analog_pin[5] = {A1, A2, A3, A4, A5};  //定义电位器引脚数组
int sensorValue[6]={0,0,0,0,0,0};           //大拇指读取的模拟量
int sensorMaxValue[6]={0,0,0,0,0,0};
int sensorMinValue[6]={1024,1024,1024,1024,1024,1024};
int FingerBend[6]={0,0,0,0,0,0};
char cmd_return[256];

void setup() {
  Serial.begin(115200);             // Serial port to computer
  HC12.begin(115200);               // Serial port to HC12
}

void loop() {
//  while (HC12.available()) {        // If HC-12 has data
    Serial.println(HC12.read());      // Send the data to Serial monitor
//      Serial.println("有数据啦");
//  }
  static u32 systick_ms_bak = 0;
  if(millis() - systick_ms_bak > 100) {      //25ms为一个执行周期
    systick_ms_bak = millis();
    // 大拇指
    sensorValue[1] = analogRead(A1);
    Serial.print(sensorValue[1]);      // Send the data to Serial monitor
    Serial.print("   max = ");  Serial.print(sensorMaxValue[1]);Serial.print("   min = ");  Serial.print(sensorMinValue[1]); Serial.print("  ");
    sensorMinValue[1] =min(sensorValue[1],sensorMinValue[1]);
    sensorMaxValue[1] =max(sensorValue[1],sensorMaxValue[1]);
    int temp = map(sensorValue[1],sensorMinValue[1],sensorMaxValue[1],600,2100);//因为模拟读取的是1023,输出却是255,用map函数转换
    FingerBend[1] = 2700-temp;
    
    // 食指
//    sensorValue[2] = analogRead(A2);
//    sensorMinValue[2] =min(sensorValue[2],sensorMinValue[2]);
//    sensorMaxValue[2] =max(sensorValue[2],sensorMaxValue[2]);
//    FingerBend[2]= map(sensorValue[2],sensorMinValue[2],sensorMaxValue[2],800,2050);//因为模拟读取的是1023,输出却是255,用map函数转换
    
    sprintf(cmd_return,"#001P%04dT0500!",FingerBend[1]);
//    sprintf(cmd_return,"{#001P%04dT0050!#002P%04dT0050!#003P%04dT0050!#004P%04dT0050!#005P%04dT0050!}", 
//                    FingerBend[1],FingerBend[2],FingerBend[3],FingerBend[4],FingerBend[5]);
    Serial.println(cmd_return);      // Send the data to Serial monitor
    HC12.write(cmd_return);  //这个串口的发送是通过手套的HC-12无线通讯模块发送的
    
  }
  
}

第四节

//  A0—A5,是模拟输入  ,  3,4,5,9,10,11是模拟输出口
void analogRead(pin); //读取模拟量电压值,返回一个0到1023的数值(int型)
void anglogWrite(pin,value); //输出到引脚,PWM的信号频率约为490赫兹脚位通常在3,5,6,9,10,11,value变数范围0—255,而0——255对应的是 0—5V电压
int map(value,fromlow,fromHigh,toLow,toHigh),把一个数从一个范围变换到另一个范围就是将value变数依照fromlow与fromHigh范围,对等转化至toLow 与toHigh。
    

    
    
    
    
/*    Arduino Long Range Wireless Communication using HC-12
                      Example 01
   by Dejan Nedelkovski, www.HowToMechatronics.com
*/
#include <SoftwareSerial.h>

SoftwareSerial HC12(10, 11); // HC-12 TX Pin, HC-12 RX Pin

byte analog_pin[5] = {A1, A2, A3, A4, A5};  //定义电位器引脚数组
int sensorValue[6]={0,0,0,0,0,0};           //手指读取的模拟量
int sensorMaxValue[6]={0,0,0,0,0,0};
int sensorMinValue[6]={1024,1024,1024,1024,1024,1024};
int FingerBend[6]={0,0,0,0,0,0};
char cmd_return[256];
byte readBuf;

void setup() {
  Serial.begin(115200);             // Serial port to computer
  HC12.begin(115200);               // Serial port to HC12
}

void loop() {
  while (HC12.available()) {        // If HC-12 has data
    readBuf = HC12.read();
//    Serial.println(HC12.read());      // Send the data to Serial monitor
//    Serial.println("\n");
      Serial.println("有数据啦");
  }
  static u32 systick_ms_bak = 0;
  if(millis() - systick_ms_bak > 100) {      //25ms为一个执行周期
    systick_ms_bak = millis();
    // 大拇指
    sensorValue[1] = analogRead(A1);
//    Serial.print("   1max = ");  Serial.print(sensorMaxValue[1]); Serial.print("   1min = ");  Serial.print(sensorMinValue[1]); Serial.print("  ");
    sensorMinValue[1] =min(sensorValue[1],sensorMinValue[1]);
    sensorMaxValue[1] =max(sensorValue[1],sensorMaxValue[1]);
    int temp = map(sensorValue[1],sensorMinValue[1],sensorMaxValue[1],600,2100);//因为模拟读取的是1023,输出却是255,用map函数转换
    FingerBend[1] = 2700-temp;
    
    // 食指
    readFingerBend(2);
    readFingerBend(3);
    readFingerBend(4);
    readFingerBend(5);
    for(int i=1;i<=5;i++){
        Serial.print(sensorValue[i]);      // Send the data to Serial monitor
        Serial.print("  ");
    }
    Serial.print("\n");
//    
//    sprintf(cmd_return,"#001P%04dT0500!",FingerBend[1]);
//    Serial.println(cmd_return);
//    HC12.write(cmd_return);
//    memset(cmd_return, 0, sizeof(cmd_return));

    
    
    sprintf(cmd_return,"{#001P%04dT0500!#002P%04dT0500!#003P%04dT0500!#004P%04dT0500!#005P%04dT0500!}", 
                    FingerBend[1],FingerBend[2],FingerBend[3],FingerBend[4],FingerBend[5]);
    Serial.println(cmd_return);      // Send the data to Serial monitor
    HC12.write(cmd_return);  //这个串口的发送是通过手套的HC-12无线通讯模块发送的
    
  }
  
}
void readFingerBend(int index){
    // 食指
    sensorValue[index] = analogRead(index);
//    Serial.print(sensorValue[index]);      // Send the data to Serial monitor
//    Serial.print("  "); Serial.print(index);Serial.print("max = ");  Serial.print(sensorMaxValue[index]);
//    Serial.print(index);Serial.print("min = ");  Serial.print(sensorMinValue[index]); Serial.print("  ");
    sensorMinValue[index] =min(sensorValue[index],sensorMinValue[index]);
    sensorMaxValue[index] =max(sensorValue[index],sensorMaxValue[index]);
    FingerBend[index]= map(sensorValue[index],sensorMinValue[index],sensorMaxValue[index],800,2050);//因为模拟读取的是1023,输出却是255,用map函数转换
}

输出数据

520  568  329  383  376  
519  569  329  383  375  
519  568  328  383  375  
519  568  328  383  375  
520  568  329  384  375  
519  568  329  383  375  
520  569  328  383  376  
520  568  329  383  375  
519  568  328  383  376  
519  568  328  383  376  
519  568  328  383  375  
519  568  328  383  375  
519  568  328  383  376  
519  568  328  383  375  
519  568  329  383  375  
519  569  329  383  375  
519  569  329  383  376  
519  568  329  383  375  
519  569  328  384  376  
520  569  329  383  375  
519  568  329  384  375  
519  568  329  383  376  
519  568  329  383  376  
519  568  329  383  375  
519  568  329  383  376  
519  568  329  383  375  
519  568  328  383  376  
519  569  329  383  376  
519  568  329  383  376  
519  568  328  383  376  
519  568  328  383  377  
519  569  328  383  376  
519  568  328  383  375  
519  568  328  383  376  
519  568  327  383  375  
519  568  327  383  375  
519  568  328  384  375  
519  568  328  383  376  
519  568  328  383  375  
519  568  328  383  376  
519  568  328  383  375  
519  569  328  383  376  
519  568  328  383  377  
519  569  328  384  376  
519  568  327  383  376  
519  573  328  383  373  
517  570  328  383  375  
398  521  266  412  365  
399  575  247  414  367  
466  538  291  400  367  
474  550  307  406  367  
509  554  309  405  367  
582  554  311  404  367  
732  560  312  398  368  
735  562  313  396  367  
745  561  314  397  368  
731  561  314  399  368  
714  562  315  402  368  
395  560  292  389  367  
477  559  321  395  369  
483  562  324  400  369  
482  563  325  399  369  
481  563  325  399  368  
483  563  325  396  369  
477  535  288  389  369  
489  573  296  388  367  
493  580  30
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 好的,我可以为您提供一些关于机械手控制系统的Python程序的信息。机械手控制系统通常使用控制器和传感器来控制机械手的运动。Python编程语言可以用于编写控制器和与传感器进行通信的程序。以下是一个简单的机械手控制系统的Python程序示例: ``` import time import RPi.GPIO as GPIO # 设置GPIO引脚的模式 GPIO.setmode(GPIO.BOARD) # 设置引脚 servo_pin = 11 GPIO.setup(servo_pin, GPIO.OUT) # 定义函数,控制机械手的动作 def move_servo(angle): # 设置PWM引脚 pwm = GPIO.PWM(servo_pin, 50) pwm.start(2.5) duty_cycle = angle / 18.0 + 2.5 pwm.ChangeDutyCycle(duty_cycle) time.sleep(1) pwm.stop() # 控制机械手的动作 move_servo(90) # 旋转到90度的位置 move_servo(0) # 旋转到0度的位置 # 关闭GPIO引脚 GPIO.cleanup() ``` 这个程序使用了树莓派的GPIO库来控制机械手的运动。程序首先设置了GPIO引脚的模式,然后定义了一个函数来控制机械手的动作。函数使用PWM来控制机械手的旋转角度,并且在旋转到目标角度后停顿1秒钟。最后,程序控制机械手旋转到90度和0度的位置,并关闭了GPIO引脚。 当然,这只是一个简单的示例程序。实际上,机械手控制系统的编程需要更复杂的逻辑和算法。希望这个简单的示例程序能为您提供一些启示。 ### 回答2: 机械手控制系统是一种通过编程控制机械手进行动作的系统。Python是一种常用的编程语言,可以使用Python编写机械手控制程序机械手控制系统中,Python程序起到了关键的作用。首先,Python作为一种高级编程语言,具有简洁、易读和易于理解的特点,使得程序编写者可以更加方便地开发和调试机械手控制程序。其次,Python具有丰富的库和模块,如pyserial、pypot和pyrealsense等,可以方便地与机械手控制硬件进行通信,并获取传感器数据或控制机械手的动作。此外,Python还具有可视化处理能力,可以通过Matplotlib和OpenCV等库对机械手的运动轨迹和实时视觉图像进行处理和展示。 在编写机械手控制程序时,我们可以使用Python的控制语句、循环和函数等基本语法,根据机械手的运动规律和控制策略,编写相应的代码。例如,我们可以使用循环语句控制机械手按照一定的轨迹或姿态进行移动,使用条件语句进行动作的判断和调整。 此外,Python的编程环境也支持与其他软件和硬件进行集成。例如,我们可以使用ROS(机器人操作系统)进行机械手的建模、路径规划和遥控控制,通过Python程序与ROS进行通信。同时,我们也可以结合深度学习和机器学习的相关算法,使用Python进行机器人视觉、手眼协调和智能控制的开发。 总之,机械手控制系统中的Python程序起到了关键的作用,通过编写相应的代码,可以实现机械手的精确控制、自动化操作和智能决策,并提升机械手的工作效率和精度。 ### 回答3: 机械手控制系统是指通过编程语言(如Python)对机械手进行控制的系统。Python作为一种高级编程语言,具有简单易学、语法简洁等优点,逐渐成为机械手控制系统中常用的编程语言。 在机械手控制系统中,Python程序可以通过与机械手的硬件接口进行通信,发送命令和接收反馈信息。程序可以对机械手的运动轨迹、速度、加速度等进行精确控制,实现各种复杂的动作和操作。 Python程序可通过调用机械手控制系统的库和模块,来实现不同类型机械手的控制。例如,可以使用Python的串口通信库与机械手进行串口通信,发送指令控制机械手的运动。可以使用Python的图像识别和计算机视觉库,通过识别目标物体的位置和姿态来控制机械手的抓取动作。 此外,Python的强大生态系统意味着可以使用各种第三方库来扩展机械手控制系统的功能,例如科学计算库NumPy和自动化库PyQt等。这些库可以使得机械手控制系统具有更高的性能和更强的灵活性。 总的来说,机械手控制系统可以通过Python程序实现各种复杂的动作和操作, Python作为一种强大的编程语言,为机械手控制系统带来了更多的可能性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值