
arduino
文章平均质量分 79
中中_软件工程师
这个作者很懒,什么都没留下…
展开
-
智能小车48:不用volatile,编译器会优化什么?
有网友评论了我前面的中断实验的c代码,说全局变量需加上volatile关键字。平时写Java程序也没有用到这个,只知道这个用于多线程,但也不能完全解决多线程并发修改共享变量的问题。这几天我都在思考这个问题,向干了多年嵌入式开发的同学请教,还问了下韦东山老师,然后下文就是我的这个问题的理解。测试两种情况 ,分别给全局变量INTNUM加上volatile和不加volatile,然后在AtmelSt原创 2017-11-14 11:17:51 · 558 阅读 · 0 评论 -
智能小车31:电路板V1.0安装指南
经过上次惨痛的教训,这次设计的电路板终于能用了,虽然还有小问题。先看一下这次的板子:优点是:1.四个角经过处理不割手了。2.孔径大小比较合适。3.L7805标出了方向。还有的问题是:1.设计的Dc插座没沟通好,孔没留出来2.2p插座没有标安装方向,需对比线路。不过后面我会介绍安装的方向。3.还有空余地方没有利用起来。4.电容标识不标准安装步骤要注原创 2017-09-13 07:51:12 · 754 阅读 · 0 评论 -
智能小车30:双轴舵机的安装与调试
之前我安装的控制电视的红外发送头是用了一个上下传动的舵机来控制上下的方向,用小车自已的转动控制左右的方向。而红外发射头是绑在舵转盘上的。这当然也能达到控制的目的,但这种绑的方式不容易重复安装,不稳定,还很丑。另外摄像头也无法用这种方式来安装,所以我找到了这样的装置来解决摄像头安装的问题----双轴舵机。红外发射头的单轴安装方式:先看一下双轴舵机的拼装结构:材料:2个舵机、1原创 2017-09-11 07:56:33 · 3360 阅读 · 2 评论 -
智能小车29:自动驾驶与机器学习
要让我的小车能自动去倒一杯咖啡。需要的做的事还有很多,其中一个很难的问题就是自动驾驶,怎么才能让我的小车自动驾驶到咖啡机旁边去呢?1.DeepDriving,网址http://deepdriving.cs.princeton.edu/ ,如图:这是一个不借助mobileye之类硬件的一个软件技术。直接通过图像识别来判断和控制汽车。2.comma.ai ,一个便宜的硬件+开源原创 2017-09-10 15:03:17 · 3857 阅读 · 0 评论 -
智能小车25:openwrt的网络配置
先看一下如何用上级路由器来访问我们的openwrt。之前老配错,错了就成了板砖,不敢配了。今天买了个openwrt,好好学习了下,实现了几十次,排除了路由器不稳定等情况,终于实验和学习到了正确的配置。1.刷好的openwrt路由器一般都有一个桥接了lan和wan的一个接口,有默认的无线连接master。这样我们才可能通过无线来访问到这个路由器。如下图:原来这个ip是192.168.原创 2017-09-01 08:31:04 · 951 阅读 · 0 评论 -
智能小车32:安装超声波测距
一、硬件准备1.购买超声波模块一个2.设计超声波安装电路板刚好今天我买的小台锯到了,可以把万能板锯成我想要的尺寸了。另外还要准备电钻给电路板打孔。切割成小切并打孔后就可以安装线与超声波的插座了,我选择了2个4p的排母。在背面需要把这4条线连上,开始用锡连,后来发现太麻烦,还不如连两根线。小车底盘我并没有打孔,而是利用了现成的一道缝,安装上两根铜柱。再把上面的电路原创 2017-09-18 10:27:35 · 2231 阅读 · 0 评论 -
搜索系统2:倒排索引
倒排索引可以说是lucene的核心,也就是我介绍的搜索系统的核心。所有数据的存储都是用的这种结构。例如需要索引的文档如下:对于上面的每行文档的txt字段,都可能被搜索。那么lucene是怎么做的呢?首先使用中文分词将文档切成单词序列(terms),lucene会给每个单词一个编号 ,同时记录那些文档包含了这个词。比如:养生这个词编号为1,那么倒排列表为{1,4}。根据中文分词的不同可能分出原创 2017-08-31 18:54:11 · 325 阅读 · 0 评论 -
智能小车24:openwrt的入门体验
openwrt是一个开源的linux系统。在硬改烧写路由器flash时,我非常惊讶于他的精简,4m就够了,16m就可以安装好些软件了。下面我介绍的是用的16m的,主要是luci的功能。这个控制台封装了主要的功能,我带大家来看一下这16m都能干些什么?1.登录与权限管理2.状态(统计信息)总览:除了图里的硬件信息、内存,还有网络状态、DHCP分配、无线、已连接站点这些信息。防原创 2017-08-31 08:56:47 · 1310 阅读 · 0 评论 -
智能小车23:检测电压模块实验
之前电压检测实验失败了。当电压降低时,确实会执行 digitalWrite(lightFlagPin,HIGH),也就是把灯点亮。但实际的实验中只发现灯亮了不超过3秒,之后就是一直处于灭灯的状态。按之前的代码逻辑,电压不足时才亮灯,而灭灯是正常的状态。而现在是电压不足而导致灯灭了,显然与代码逻辑不符。前面说过这个电路有基准电压不稳的问题,在电压不足时去测量arduino的5v与GND的电压原创 2017-08-30 08:26:17 · 1072 阅读 · 0 评论 -
智能小车28:openwrt程序开发入门
一、开发openwrt程序1.安装交叉编译环境sudo tar jxvf OpenWrt-Toolchain-ar71xx-for-mips_34kc-gcc-4.8-linaro_uClibc-0.9.33.2.tar.bz2 -C /opt/2.设置环境变量sudo vi /etc/bash.bashrc在最后一行添加:export PATH=/opt/OpenWr原创 2017-09-07 08:54:00 · 727 阅读 · 0 评论 -
智能小车36:如何使用存储器NandFlash
之前我写过一篇文章来介绍硬改tp-link路由器,就是更换它的flash。那个时候就发现路由器这种设备硬盘(flash)的容量比内存容量小得多,flash是16MB,内存是64MB。今天买了本嵌入式的教程才知道,存储器的分类是这样的。flash不是硬盘,但可以当个硬盘用。这和我们的pc机的存储设备不一样,如下图:在这之前的程序,要么是在片内内存(4k)里执行的,要么是从sdram执原创 2017-10-09 08:16:43 · 356 阅读 · 0 评论 -
智能小车34:arduino与arm的汇编程序开发
为了解底层技术,一直就想学习下汇编程序。但以前学习的都是理论,没有在真实环境实践过,时间长了就忘了。目前手头有arduino uno板子与arm 2440板子,分别在这两种平台写了段汇编程序,来理一理真实板子开发汇编程序的流程。一、Arduino汇编程序开发。1.安装和打开Atmel Studio 7.02.新建项目【File-New Project】,选择项目类型为Assembl原创 2017-10-01 11:05:11 · 761 阅读 · 0 评论 -
智能小车42:openwrt的系统配置与gpio操作
一、openwrt的系统配置openwrt也是基于Linux,因此它与大多数Linux系统一样都有以下配置文件:1./etc/rc.local 该文件是一个shell脚本,是在系统开机之后最后会调用到的脚本。也就是说,当有任何想要开机自启动的程序都可放在这里。2./etc/profile为每个登录用户设置的环境变量 。其中第一句是cat /etc/banner,这个文件内容就是原创 2017-10-26 08:14:48 · 1163 阅读 · 0 评论 -
智能小车38:晶振原理与串口的使用
一、振荡器的电气原理能够产生振荡电流的电路叫做振荡电路。一般由电阻、电感、电容等元件和电子器件所组成。由电感线圈l和电容器c相连而成的lc电路是最简单的一种振荡电路,其固有频率为f=[sx(]1[]2πlc。 如下图:图里的的电容充放电时间决定了振荡器的频率,这个频率就就是我们电器里的时钟。晶振就是石英材质的振荡器。上面只是原理图,而实际的电路原理图如下:从原理图里可以看出原创 2017-10-17 10:44:38 · 679 阅读 · 0 评论 -
智能小车41:用Atmel Studio7开发Arduino uno程序
以前有一篇是用Atmel Studio做arduino汇编程序的,相当于hello world。最近学习avr单片机,发现这个Atmel studio实在比Arduino IDE强大太多了。做为一名专业的程序员,用arduion ide也显得比较业余,毕竟arduino ide的代码不是纯粹的C语言,是经过包装后的高级语言。新建项目,选择atmel studio菜单File->New->Pro原创 2017-10-24 17:35:04 · 1650 阅读 · 1 评论 -
智能小车44:最小系统其实很简单
今天最终于搭了一个最小系统。敢说最小,因为只需要1个芯片。为了展示烧录程序的效果,加了个电阻和LED灯。但灯闪得太慢,不是程序里写的500毫秒,所以我再加个16m晶振和电阻,提供准确时钟。注意这个电阻为1M,且与晶振要并联。上图:嗯,这个连线有点多,主要是因为ICSP接口需要6条线连接Atmega328p这个芯片。ICSP的接线方式还是要介绍下的,不然程序烧不进芯片。ICSP编程器的6原创 2017-10-31 08:49:48 · 693 阅读 · 0 评论 -
智能小车37:异常在ARM、JAVA、硬件里的实现
几乎所有编程语言都有异常,可以说有程序就有异常。今天学习Arm的中断(异常)处理,联想到Java的异常,硬件中如何实现等问题,下面给大家分享一下。一、Arm的中断。1.触发异常2.保存现场3.cpu进入异常工作模式,程序指针(pc)跳入异常入口(处理异常的代码地址)a.分辨中断源b.进行逻辑处理c.清理工作4.恢复现场流程图(来源于《2440数据手册》)如下原创 2017-10-12 21:57:25 · 509 阅读 · 0 评论 -
智能小车43:avr溶丝位晶振的设置
我们用AtmelStudio来开发了avr点亮一盏Led的实验,实验中是把程序烧进了arduino uno板,没有什么问题。 这两天我准备用arduino uno的mcu(ATmega328P)来搭建一个最小系统的硬件环境,由于知识储备还不够,不敢从头搭建。我选择了从某宝上买了个HiAvr的板子,这个有原理图,可以拿来学习。下图就是我焊接好的样子。这次还是用《智能小车41:用Atm原创 2017-10-29 13:05:39 · 541 阅读 · 0 评论 -
智能小车39:十分钟做个游戏收割机
一、软件准备1.下载arduino idehttps://www.arduino.cc/en/Main/Software?setlang=cn现在最新的是1.8.4 有了代码格式化等新功能,好用了些。可选的板子少了些,以前玩的wemos板子就没法选了。2.编写arduino代码,如下:#include Servo myservo;int pos=0;//信号原创 2017-10-20 09:07:02 · 409 阅读 · 0 评论 -
智能小车35:从汇编指令bne聊起
今天学习韦东山老师的《存储管理器实验》这节课时出现了以下汇编代码,由于没有系统的学习过汇编指令,下面的代码真是不懂。1: ldr r4, [r1],#4 @ 从Steppingstone读取4字节的数据,并让源地址加4str r4, [r2],#4 @ 将此4字节的数据复制到SDRAM中,并让目地地址加4cmp r1, r3 @ 判断是否完成:源地址等于Steppingston原创 2017-10-04 22:48:46 · 685 阅读 · 0 评论 -
智能小车34:汇编与C语言一起玩
长时间写java程序,但从来没去研究main函数是如何执行的,今天学习嵌入式终于知道了原理。之前看过一本30天做一个操作系统这本书,可以通过写个2进制文件来启动系统。然后进化到汇编语言,通过工具把汇编转为二进制一样可以启动系统(虚拟机)。这个系统的执行过程与我们的main函数有什么联系么。做java的同学知道,只要执行java命令自然会执行main函数。做c语言的同学,知道在编译后执行原创 2017-10-03 13:34:53 · 575 阅读 · 0 评论 -
智能小车22:安装电压检测模块
任何技术上的一点进步,都要经过十分的努力。设计电路对我来讲完全是一个新的技术。昨天设计了这个电压检测模块,有专家给我指了下这个电路的一些缺陷。基准电压本来就可能会不太稳定,所以用这个电压去测另一个电压会有误差。我暂时接受这个误差,继续下一步的试验,把这个电路与我的小车结合。前面的《智能小车九:不学电路图怎么造车》讲了我目前用的扩展板是arduino ProtoShield,这上面有两组原创 2017-08-29 08:20:17 · 2442 阅读 · 0 评论 -
智能小车十八《如何用上级路由器访问openwrt》
其实用上级路由器访问openwrt很简单,如下图:在我们刚把720n硬改后,是通过有线连接192.168.1.x来操作路由器的。这时可以进入上面的页面,但没有无线连接。这时可先加个无线连接,连接到家里的路由器,如上图。图里的192.168.1.107是家里的路由器给它分配的路由器。但这时插掉网线后,无法访问720n,两个ip都不行。上文我就是卡在这儿了。解决办法是把lan这原创 2017-08-24 11:19:16 · 766 阅读 · 0 评论 -
智能小车二十一 《电压检测模块设计》
小车经常出现一个问题:玩着玩着,操作它前后左右动,但它不动。这时候就不知道到底是那儿的问题,是线断了还是电压不够了。经过我很多次的经验得出,这是因为没电了。因为我每次这时候都会拿电压表去测一下,发现电池电压都在6v以下了。根据这个线索我设计了一个小电路来测电压。我计划是用小led灯来报警,当电压不足时,灯就常亮。电压不够时(6v)一般小灯还是能够点亮的。经查资料,5mm小灯的工作电原创 2017-08-28 08:41:08 · 2860 阅读 · 0 评论 -
智能小车十三《扩展开关和充电接口》
上文我们已经做出蓝牙小车了。但它还有些不方便的地方。首先它没有开关,是否能工作需要手工插拔插头。其次,我们用的18650电池在下层底板,要充电还需要卸掉上层板才行,这太麻烦了。如何用开关来控制电源? 这个很简单,把电源的一根线分别接到开关挨着的两引脚就可以了。下图是开关两边的腿是用于固定的,没有用,我把他折了。中间的3根腿用于接线的。现在我想用这三根腿来控制arduino电原创 2017-08-19 13:14:06 · 888 阅读 · 0 评论 -
智能小车六《串口协议》
在智能小车四《串口通信》中讲解了串口的通信原理,它就是一个直接把信息转为电信号的工具,透明传输。接着这篇文章我们来解决一下没有协议而发生信息错乱的情况。比如在我们的小车里,收到字符u表示要前进。我们用实际手机给小车发一条蓝牙串口命令。从上面你拼出什么了么?CONNECT ...... 这些是蓝牙协议的内容,他可能会与我们的命令重合,使我们的小车发生错乱。于是我想自己定义一个协议,我原创 2017-08-12 09:25:30 · 1983 阅读 · 0 评论 -
智能小车五《电机芯片》
我这个系列的文章主要是要造一个小车,小车中一个很重要的部件就是电机。我曾尝试自己设计电路来实现电机的正反转。首先我找到了电路图:这个两个开关总不能人来控制吧, 我想到了用两个继电器来代替开关。简单普及一下继电器。继电器(英文名称:relay)是一种电控制器件,是当输入量(激励量)的变化达到规定要求时,在电气输出电路中使被控量发生预定的阶跃变化的一种电器。它具有控制系统(又称输入回路)和原创 2017-08-11 13:35:17 · 1272 阅读 · 0 评论 -
智能小车十二《整合软硬件制造蓝牙小车》
做成一件事结果很短暂,过程很漫长。我昨晚终于把我的小车给组装起来了,就这样:前面已经介绍了底盘、电池的组装。电路板有两层,下面是Arduino Uno, 这个在淘宝上买一块即可。上面的扩展板,是经过好几天的学习,总结了三篇(本文前三篇),而设计出来的。昨晚主要的任务就是要把这个扩展板焊接出来,连上马达与电源线。再把程序下载到arduino,本小车就可以实现蓝牙控制了。焊接第原创 2017-08-18 14:00:14 · 391 阅读 · 0 评论 -
智能小车四《串口通信》
为什么串字是这么写,可能它是个象形字。在arduino中,串口与这个意思比较相近,他只需要一条线。比如下图我就是从一个板子的串口发送到另一个板子,只用一根线,把它两给串起来,数据就通过这条线传输。串口通信涉及到硬件与软件。串口硬件的发送和接收表示序列位的电脉冲数据。每个字节信息由各种组合的"0"和"1"构成。arduino所用的方案是0v表示比特值0,而5v(或3.原创 2017-08-10 14:06:22 · 1639 阅读 · 0 评论 -
智能小车十一《完成小车电路板设计》
一、.连接元件与封装[Design->Load Nets]可能会报如下错误 node not foundFootprint not foundno Component found解决办法,1.注意每个元件都要连上封装2.每个封装上的引脚要与元件里的引脚名一致,不然连线(net)会报错3.元件名不能有特殊符号要注意几点:1.可以封闭原创 2017-08-17 15:27:22 · 1331 阅读 · 0 评论 -
智能小车三《技术用到九寨沟去》
请先原谅我的标题,本文还是讲技术的。本来我是想和以前一样介绍arduino技术。但昨天的地震和我最近遇到的一些事,让我感觉到人的渺小,在大自然、宇宙、行驶的汽车面前,人就是只蚂蚁。但人不同于蚂蚁,人有梦想。我的梦想就是从计算机这个角度来理解世界,为世界做一些事。比如利用arduino技术制作一个小车,去探测倒塌的房屋。 但我还是一脚踏实地,一步一步的学习技术,实现各种功能,最后才能用原创 2017-08-09 13:35:26 · 410 阅读 · 0 评论 -
智能小车十《从原理图到PCB图》
有了电路原理图,可以做以下3件事。1.电气规则检查Tools->ERC...这个可以检查出连线不正确的地方。2.生成元件列表报告单。 Reports->Bill of Material选择sheet,一路next.最后生成清单,xls文件的。我的比较简单,采购元件可以用此文件3.创建网表文件[Design->Create Netl原创 2017-08-16 15:02:16 · 4646 阅读 · 0 评论 -
智能小车二《arduino的软件环境》
arduino的官方网站是https://www.arduino.cc ,上面有很多软件和资料。本文讲的软件主要也来源于这里。arduino的开发环境有:一.web在线开发。使用这个功能得先注册,而我试验却没有注册成功,报找不到文件,应该是系统还不稳定。二.本地arduino ide,目前管网最新版本是1.8.3,如下图。我选择的是Windows ZIP file for原创 2017-08-08 14:54:23 · 866 阅读 · 0 评论 -
智能小车七《上位机android》
接着上文的串口协议,本文再介绍下android端如何实现。现在程序员分工很明确,很多会C的不会java,会java不一定会开发android。而我的本职工作是开发java后台的,android的开发只能算个业余选手,但开发一个小车的控制程序还是可以的。先介绍一下android的开发环境,Android Studio。如下图:我们新建一个项目后,主要的要改的文件都在这个main文原创 2017-08-13 09:09:02 · 1261 阅读 · 1 评论 -
智能小车十四《小车如何控制电视》
要控制电视,需要先了解电视遥控器原理。电视遥控器前面都有个红外发射头,点遥控器时,通过这个头发送一些命令码。不同按键对应不同的命令。 电视的红外接收头收到这个命令后执行相应的电器特性。那么我们的小车要控制电视,只需发出与遥控器一样的红外命令,就可以了。小车已经可以左右转,但不能上下转。因为红外模块对方向敏感,电视一般比地面高,所以我们还需支持上下转才能正常控制电视。我用舵机来实现这个功能,按这原创 2017-08-20 09:41:41 · 392 阅读 · 0 评论 -
智能小车27:4个Protel小技巧
1.删除元件或线,按钮 e->d ,再用鼠标选择你要删除的元件或线2.protel99 PCB图点击元件后,鼠标便跑到其他地方了,看不到元器件了。怎么办?解决办法:封装做完最后还要设置参考点,执行edit——set reference——pin 1(1脚)或center(中心)或location(自定义位置)。3.修改电路的一般流程a.修改电路原理图 b.修改或增加原创 2017-09-05 13:33:27 · 362 阅读 · 0 评论 -
智能小车二十《摄像头和路由器装上小车》
很多次失败后,昨晚突然找到一个路由器16m的flash。再来一遍吧,经过几次的安装、加锡、去锡,终于把路由器搞定了。我就用默认的网络配置吧,至少这样比较稳定,每次都能访问到路由器。总结昨晚几次的路由器的问题,还是焊接问题。正常的情况是一插电会闪两次,之后关闭几秒钟,最后常亮,亮度较高。前两次都是灯常亮,比较暗的那样亮,前文已经发过。8个引脚与焊盘的间隙基本看不见,不过我还是加了两次锡,终于原创 2017-08-26 16:11:59 · 2488 阅读 · 0 评论 -
智能小车十七《路由器挂载摄像头》
本来准备好电烙铁准备硬改路由器了。抱着试一试的态度把笔记本的无线关了,插上有线连上这个“砖头”路由器。尝试ping了个地址,发现192.168.1.129和192.168.1.202有响应.我就再用SecureCRT连一下。我去,能连上,砖头路由器能用,还能连上外网。我赶紧把配置截个图。有线连接:无线连接:路由信息:现在这个路由器相当于中继模原创 2017-08-23 08:20:28 · 803 阅读 · 0 评论 -
智能小车26:我做了个垃圾电路板
第一次做pcb,惨痛的教训,基本不能用。先看下打出的样板:焊接后的正面:焊接后的背面:检测、改造了两天,才勉强工作。也就是上面两图中的最后一张,前面的两张都成了牺牲品。总结下问题:1.孔太小,所有的孔都小。最严重的是7805芯片,引脚是粗的,根本插不进去。最后改造了下,借助一个3p排母把7805装上去了。2.arduino的两组数字排母之间的间距太大,要把一级引原创 2017-09-04 08:14:31 · 965 阅读 · 0 评论 -
智能小车十六《openwrt虚拟机连接网络》
接着上文,在安装好openwrt虚拟机后,ping外网是ping不通的。收集和测试了一大堆资料后总结的解决方法:1. 把内存配置成256MB,这是前提。我有教训,配了好几个都不行(内存用的512MB),后来配了下内存,网络奇怪的好了,原因我还不知道哈。2.修改/etc/config/network默认安装的配置如图:修改成如下配置:就是设置原创 2017-08-22 08:47:59 · 612 阅读 · 0 评论