本帖最后由 云天 于 2023-1-8 18:34 编辑
OpenBot是什么?
【项目设计】
我也有旧手机,当然我不会直接使用开源的代码来实现我的OpenBot,搞清楚它的工作原理后,我准备自制,包括编写手机端程序。
【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[4] = {0}, PWMPin[4] = { 5, 6, 7, 8}, mark = 0;
- void setup()
- {
- //定义0~6脚是输出
- for(int i = 0; i <4; i++) pinMode(PWMPin[i], 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[i]字符串的文字,如果碰到文字是分隔符(这里选择逗号分割)则将结果数组位置下移一位
- //即比如11,22,33,55开始的11记到numdata[0];碰到逗号就j等于1了,
- //再转换就转换到numdata[1];再碰到逗号就记到numdata[2];以此类推,直到字符串结束
- if(comdata[i] == ',')
- {
- j++;
- }
- else
- {
- //如果没有逗号的话,就将读到的数字*10加上以前读入的数字,
- //并且(comdata[i] - '0')就是将字符'0'的ASCII码转换成数字0(下面不再叙述此问题,直接视作数字0)。
- //比如输入数字是12345,有5次没有碰到逗号的机会,就会执行5次此语句。
- //因为左边的数字先获取到,并且numdata[0]等于0,
- //所以第一次循环是numdata[0] = 0*10+1 = 1
- //第二次numdata[0]等于1,循环是numdata[0] = 1*10+2 = 12
- //第三次是numdata[0]等于12,循环是numdata[0] = 12*10+3 = 123
- //第四次是numdata[0]等于123,循环是numdata[0] = 123*10+4 = 1234
- //如此类推,字符串将被变成数字0。
- numdata[j] = numdata[j] * 10 + (comdata[i] - '0');
- }
- }
- //comdata的字符串已经全部转换到numdata了,清空comdata以便下一次使用,
- //如果不请空的话,本次结果极有可能干扰下一次。
- comdata = String("");
-
-
- //循环输出numdata的内容,并且写到PWM引脚
- analogWrite(PWMPin[0], numdata[0]);
- analogWrite(PWMPin[1], numdata[1]);
- digitalWrite(PWMPin[2], numdata[2]);
- digitalWrite(PWMPin[3], numdata[3]);
- for(int i = 0; i < 4; i++)
- {
- //Serial.print("Pin ");
- //Serial.print(PWMPin[i]);
- //Serial.print(" = ");
- //Serial.println(numdata[i]);
-
- numdata[i] = 0;
- }
- //输出之后必须将读到数据的mark置0,不置0下次循环就不能使用了。
- mark = 0;
- }
- }
-
复制代码
串口通信一次性传输四位数字中间用“,”分隔,如“255,255,1,1”,分别为“左轮PWM,右轮PWM,左轮正反转,右轮正反转”。 3、App Inventor2程序
源文件:
OTG.zip
4、测试演示视频
【OpenBot智能车】
1、使用了DF“履带机器人移动平台”
2、App Inventor2使用扩展
edu.mit.appinventor.ai.posenet.aix.zip
3、App Inventor2编程
OTG.zip
【演示视频】
|
|
|
|
|
|