V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
hongfeiyu
V2EX  ›  程序员

手机蓝牙遥控循迹寻光重力感应全功能 STM32 小车

  •  
  •   hongfeiyu · 2016-05-09 20:56:19 +08:00 · 2813 次点击
    这是一个创建于 2915 天前的主题,其中的信息可能已经有所发展或是发生改变。

    很多设备调试,程序编写都是自己一个人一行一行一根线一根线调试出来的, 从中体会到了很多酸甜苦辣。其中调试小车让其识别拐弯与平时的轻度弯曲的直线之间的区别是最让人痛苦的,不过小车最后还是跑出了全专业最快的10 秒 /圈的速度。

    PS:此文中的小车的循迹程序寻光程序Android 遥控程序重力感应程序循迹与寻光自由切换程序 已全部上传至网上。

    最终效果

    小车最终外观

    小车正面照

    处理器用的是STM32F4

    小车后面照

    后面两个轮子为驱动轮,前面一个轮子为从动轮


    循迹

    循迹示意图

    GIF 演示

    这只是初期程序的效果,考核的时候已经不会在直线上扭来扭去了。但其实有的人的车不调也能到达差不多的效果,但无奈我的两个马达转速差别太大,调节也无法完全走直线。所以必须用程序做到将其完全可控。

    并且程序在检测到需要转弯时两个轮子是一前一后地转动,能够以最大限度的提供动力使车身转向并且还在直线上,当检测到转过的角度到达时车会立即继续向前开动。

    最终程序源代码:https://github.com/hongfeiyucode/find_way_car

    寻光

    寻光传感器

    这架在上面的是就是寻光传感器,最后考核很是蛋疼,很多人写的程序直接就是转 180 度然后car_forward() 检测到光直接停下,这种当然是最快的,但是因为前面说过的我这小车无法直行最后跑的不是很快。

    但是程序的逻辑还是很具有参考价值的: https://github.com/hongfeiyucode/find_light_car

    循迹与寻光自由切换

    这个主要是利用芯片上的一个按钮将其进行程序之间的切换。程序检测一个值,检测这个键是否按下,还有什么时候弹起,来达到两个程序之间切换的功能。

    这样相当于一个程序完成了两个程序的功能!

    也另外写了一个程序,程序还是很简洁明了的: https://github.com/hongfeiyucode/car_find_way_and_light

    Android 遥控程序

    这个是工程量比较大的一个项目,程序都是自己写的,这里把源代码也开源了:https://github.com/hongfeiyucode/Car_remote_control

    最后的程序大致界面,基本是重新改写了一遍。后期还加了重力感应这一功能。

    侧边栏 简化侧边栏

    操作说明:

    • 打开程序
    • 点击主界面的打开蓝牙
    • 拖出侧面的侧边栏
    • 点击查找蓝牙设备
    • 匹配小车的蓝牙
    • 连接成功后已经开始进入重力感应遥控模式了
    • 右下角的按钮可以切换重力感应与键盘操作模式
    • 两种模式各有各的特点,找到自己的喜欢的就好

    键盘操作时

    重力感应模式

    重力感应模式 重力感应 GIF 演示

    重力感应遥控说明:

    • 将手机树立起来时小车是停止状态
    • 想象手机是一个遥杆
    • 往前倾(手机上端远离自己)是向前,往后是后退
    • 左右倾斜分别是向左转向右转

    PS :别忘了 star 或者 fork 一下我的程序哦

    9 条回复    2016-05-10 13:03:31 +08:00
    sennes
        1
    sennes  
       2016-05-09 21:53:58 +08:00
    Sensor 没选好所以导致可能在算法上需要多下功夫。
    hongfeiyu
        2
    hongfeiyu  
    OP
       2016-05-09 22:07:28 +08:00
    @sennes 传感器是配发的,这可不能选哦
    sennes
        3
    sennes  
       2016-05-09 22:10:04 +08:00
    刚刚不小心点了发送。不好意思。

    对于做硬件项目给几点建议:

    1. 且不说功能如何 外观可以花点心思。 最低标准是,线不要凌乱的裸露在外。
    2. 开发前期应该先调研一下传感器。 您用几路普通传感器,但是采样的点和精度都不够好,会导致你的成果表现不会特别出色。
    3. 有条件的话尝试学习一下绘制 PCB 。像您这样的项目到了最后期就没有必要使用最小系统+模块的方式了。而且画集成的板子难度也不是特别高,能学到东西。
    4. 您软件这边做的还是不错的
    sennes
        4
    sennes  
       2016-05-09 22:11:45 +08:00
    @hongfeiyu 嗯 因为不知道你们题目
    不过感觉您挺有天赋的,如果多花点心思在外观和一些细节方面。会对您就业以后做研发带来不少好处。(如果打算做硬件这块的工作的话)
    hongfeiyu
        5
    hongfeiyu  
    OP
       2016-05-09 22:21:29 +08:00
    @sennes 碰到专业的大神了_(:з」∠)_
    其实我只是玩一玩的,也就接触了几周,自己瞎捣鼓的
    大神轻喷轻喷
    硬件方面确实只是因为平时自己动手多所以做起来不是很麻烦
    但是还是希望自己首先要不断不断地提高自己的编程水平
    sennes
        6
    sennes  
       2016-05-10 00:00:53 +08:00
    加油
    xmoiduts
        7
    xmoiduts  
       2016-05-10 07:10:06 +08:00 via Android
    请问大神,安卓要用多长时间学?最近想做个 arduino 调速风扇,想要接入手机做个第一印象好些的界面,对 java 和安卓 0 基础。 arduino 那边蓝牙倒是没啥问题。
    kobe1941
        8
    kobe1941  
       2016-05-10 09:51:20 +08:00
    STM32 ,好熟悉的名词,当年在大学也是玩单片机焊电路板

    已转行互联网,不解释
    hongfeiyu
        9
    hongfeiyu  
    OP
       2016-05-10 13:03:31 +08:00
    @xmoiduts 学的话一个月差不多就能写出来这种程序吧,我觉得,每个人情况不一样
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2246 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 11:53 · PVG 19:53 · LAX 04:53 · JFK 07:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.