` 本帖最后由 jinyi7016 于 2017-3-29 22:48 编辑
项目概述
现在各种单车盛行,但是有人爱车之人,当前市场上也出现了一批智能单车。
由于价格不菲,也成了小偷的关注点,那么就针对这样价格的自行车设计一款智能防盗的装置。
由此产生了这次试用。
硬件设计
由于试用是与硬件相关的,X20引出的GPIO是1.8V的,与自己的模块不兼容,只能自己做一块转换板了,这其中的时间就加长了,再加上年后工作比较忙,一下就耽搁了好长时间。 就在周未的时间,加紧结项了。 首先感谢电子发烧友给予的这次试用机会。可能试用结果并不完善。实用性不是太高,但是对于自己而言,收获是很多的。 对于Android的开发有了进一层的了解。
试用的硬件部分是比较简单的,通过读取MPU6050的数据,来判断自行车是不是发生了移动,来报警。 X20的官方给出了SPI、I2C、串口的驱动方式,已经是很详细了,就不再搬运了,可以到官网上去看一下。 那么直接来看一下这次的硬件组成,包括X20 开发板、1.8V 到3.3V 电平转换板、6050 模块。这里使用的是I2C 的方式。
软件调试
首先是硬件上I2C的使用。
使用DCT tool配置芯片的引脚为I2C功能。
I2C的读写程序
- int mt8193_i2c_write(u16 addr, u32 data)
- {
- struct i2c_client *client = mt8193_i2c_client;
- u8 buffer[8];
- int ret = 0;
- struct i2c_msg msg = {
- /*.addr = client->addr & I2C_MASK_FLAG,*/
- .addr = client->addr,
- .flags = 0,
- .len = (((addr >> 8) & 0xFF) >= 0x80)?5:6,
- .buf = buffer,
- };
- if (((addr >> 8) & 0xFF) >= 0x80) {
- /* 8 bit : fast mode */
- buffer[0] = (addr >> 8) & 0xFF;
- buffer[1] = (data >> 24) & 0xFF;
- buffer[2] = (data >> 16) & 0xFF;
- buffer[3] = (data >> 8) & 0xFF;
- buffer[4] = data & 0xFF;
- } else {
- /* 16 bit : noraml mode */
- buffer[0] = (addr >> 8) & 0xFF;
- buffer[1] = addr & 0xFF;
- buffer[2] = (data >> 24) & 0xFF;
- buffer[3] = (data >> 16) & 0xFF;
- buffer[4] = (data >> 8) & 0xFF;
- buffer[5] = data & 0xFF;
- }
-
- ret = i2c_transfer(client->adapter, &msg, 1);
- if (ret < 0) {
- pr_err("%s: send command error
- ", __func__);
- return -EFAULT;
- }
- return 0;
- }
- int mt8193_i2c_read(u16 addr, u32 *data)
- {
- struct i2c_client *client = mt8193_i2c_client;
- struct i2c_msg msg[2];
- u8 rxBuf[8] = {0};
- u8 lens = 0;
- if (((addr >> 8) & 0xFF) >= 0x80) {
- /* 8 bit : fast mode */
- rxBuf[0] = (addr >> 8) & 0xFF;
- lens = 1;
- } else {
- /* 16 bit : noraml mode */
- rxBuf[0] = (addr >> 8) & 0xFF;
- rxBuf[1] = addr & 0xFF;
- lens = 2;
- }
- msg[0].flags = 0;
- msg[0].addr = client->addr;
- msg[0].buf = rxBuf;
- msg[0].len = lens;
- msg[1].flags = I2C_M_RD;
- msg[1].addr = client->addr;
- msg[1].buf = rxBuf;
- msg[1].len = 4;
- i2c_transfer(client->adapter, msg, 2);
- *data = (rxBuf[3] << 24) | (rxBuf[2] << 16) | (rxBuf[1] << 8) | (rxBuf[0]); /*LSBfisrt*/
- return 0;
- }
复制代码
使用效果
由于现象不是很明显,做了一个简单的APP来显示结果,APP就在原来的测试APP上进行修改了,UI就用了最简单的控件,有点丑。 在正常情况下,可以通过开关控制打开报警功能。如下,是打开了报警功能,已经开始从6050上读取数据。
当用手晃动6050模块时,由于发生了位移,就会显示报警,其实此时可以加一个比较大的喇叭进行报警的,无奈手头上没有。
如果想要关闭这个功能,要输入密码,这里设置成固定的密码了,123456 ,输入正确,可以关闭报警功能。
如下,这是关闭后的界面。
在app 的制作过程中,对于在Android6.0 下的编程有了一定的理解,并熟悉了Android 的开发过程,通过app 与硬件的搭配,完成了这次试用。有一个贡献是转接板的设计。并不仅限于X20 上的使用,所有的96board 都可以使用,送PCB空板,好像也没有人要,看来后期吃灰吧,说不定哪天就仍了。
由于时间与自己的资源的关系,功能并不是太完善,对于这样的功能,将来要增加蓝牙的功能,X20 只做为本地的保护,可以与手机进行通讯。还应增加公里显示、可以连网提供天气等等功能。将在后期进行一步步实现。由于结项仓促,待将代码整理一下一并发出。
`
|