接上一篇帖子
【KittenBot巡线小车试用】让小车搭载摄像头-Arduino中文社区 - Powered by Discuz! http://www.arduino.cn/thread-67234-1-1.html
官网细节问题只字未提,磕磕绊绊总算连上了app,后就看到官网权威发布了这个帖子
手机APP一键玩转迷你巡线小车-Arduino中文社区 - Powered by Discuz! http://www.arduino.cn/thread-67254-1-1.html
要是早出来该多好
Kittenblock\arduino\libraries\MiniLFR\examples下有许多针对巡线小车的测试用例,如下
以blink.ino为例
[mw_shl_code=cpp,true]void setup() {
pinMode(11,OUTPUT);
digitalWrite(11,0);
pinMode(12,OUTPUT);
digitalWrite(12,0);
}
void loop() {
digitalWrite(11,0);
digitalWrite(12,0);
delay(2000);
for(int i=0;i<3;i++){
digitalWrite(11,1);
digitalWrite(12,1);
delay(300);
digitalWrite(11,0);
digitalWrite(12,0);
delay(300);
}
}[/mw_shl_code]
不同于以往的D13,这次是两个,查看电路图
不知道这是什么时候的电路图,我把小车看了个底朝天,也没找见两个LED(后面看程序猜测是那两个眼睛,但是连丝印也没有)及所连接的电阻R16、R19(你找见了吗?在两个LED下面),里面竟然还有Button0、Button1,完全和小车实际的按钮丝印对不上,只能查看程序对应。
程序默认增加了液晶控制,但是LiquidCrystal_I2C lcd(0x20,16,2);
地址是0x20,不适用常用的0x27、0x3f,也就是必须使用官方配套的液晶模块或者自己改造吧,怎么改造去问液晶屏卖家
根据lcd.print("Hello K-Finder");
所以LCD会显示上面内容
充电时PWR1重复闪烁4下,表示什么状态?
TM1637.h数码管模块驱动库,不知道这个是在巡线小车哪里接口连接?
Kittenblock_V1.29.zip\Kittenblock\plugins\Linefollow\Linefollow.ino
这个里面
float Kp = 90; // 80
float Ki = 0.15; // 0.15
float Kd = 1200; //1200
下面是控制左右轮正反转
[mw_shl_code=bash,true]void updateMotorSpeed() {
//spdR = -spdR;
if (spdL < 0) {
analogWrite(5, 0);
analogWrite(6, -spdL);
} else {
analogWrite(5, spdL);
analogWrite(6, 0);
}
if (spdR < 0) {
analogWrite(9, 0);
analogWrite(10, -spdR);
} else {
analogWrite(9, spdR);
analogWrite(10, 0);
}
}[/mw_shl_code]
M0:程序版本
M1:循迹传感器二进制
M2:PID
M4:循迹传感器模拟值
M6:开灯,小车左边LED亮,见图
关灯只能是M999指令吗?为什么只开左边一个灯?
M7:输出distance,该值由下面算法得出,不知道这个58.2是怎么来的?
[mw_shl_code=bash,true] temp=pulseIn(EYE_LEFT,HIGH);
distance=(float)temp/58.2;[/mw_shl_code]
M8:电池电压,函数是这么定义的,锂电池电压3.7V,为什么要*5.2?而不是3.7V?
[mw_shl_code=bash,true]void doBattery(){
int a = analogRead(A7);
float v = float(a) / 1024.0 * 5.2;
Serial.print("M8 ");
Serial.println(v);
}[/mw_shl_code]
充电还是挺快的,没1min就增加了0.2V,见下图
这个值太不准了,第二次测试一下从2.6跳到3.6了,如下
M9、M10:返回button状态,但是代码是错的,两个代码返回同一个按钮
void doButton1(){
Serial.print("M9 ");Serial.println(btn1);
}
void doButton2(){
Serial.print("M10 ");Serial.println(btn1);
}
试着在查询时,按下button1,返回低电平,
M12:红外发射
M210:DC马达校准
M214:左转弯,左轮不动,右轮旋转。返回的-17421不知道怎么来的?为什么是负数?测试时小车直接跑了,吓我一跳
M300:加速度相关,这里返回初始化失败
[mw_shl_code=bash,true]void parseCode(char * cmd) {
int code;
char * tmp;
code = atoi(cmd);
cmd = strtok_r(cmd, " ", &tmp);
switch (code) {
case 0:
echoVersion();
break;
case 1:
doGetSensor(tmp);
break;
case 2:
doGetPid();
break;
case 3:
doSetPid(tmp);
break;
case 4:
doGetThreshold(tmp);
break;
case 5:
doSetThreshold(tmp);
break;
// peripherals control
case 6: // front eye command
doEye(tmp);
break;
case 7: // ultrasonci sensor
doDistance();
break;
case 8: // battery
doBattery();
break;
case 9: // button 1 status
doButton1();
break;
case 10: // button 2 status
doButton2();
break;
//case 11: // irvalue
// doInfraRead();
// break;
case 12: // ir send
doInfraSend(tmp);
break;
case 13: // hover light
doHoverLight(tmp);
break;
case 15: // lcd
doLCD(tmp);
break;
case 16: // front rgb
doFrontRGB(tmp);
break;
case 18: // buzzer
doBuzzer(tmp);
break;
case 200:
doDcSpeed(tmp);
break;
case 201:
doCarMove(tmp);
break;
case 209:
doWriteDcAdjust(tmp);
break;
case 210:
doReadDcAdjust();
break;
case 214:
doJoystick(tmp);
break;
case 215:
setScene(tmp);
break;
case 216:
doIREnable();
break;
case 217:
doRingRGB(tmp);
break;
case 300:
gyroCalibrate();
break;
case 999:
asm volatile (" jmp 0");
break;
default:
break;
}
}[/mw_shl_code]
命令测试图片
|