微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > 嵌入式系统设计讨论 > 智能自行车部分功能实现与Android6.0下的应用开发学习(结项)

智能自行车部分功能实现与Android6.0下的应用开发学习(结项)

时间:10-02 整理:3721RD 点击:

项目概述
现在各种单车盛行,但是有人爱车之人,当前市场上也出现了一批智能单车。


由于价格不菲,也成了小偷的关注点,那么就针对这样价格的自行车设计一款智能防盗的装置。
由此产生了这次试用。
硬件设计

由于试用是与硬件相关的,X20引出的GPIO是1.8V的,与自己的模块不兼容,只能自己做一块转换板了,这其中的时间就加长了,再加上年后工作比较忙,一下就耽搁了好长时间。

就在周未的时间,加紧结项了。

首先感谢电子发烧友给予的这次试用机会。可能试用结果并不完善。实用性不是太高,但是对于自己而言,收获是很多的。

对于Android的开发有了进一层的了解。


试用的硬件部分是比较简单的,通过读取MPU6050的数据,来判断自行车是不是发生了移动,来报警。

X20的官方给出了SPI、I2C、串口的驱动方式,已经是很详细了,就不再搬运了,可以到官网上去看一下。

那么直接来看一下这次的硬件组成,包括X20开发板、1.8V到3.3V电平转换板、6050模块。这里使用的是I2C的方式。





软件调试
首先是硬件上I2C的使用。
使用DCT tool配置芯片的引脚为I2C功能。
I2C的读写程序

  1. int mt8193_i2c_write(u16 addr, u32 data)
  2. {
  3. struct i2c_client *client = mt8193_i2c_client;
  4. u8 buffer[8];
  5. int ret = 0;
  6. struct  i2c_msg  msg = {
  7. /*.addr        = client->addr & I2C_MASK_FLAG,*/
  8. .addr = client->addr,
  9. .flags = 0,
  10. .len = (((addr >> 8) & 0xFF) >= 0x80)?5:6,
  11. .buf = buffer,
  12. };
  13. if (((addr >> 8) & 0xFF) >= 0x80) {
  14. /* 8 bit : fast mode */
  15. buffer[0] = (addr >> 8) & 0xFF;
  16. buffer[1] = (data >> 24) & 0xFF;
  17. buffer[2] = (data >> 16) & 0xFF;
  18. buffer[3] = (data >> 8) & 0xFF;
  19. buffer[4] = data & 0xFF;
  20. } else {
  21. /* 16 bit : noraml mode */
  22. buffer[0] = (addr >> 8) & 0xFF;
  23. buffer[1] = addr & 0xFF;
  24. buffer[2] = (data >> 24) & 0xFF;
  25. buffer[3] = (data >> 16) & 0xFF;
  26. buffer[4] = (data >> 8) & 0xFF;
  27. buffer[5] = data & 0xFF;
  28. }

  29. ret = i2c_transfer(client->adapter, &msg, 1);
  30. if (ret < 0) {
  31. pr_err("%s: send command error\n", __func__);
  32. return -EFAULT;
  33. }
  34. return 0;
  35. }
  36. int mt8193_i2c_read(u16 addr, u32 *data)
  37. {
  38. struct i2c_client *client = mt8193_i2c_client;
  39. struct i2c_msg msg[2];
  40. u8 rxBuf[8] = {0};
  41. u8 lens = 0;
  42. if (((addr >> 8) & 0xFF) >= 0x80) {
  43. /* 8 bit : fast mode */
  44. rxBuf[0] = (addr >> 8) & 0xFF;
  45. lens = 1;
  46. } else {
  47. /* 16 bit : noraml mode */
  48. rxBuf[0] = (addr >> 8) & 0xFF;
  49. rxBuf[1] = addr & 0xFF;
  50. lens = 2;
  51. }
  52. msg[0].flags = 0;
  53. msg[0].addr = client->addr;
  54. msg[0].buf = rxBuf;
  55. msg[0].len = lens;
  56. msg[1].flags = I2C_M_RD;
  57. msg[1].addr = client->addr;
  58. msg[1].buf = rxBuf;
  59. msg[1].len = 4;
  60. i2c_transfer(client->adapter, msg, 2);
  61. *data = (rxBuf[3] << 24) | (rxBuf[2] << 16) | (rxBuf[1] << 8) | (rxBuf[0]);        /*LSBfisrt*/
  62. return 0;
  63. }

复制代码


使用效果

由于现象不是很明显,做了一个简单的APP来显示结果,APP就在原来的测试APP上进行修改了,UI就用了最简单的控件,有点丑。 在正常情况下,可以通过开关控制打开报警功能。如下,是打开了报警功能,已经开始从6050上读取数据。




当用手晃动6050模块时,由于发生了位移,就会显示报警,其实此时可以加一个比较大的喇叭进行报警的,无奈手头上没有。




如果想要关闭这个功能,要输入密码,这里设置成固定的密码了,123456,输入正确,可以关闭报警功能。


如下,这是关闭后的界面。




在app的制作过程中,对于在Android6.0下的编程有了一定的理解,并熟悉了Android的开发过程,通过app与硬件的搭配,完成了这次试用。有一个贡献是转接板的设计。并不仅限于X20上的使用,所有的96board都可以使用,送PCB空板,好像也没有人要,看来后期吃灰吧,说不定哪天就仍了。


由于时间与自己的资源的关系,功能并不是太完善,对于这样的功能,将来要增加蓝牙的功能,X20只做为本地的保护,可以与手机进行通讯。还应增加公里显示、可以连网提供天气等等功能。将在后期进行一步步实现。由于结项仓促,待将代码整理一下一并发出。


学习,很好。

很不错。赞一个。

转接板非常不错,建议有96boards开发板的都配备一块。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top