主页 > 知识库 > 怎样用Tactigon通过BLE控制Arduino驱动的机器人

怎样用Tactigon通过BLE控制Arduino驱动的机器人

热门标签:分布式呼叫中心 美团 美图手机 电销行业 国美全国运营中心 驰名商标保护 语音营销系统 话术
我们需要什么 配置了Arduino IDE的Tactigon 机器人。我们使用带有Arduino板的2轮机器人和与UART接口的BLE无线电。其他类型的机器人或定制机器人也可以正常工作。 机器人BLE MAC地址和特征 趣味 收集BLE MAC地址和特征 配置好环境并且我们的电路板开启后,我们需要收集BLE MAC地址和特征。为此,我们使用了一个名为BLE Scanner的免费Android应用程序。 应用程序显示后几秒钟机器人的BLE: 如我们所见,我们周围的所有BLE设备都在本节中展示。我们需要记下Waveshare_BLE MAC地址:在这个例子中它是:00:0E:0B:0C:4A:00 通过点击CONNECT按钮,我们可以访问设备的信息作为属性,服务和自定义特征。 这里我们需要写下CUSTOM CHARACTERISTIC UUID,在这种情况下:0000ffe1-0000 -1000-8000-00805f9b34fb。 通过这些项目,我们可以将Tactigon BLE设置为代码的setup()部分中的BLE Central。 Tactigon Sketch 循环 在本节中,我们有草图的核心。在频率为50Hz时,我们更新四元数和欧拉角。 由Tactigon库提供的Analizyng俯仰角,我们可以通过减速来确定转向半径内轮和加速外轮。 Analizying roll,我们可以确定机器人的行进速度。 使用sprintf我们准备缓冲区以写入特征。 机器人草图 由于我们的蓝牙通过UART发送接收数据,因此我们可以直接在串行缓冲器中获得轮速。 我们将机器人引脚设置如下,全部作为输出: 要解析命令,我们首先读取所有串行缓冲区并验证它是否长于0: 如果命令包含“Wh”,我们可以解析字符串并收集leftSpeed和rightSpeed。 direct_motor函数将Tactigon传输的速度分配给机器人的每个车轮。通过这样做Tactigon将充当虚拟方向盘! 最终注意事项 此草图显示了Tactigon的潜在应用,BLE Central模式可以连接到现有的BLE设备并收集信息或控制它们。 请继续关注更多Tactigon的代码! Alphabot2代码 Tactigon代码 #include #include #include extern int ButtonPressed; T_Led rLed, bLed, gLed; T_QUAT qMeter; T_QData qData; T_BLE bleManager; UUID targetUUID; uint8_t targetMAC[6] = {0x00,0x0e,0x0b,0x0c,0x4a,0x00}; T_BLE_Characteristic accChar, gyroChar, magChar, qChar; int ticks, ticksLed, stp, cnt, printCnt; float roll, pitch, yaw; void setup() { // put your setup code here, to run once: ticks = 0; ticksLed = 0; stp = 0; cnt = 0; //init leds rLed.init(T_Led::RED); gLed.init(T_Led::GREEN); bLed.init(T_Led::BLUE); rLed.off(); gLed.off(); bLed.off(); //init BLE bleManager.setName(“Tactigon”); bleManager.InitRole(TACTIGON_BLE_CENTRAL); //role: CENTRAL targetUUID.set(“0000ffe1-0000-1000-8000-00805f9b34fb”); //target characteristic bleManager.setTarget(targetMAC, targetUUID); //target: mac device and its char UUID } void loop() { char buffData[24]; int deltaWheel, speedWheel; int pitchThreshold, rollThreshold, th1, th2; //update BLE characteristics @ 50Hz (20msec) if(GetCurrentMilli() 》= (ticks +(1000 / 50))) { ticks = GetCurrentMilli(); //get quaternions and Euler angles qData = qMeter.getQs(); //Euler angles: rad/sec --》 degrees/sec roll = qData.roll * 360/6.28; pitch = qData.pitch * 360/6.28; yaw = qData.yaw * 360/6.28; //build command to rover depending on Euler angles //left/right pitchThreshold = 15; if(pitch 《 -pitchThreshold || pitch 》 pitchThreshold) { if(pitch《-pitchThreshold) { deltaWheel =- (fabs(pitch) - pitchThreshold)*3; } else { deltaWheel =+ (fabs(pitch) - pitchThreshold)*3; } } else { deltaWheel=0; } //forward/backword rollThreshold = 15; th1 = 90 + rollThreshold; th2 = 90 - rollThreshold; roll = fabs(roll); if(roll 》 th1) { speedWheel = (roll - th1) * 3; } else if(roll 《 th2) { speedWheel = (roll - th2) * 3; } else { speedWheel = 0; } //command in buffData sprintf(buffData,“Wh(%d)(%d)”, speedWheel-(-deltaWheel/2), speedWheel+(-deltaWheel/2)); //if connected and attached to peripheral characteristic write in it if(bleManager.getStatus() == 3) { //signal that connection is on bLed.on(); //send command every 100msec rLed.off(); cnt++; if(cnt 》 5) { cnt = 0; bleManager.writeToPeripheral((unsigned char *)buffData, strlen(buffData)); rLed.on(); } } //say hello on serial monitor every second and blink green led printCnt++; rLed.off(); if(printCnt 》 50) { //Serial.println(“Hello!”); //Serial.println(roll); printCnt = 0; rLed.on(); } } }

标签:甘南 滨州 湖南 酒水回访 金昌 孝感 晋城 南京

巨人网络通讯声明:本文标题《怎样用Tactigon通过BLE控制Arduino驱动的机器人》,本文关键词  ;如发现本文内容存在版权问题,烦请提供相关信息告之我们,我们将及时沟通与处理。本站内容系统采集于网络,涉及言论、版权与本站无关。
  • 相关文章
  • 下面列出与本文章《怎样用Tactigon通过BLE控制Arduino驱动的机器人》相关的同类信息!
  • 收缩
    • 微信客服
    • 微信二维码
    • 电话咨询

    • 400-1100-266