到年末了,最近也有了一些自己的时间。回到了原来的技术处,晚上终于不用疯狂加班了,下班回家也终于有功夫折腾自己以前想玩的玩具了: )

树莓派刚发布的时候就一直想搞一台,但是淘宝上面的价格也是一直居高不下,想想家里已经N多PC,NAS和笔记本了,一直找不到入手的理由。圣诞节附近随便一刷淘宝,发现新版本B+ 已经降到了170块,果断买下。

回家折腾了几天,性能果然弱的跟价格成正比。。。百兆的小网卡实在看不上眼。算了,从小玩意玩起吧,先装一个wifi小车。

有了想法,开始组装! 由于之前折腾了几天Arduino对于各种驱动板已经基本熟悉,所以接线非常简单。底盘随便找了块塑料板,轮子直接双面胶+热熔胶固定,总之是很丑,好吧。。。

不怕见笑,Beta版完成图如下:

 

驱动板有两种,一种是L298N

主控芯片

L298N

包装形式

盒装出货

逻辑电压

5V

驱动电压

5V-35V

逻辑电流

0mA-36mA

驱动电流

2A(MAX单桥)

存储温度

-20℃ 到 +135℃

最大功率

25W

另一种是L9110S芯片的驱动板,参数如下: 模块供电电压:2.5-12V

电机工作电压2.5v-12V之间,

最大工作电流0.8A

考虑到我们的小车不需那么大功率,直接用一个L9110S驱动板,单侧的轮子并联为一组,这样相当于驱动板驱动两路直流电机组。

代码部分,小车的server端用python写的,用了个把小时(网页css多年没写过了,折腾死)。网页版控制页面如下:

刚开始用的图标太丑,在同事的提醒下,改了个按钮图标现在看起来顺眼多了,感谢@Jane同学。

运行效果:

核心代码:

'''
#=============================================================================
#     FileName: views.py
#         Desc: 
#       Author: wangheng
#        Email: wujiwh@gmail.com
#     HomePage: http://wangheng.org
#      Version: 0.0.1
#   LastChange: 2015-01-14 13:46:29
#      History:
#=============================================================================
'''
from flask import Flask, request, session, g, redirect, url_for, abort, render_template, flash
from contextlib import closing
from pi_car import app
import re
import RPi.GPIO as GPIO
@app.route('/')
def show_index():
	return render_template('home.html')

@app.route("/login", methods=["GET", "POST"])                                   
def login():                                                                    
	if request.method=="GET":                                                   
		return "get"+request.form["user"]
	elif request.method=="POST":                                                
		return "post"

@app.route('/ctl',methods=['GET','POST'])
def ctrl_id():
	if request.method == 'POST':
		id=request.form['id']
		GPIO.setmode(GPIO.BOARD)
		GPIO.setwarnings(False)
		GPIO.setup(11,GPIO.OUT)
		GPIO.setup(12,GPIO.OUT)
		GPIO.setup(15,GPIO.OUT)
		GPIO.setup(16,GPIO.OUT)

		if id == 't_left':
			t_left()
			return "left"
		elif id == 't_right':
			t_right()
			return "right"
		elif id == 't_up':
			t_up()
			return "up"
		elif id == 't_down':
			t_down()
			return "down"
		elif id == 't_stop':
			t_stop()
			return "stop"

	return redirect(url_for('show_index'))

def t_stop():
	GPIO.output(11, False)
	GPIO.output(12, False)
	GPIO.output(15, False)
	GPIO.output(16, False)

def t_up():
	GPIO.output(11, True)
	GPIO.output(12, False)
	GPIO.output(15, True)
	GPIO.output(16, False)

def t_down():
	GPIO.output(11, False)
	GPIO.output(12, True)
	GPIO.output(15, False)
	GPIO.output(16, True)

def t_left():
	GPIO.output(11, False)
	GPIO.output(12, True)
	GPIO.output(15, True)
	GPIO.output(16, False)

def t_right():
	GPIO.output(11, True)
	GPIO.output(12, False)
	GPIO.output(15, False)
	GPIO.output(16, True)

启动网页服务:

使用root用户ssh登陆到树莓派,切换到piCar的目录,执行python server.py 打开你的浏览器,输入树莓派IP:2000 就能看到你的控制页面了。 🙂

程序的完整源码放到了  https://github.com/wujiwh/piCar/tree/master/server 需要的朋友可以参考一下。

原创文章,请阅读页脚的许可方式,转载请注明: 转载自王恒的博客 [ https://wangheng.org ]

本文链接地址: https://wangheng.org/?p=95023

26条评论 在“树莓派Wifi小车(一)”

  1. 赵玉文说道:

    太厉害啦,博主教教我吧

  2. 小新子轶事说道:

    您好 博主 我现在只是使用arduino利用人工按钮可以控制小车的前后左右停止动作,树莓派的无线wifi也已调试好,使用tightvnc来实现远程控制树莓派,但如何将树莓派和arduino连接起来实现远程控制小车的动作?

    • 王恒说道:

      raspi这么弱,vnc不卡么。arduino想无线控制的话,你得有通信的模块啊,串口蓝牙,ESP8266无线,或者nrf24l04都行。也不一定非用raspi控制了。

      • 小新子轶事说道:

        博主我可能知道您做的这个的大概意思了,您的L9110S驱动直接是连接到树莓派上的GOIP上边了是吗?这样的话省去了arduino这个板子,其实也是可以开发的那我现在用我的L298N驱动直接连接树莓派的GPIO上,并且在python上定义好对应的端口,其实就可以实现wifi控制了吧?

      • 王恒说道:

        非得用wifi么?那用8266 模块配合Arduino也可以,淘宝有卖的很便宜,十几块钱吧。不过用raspi 更简单就是成本高点。

  3. 小新子轶事说道:

    非常感谢博主,这个控制页面我已经调试好了,目前wifi小车的问题应该不是很大,终于解决掉wifi控制小车和图形界面这两大难题了,接下来我可能会增加一摄像模块和定位模块实现拍照功能和定位功能。您真的是一大牛,以后关于树莓派wifi智能小车的问题还请您多多指教啊,互通有无

  4. 小新子轶事说道:

    博主,请问下您使用的L9110S芯片的驱动板的供电电压使用的是几伏,我现在可能要用L298N驱动板,它的电压是5V,这样L298N的IA1,IA2,IB1,IB2分别连接到树莓派的GPIO接口上,会不会把树莓派烧坏啊?

  5. 小新子轶事说道:

    您好,博主,请问下您这里的完整代码调试后就可实现UI控制小车了吧,我不需要再另外编写代码了吧?

  6. 小新子轶事说道:

    您好,博主,请问这个项目里边用到Flask-WTF和OpenID了吗

  7. 小新子轶事说道:

    您好,博主,请问您有__init__,views和config的readme文档吗?我看了很久时间的python和flask教程,__init__和views部分还是有些理解不了啊,谢谢您

  8. 小新子轶事说道:

    博主,请问下一直有GET,没有POST,还有如下图的问题,您觉得是哪块有点问题啊?此外L9110S的vcc端是用树莓派的3.3伏排线口供电,还是用外接5伏电源供电啊?

  9. 小新子轶事说道:

    192.168.1.168 – – [31/Jan/2015 20:51:48] “GET / HTTP/1.1” 200 -192.168.1.168 – – [31/Jan/2015 20:51:48] “GET /static/style.css HTTP/1.1” 200 -192.168.1.168 – – [31/Jan/2015 20:51:48] “GET /static/img/up.png HTTP/1.1” 200 -192.168.1.168 – – [31/Jan/2015 20:51:49] “GET /static/img/left.png HTTP/1.1” 200 -192.168.1.168 – – [31/Jan/2015 20:51:49] “GET /static/img/stop.png HTTP/1.1” 200 -192.168.1.168 – – [31/Jan/2015 20:51:49] “GET /static/img/right.png HTTP/1.1” 200 -192.168.1.168 – – [31/Jan/2015 20:51:49] “GET /static/img/down.png HTTP/1.1” 200 -192.168.1.168 – – [31/Jan/2015 20:51:51] “GET /favicon.ico HTTP/1.1” 404 –

  10. 小新子轶事说道:

    这里没有form表单,是如何实现POST响应的?谢谢博主

  11. 超人不会飞。说道:

    可以联系博主吗?

  12. 王恒说道:

    你评论怎么被自动归集到垃圾评论了,今天清理才看到。这个程序用到了flask,你需要首先在你的python模块中安装flask 通过easy_install flask 或者pip install flask 都行

  13. 歪妖内涵网说道:

    秒赞不是偶然,是一种态度!

  14. 刘涛说道:

    l9110s电机能调速度吗

  15. kaka说道:

    博主,您好,缺少一些库,导致sudo python server.py,无法运行,求教完整版

给我留言

*

*