利用旧手机自制OpenBot
本帖最后由 云天 于 2023-1-8 18:34 编辑OpenBot是什么?OpenBot利用智能手机作为低成本机器人的大脑。intel工程师设计了一款小型电动车,机器人车身的各种配件加一起售价约50美金。 同时开发了Android智能手机软件,支持先进的机器人功能,如人跟踪和实时自主导航。开源:https://github.com/isl-org/OpenBot
【项目设计】
我也有旧手机,当然我不会直接使用开源的代码来实现我的OpenBot,搞清楚它的工作原理后,我准备自制,包括编写手机端程序。
【OTG】
手机与Arduino使用OTG功能连接。
目前市面上的大部分手机都会具备OTG功能。OTG是USB On-The-Go的缩写,是近年发展起来的技术,2001年12月18日由USB Implementers Forum公布,主要应用于各种不同的设备或移动设备间的联接,进行数据交换。手机OTG一般默认是关闭状态。在设置中的更多设置中找到。需要两个硬件:1、OTG转接头2、FT232 USB转TTL 串口线。
【OTG连接测试】
1、连接硬件
L289N外接电源,并与Arduino共地,E1接5(PWM引脚),M1接7,E2接6(PWM引脚),M2接4。
手机插OTG转接口,接USB转TTL 串口线,串口线红线(VCC)接Arduino板VIN引脚(给主板供电),黑线(GND)接GND引脚,绿线(TX)接0引脚(RX),白线接1引脚(TX)。
2、Arduino程序
//定义一个comdata字符串变量,赋初值为空值
String comdata = "";
//numdata是分拆之后的数字数组
int numdata = {0}, PWMPin = { 5, 6, 7, 8}, mark = 0;
void setup()
{
//定义0~6脚是输出
for(int i = 0; i <4; i++) pinMode(PWMPin, OUTPUT);
Serial.begin(9600);
}
void loop()
{
//j是分拆之后数字数组的位置记数
int j = 0;
//不断循环检测串口缓存,一个个读入字符串,
while (Serial.available() > 0)
{
//读入之后将字符串,串接到comdata上面。
comdata += char(Serial.read());
//延时一会,让串口缓存准备好下一个数字,不延时会导致数据丢失,
delay(2);
//标记串口读过数据,如果没有数据的话,直接不执行这个while了。
mark = 1;
}
if(mark == 1)//如果接收到数据则执行comdata分析操作,否则什么都不做。
{
//显示刚才输入的字符串(可选语句)
Serial.println(comdata);
//显示刚才输入的字符串长度(可选语句)
Serial.println(comdata.length());
/*******************下面是重点*******************/
//以串口读取字符串长度循环,
for(int i = 0; i < comdata.length() ; i++)
{
//逐个分析comdata字符串的文字,如果碰到文字是分隔符(这里选择逗号分割)则将结果数组位置下移一位
//即比如11,22,33,55开始的11记到numdata;碰到逗号就j等于1了,
//再转换就转换到numdata;再碰到逗号就记到numdata;以此类推,直到字符串结束
if(comdata == ',')
{
j++;
}
else
{
//如果没有逗号的话,就将读到的数字*10加上以前读入的数字,
//并且(comdata - '0')就是将字符'0'的ASCII码转换成数字0(下面不再叙述此问题,直接视作数字0)。
//比如输入数字是12345,有5次没有碰到逗号的机会,就会执行5次此语句。
//因为左边的数字先获取到,并且numdata等于0,
//所以第一次循环是numdata = 0*10+1 = 1
//第二次numdata等于1,循环是numdata = 1*10+2 = 12
//第三次是numdata等于12,循环是numdata = 12*10+3 = 123
//第四次是numdata等于123,循环是numdata = 123*10+4 = 1234
//如此类推,字符串将被变成数字0。
numdata = numdata * 10 + (comdata - '0');
}
}
//comdata的字符串已经全部转换到numdata了,清空comdata以便下一次使用,
//如果不请空的话,本次结果极有可能干扰下一次。
comdata = String("");
//循环输出numdata的内容,并且写到PWM引脚
analogWrite(PWMPin, numdata);
analogWrite(PWMPin, numdata);
digitalWrite(PWMPin, numdata);
digitalWrite(PWMPin, numdata);
for(int i = 0; i < 4; i++)
{
//Serial.print("Pin ");
//Serial.print(PWMPin);
//Serial.print(" = ");
//Serial.println(numdata);
numdata = 0;
}
//输出之后必须将读到数据的mark置0,不置0下次循环就不能使用了。
mark = 0;
}
}
串口通信一次性传输四位数字中间用“,”分隔,如“255,255,1,1”,分别为“左轮PWM,右轮PWM,左轮正反转,右轮正反转”。3、App Inventor2程序使用https://app.wxbit.com/平台
源文件:
4、测试演示视频
https://www.bilibili.com/video/BV1kG4y1m7vt/?share_source=copy_web&vd_source=98855d5b99ff76982639c5ca6ff6f528
【OpenBot智能车】
1、使用了DF“履带机器人移动平台”
2、App Inventor2使用扩展
3、App Inventor2编程
【演示视频】
https://www.bilibili.com/video/BV1MP4y1C74q/?share_source=copy_web&vd_source=98855d5b99ff76982639c5ca6ff6f528
厉害厉害 {:6_215:}{:6_215:}{:6_215:} 想用这个软件制作的网站,但是为什么要钱啊? 三春牛-创客 发表于 2023-1-12 15:35
想用这个软件制作的网站,但是为什么要钱啊?
不使用它的VIP插件,就都是免费的,功能还是比较多的。
页:
[1]