Arduino爱好者

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2819|回复: 2

blinker物联网教程——16、遥控机械臂

[复制链接]
发表于 2022-4-15 10:21 | 显示全部楼层 |阅读模式
本帖最后由 海神 于 2022-5-17 16:07 编辑

简介

机械臂是目前在机械人技术领域中得到最广泛实际应用的自动化机械装置,在工业制造、医学治疗、娱乐服务、军事以及太空探索等领域都能见到它的身影。比如码垛机械臂、自动焊接机械臂等等~~而在实际应用中,机械臂的形态各有不同,但它们能够接受指令,精确地定位到三维(或二维)空间上的某一点进行作业。

20220411_111531 .png
本节我们使用wifiduino及blinker来制作手机控制机械臂抓取方块

硬件清单
三轴机械臂*1套   
microusb数据线*1根

硬件连线

将扩展板堆叠在wifiduino主板上,用microUSB数据线给主板上电,将机械臂上的mg995舵机连接在扩展板上的15接口;995舵机上边的9g舵机连接在扩展板上的7接口;另一个9g舵机连接在扩展板上的8接口。
机械臂连线.png

示例代码

  1. /*S1 >> 7
  2. *S2 >> 8
  3. *S3 >> 15
  4. *S4 >> 16
  5. */

  6. #define BLINKER_WIFI
  7. #include <Wire.h>
  8. #include "Openjumper_IICMotorDriver.h"

  9. #include <Blinker.h>

  10. char auth[] = "exxxxxxxxxx4";  //手机端的设备密钥
  11. char ssid[] = "opzzzzzzzzzz6";       //无线wifi名称
  12. char pswd[] = "izzzzzzzzzz5";    //wifi密码

  13. bool result;//机械臂联网状态
  14.                                        
  15. // called this way, it uses the default address 0x40
  16. //Openjumper_IICMotorDriver pwm = Openjumper_IICMotorDriver();
  17. // you can also call it with a different address you want
  18. Openjumper_IICMotorDriver pwm = Openjumper_IICMotorDriver(0x41);//扩展板芯片地址

  19. // Depending on your servo make, the pulse width min and max may vary, you
  20. // want these to be as small/large as possible without hitting the hard stop
  21. // for max range. You'll have to tweak them as necessary to match the servos you
  22. // have!
  23. #define SERVOMIN 100 // this is the 'minimum' pulse length count (out of 4096)
  24. #define SERVOMAX 400 // this is the 'maximum' pulse length count (out of 4096)

  25. // our servo # counter
  26. //uint8_t servonum = 0;

  27. /**
  28. 舵机角度0-180度对应脉冲角度在0.5到2.5ms,一个脉冲宽度20ms
  29. **/

  30. #define LiftingPin  1//抬升舵机
  31. #define TongsPin    2//夹子舵机
  32. #define SwingPin    3//转向舵机
  33. #define StEngDelTim 1300//抬升动作间距时间


  34. #define LSEUP 360//抬升舵机角度,最高位置
  35. #define LSEDW 160//最低位置

  36. #define TSEMI 130//夹子舵机角度,闭合角度
  37. #define TSEMA 310//张开角度

  38. #define SSERE 330//转向舵机角度,左边
  39. #define SSEME 260//中间位置
  40. #define SSELE 190//右边

  41. #define BUTTON_1 "Key1"

  42. #define Slider_1 "ran-wwb"
  43. #define Slider_2 "ran-p5t"
  44. #define Slider_3 "ran-uca"

  45. BlinkerButton Button1(BUTTON_1);
  46. BlinkerSlider Slider1(Slider_1);//抬升舵机位置控制滑块
  47. BlinkerSlider Slider2(Slider_2);//夹子舵机位置控制滑块
  48. BlinkerSlider Slider3(Slider_3);//转向舵机位置控制滑块

  49. void slider1_callback(int32_t value)//抬升舵机控制
  50. {
  51.     value = map(value,0,100,LSEDW,LSEUP);
  52.     pwm.setServoPulse(LiftingPin,value);
  53.     BLINKER_LOG("get slider value: ", value);
  54. }

  55. void slider2_callback(int32_t value)//夹子舵机控制
  56. {
  57.     value = map(value,0,100,TSEMI,TSEMA);
  58.     pwm.setServoPulse(TongsPin, value);
  59.     BLINKER_LOG("get slider value: ", value);
  60. }

  61. void slider3_callback(int32_t value)//转向舵机控制
  62. {
  63.     value = map(value,0,100,SSERE,SSELE);
  64.     pwm.setServoPulse(SwingPin, value);
  65.     BLINKER_LOG("get slider value: ", value);
  66. }

  67. void button1_callback(const String & state)//夹取物品
  68. {
  69.     //BLINKER_LOG("get button state: ", state);

  70.     if (state == BLINKER_CMD_BUTTON_TAP) {
  71.         BLINKER_LOG("夹取物品");
  72.         ServoGroup();
  73.     }   
  74. }

  75. void ServoGroup(){
  76.   pwm.setServoPulse(LiftingPin, LSEUP);//各舵机初始化
  77.   pwm.setServoPulse(TongsPin, TSEMA);
  78.   pwm.setServoPulse(SwingPin, SSEME);
  79.   Blinker.delay(StEngDelTim);
  80.   pwm.setServoPulse(LiftingPin, LSEDW);
  81.   Blinker.delay(StEngDelTim);
  82.   pwm.setServoPulse(TongsPin, TSEMI);
  83.   Blinker.delay(StEngDelTim);
  84.   pwm.setServoPulse(LiftingPin, LSEUP);
  85.   Blinker.delay(StEngDelTim);
  86.   }
  87.   
  88. void setup()
  89. {
  90.   Serial.begin(115200);

  91.   pwm.begin();
  92.   //pwm.motorConfig(DIRP,DIRP,DIRP,DIRP);//DIRN

  93.     BLINKER_DEBUG.stream(Serial);

  94.     pinMode(LED_BUILTIN, OUTPUT);//8266模块灯
  95.     digitalWrite(LED_BUILTIN, LOW);

  96.     Blinker.begin(auth, ssid, pswd);

  97.     Button1.attach(button1_callback);
  98.     Slider1.attach(slider1_callback);
  99.     Slider2.attach(slider2_callback);
  100.     Slider3.attach(slider3_callback);
  101. }

  102. void loop()
  103. {
  104.     Blinker.run();

  105.     result = Blinker.connected();//检测小车网络连接状态
  106.     if(result){
  107.       digitalWrite(LED_BUILTIN, HIGH);//若连接成功,则关闭LED
  108.       }
  109.     else{
  110.       digitalWrite(LED_BUILTIN, LOW);
  111.       }
  112. }
复制代码



手机控制界面制作

添加三个滑块组件,将键名分别改为程序里定义的“ran-wwb”、“ran-p5t”、“ran-uca”,显示文本内容对应改为抬升、夹子、旋转
机械臂2.png 机械臂3.png 机械臂4.png
在添加一个按键组件 ,数据键名改为程序中定义的“Key1”,显示文本内容改成“点击夹取”,可以修改按键图标和颜色。
机械臂5.png
再添加一个调试组件,完成编辑,点右上角解锁。
机械臂1.png
效果展示


通过滑动滑块和按键控制机械臂的旋转、抬升和夹取。

机械臂6.jpg

视频展示



blinker物联网教程——1、物联网及blinker介绍
blinker物联网教程——2、搭建编程环境
blinker物联网教程——3、主控硬件wifiduino
blinker物联网教程——4、控制开关灯
blinker物联网教程——5、认识传感器
blinker物联网教程——6、wifi智能插座
blinker物联网教程——7、室内温湿度计
blinker物联网教程——8、定时任务-定时震动器
blinker物联网教程——9、blinker语音识别-芝麻开门
blinker物联网教程——10、日照时间分析
blinker物联网教程——11、自动灌溉
blinker物联网教程——12、调色盘
blinker物联网教程——13、公园噪音监测
blinker物联网教程——14、智能停车场
blinker物联网教程——15、智能家居
blinker物联网教程——16、遥控机械臂
blinker物联网教程——17、防疫隔离门磁
blinker物联网教程——18、手机控制空调
blinker物联网教程——19、接入小度智能音箱
blinker物联网教程——20、语音氛围灯
blinker物联网教程——23、wifi智能小车
blinker物联网教程——24、智能宠物喂食器
发表于 2022-6-3 09:11 | 显示全部楼层
#include "Openjumper_IICMotorDriver.h"  这个库没有啊

点评

http://openjumper.com/doc/ojxm42-wifiduino-shield 资料最后连接可以下载  详情 回复 发表于 2022-6-6 14:00
 楼主| 发表于 2022-6-6 14:00 | 显示全部楼层
guqiang 发表于 2022-6-3 09:11
#include "Openjumper_IICMotorDriver.h"  这个库没有啊

http://openjumper.com/doc/ojxm42-wifiduino-shield  资料最后连接可以下载
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|好玩手机游戏盒子|196体育|Arduino爱好者

GMT+8, 2023-3-25 18:12 , Processed in 0.094792 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表