arduino智能小车小车使用什么模块可以定位x坐标和y坐标

本店售价:¥359.00
本店售价:¥19.00
本店售价:¥32.00
本店售价:¥559.00
本店售价:¥249.00
本店售价:¥398.00
本店售价:¥32.00
本店售价:¥15.00
本店售价:¥55.00
本店售价:¥59.00
本店售价:¥49.00
本店售价:¥50.00
本店售价:¥89.00
本店售价:¥179.00
本店售价:¥349.00
本店售价:¥7.50
本店售价:¥119.00
& 【创客学堂】Arduino+Processing 制作极客风格绘图机
【创客学堂】Arduino+Processing 制作极客风格绘图机
编辑:Magic
无线电-臧海波
浏览次数:40
& & & 面对到底学习哪种编程语言更好的问题,我的观点是自己感觉简单、好用就足够了。因为不论哪种计算机语言,起到的也不过是一种人机对话的作用,方便程序员编写程序。真正
让机器活起来的角色是算法(数学)。本文将通过一台极客风格绘图机的设计、制作过程,向你展示隐藏在程序背后的算法的巨大力量。
& & & 从结构上看,大多数绘图机不管是滚筒式还是平台式,都是建立在直角坐标系的基础上。这种结构对业余玩家来说,最大的问题就是造价过高,因为你必然会用到丝杆、导轨、滑
台或同步轮、同步带这类的零件。很多时候电机本身并不贵,但是配上一根精度说得过去的丝杆,成本就会翻上数倍,从学习、实验的角度看就得不偿失了。有没有什么好的办法造一台既简单又炫酷的绘图机呢? 对极客来说,每个问题都是一剂激发创意的催化剂。下面就请读者跟着笔者扮演一回极客,试试用极客的思路解决问题, 看看能不能用常见的材料制作一台绘图机。 既然成品丝杆电机比较贵,就试试别的驱动器吧。模型和机器人上常用的舵机就是 一个选择,但是舵机有一个问题,就是它输出的是角位移,这样你就无法照搬常规绘图机的结构和控制思路。这个问题也不难解决,可以参考工业机器人的手臂式结构。既然工厂里的机器臂可以做到能穿针引线的精度,那么用几个舵机驱动手臂绘图也一定可行。
& & &&为了简化制作,我把手臂设计成了 3 个自由度的,1个舵机控制笔尖的起落,另外 2 个舵机驱动肩关节和肘关节,控制器为 Arduino。因为手头正好有一套奥松机器人的百变之星
创意拼装套件,绘图机结构部分的制作变得轻松了许多。
& & & 手臂的主要材料是 3 套配支架和 U 形框的标准舵机,如图 1 所示。此外还有一些 钣金件和紧固件。
图 1 单个关节的结构件和组装工具
& & &&为了便于建模和计算,我制作的是一 条仿生右臂,如图 2 所示。
图 2 机器右臂俯视图(假设机器人在你对面)
& & &结构上,大臂和小臂的长度相等,完成后的手臂从肩关节到肘关节、从肘关节到笔尖的长度均为115mm,如图 3所示。
图 3 肩关节与肘关节的实测距离为 115mm
& & & 肘关节到笔尖的距离可以微调。落笔舵机在90°时,笔尖与纸面垂直,减小角度可以使笔尖向外倾斜,增加距离,反之则缩短距离。我设置的是85°,这样笔尖稍微向外倾斜,距离正好为115mm,如图4 所示。如果想自己DIY,一个要注意的问题是给舵机加上虚轴,从结构上减小抖舵造成的影响。还可以在关键部位加上一块泡沫,构成减振缓冲垫,减小因手臂摆动幅度过大而产生的晃动,我在机器人的肘部就加了一块(见图 4)。你也可以发挥想象力,根据手头现有的材料设计出更好的结构。另一个要注意的是舵机的供电问题。 标准舵机消耗的电流比较大,用Arduino 上自带的稳压芯片给2 个舵机供电是可以的,3 个就有点勉强了,最好给舵机单独供电。
图 4& 调节舵机落笔角度,校正肘关节到笔尖的距离。肘部下面用双面胶粘了一块泡沫减振
& & &&系统控制思路非常简单,让手臂随着鼠标的动作实现定位,用鼠标的单击控制笔尖的起落进行绘制。绘图机的软件分为 Arduino 和 Processing 两个部分。我使用的软件版本为Arduino-1.6.4 和 Processing-2.2.1。这个项目主要研究的是算法和编程,为了方便初学者参考,我会把各个步骤尽量细化并加以说明。
Arduino 部分非常简单,只要连接好USB 电缆,在IDE 中选择对应的板卡和端口, 把示例中的Firmata\ServoFirmata 上传到控制板就可以了。这个操作相当于把 Arduino 刷成了一个舵机控制器,不需要给Arduino 编写任何程序。
& & & &Firmata 是 Arduino 平台下的一个PC 与单片机通信的协议,支持多款单片机和上位机,如Processing、Pure Data、Linux C++。Arduino IDE 中已经包含了这个协议, 但是我建议把它替换成最新的。从 http:// firmata.org/wiki/Download 可以下载到最新的压缩包 Firmata_v2.3.6.zip, 解压后替换掉 Arduino IDE根目录下的libraries\ Firmata。所有运算都在Processing 上实现, 程序跟踪鼠标的移动和单击操作,生成实时动作组,最后通过Firmata 协议控制连接在 Arduino 上的3个舵机驱动手臂运转。 首先要给Processing安装一个Arduino库, 这样它就可以利用 Firmata 协议与刚完成的 Arduino舵机控制器通信了。 库的下载地址见 , 把 processing2-arduino.zip 解压后复制到Processing 根目录下的modes\java\libraries。因为Processing 是基于Java开发的,你可以发现这个库的核心是一个名为arduino的jar包。
图 5 绘图机数学模型示意图 部分为绘图机
& & & 接下来要在Processing 里给绘图机建 立一个数学模型,如图 5 所示。
& & & Processing 绘制的坐标原点位于窗口左上角,即图5 中的A 点,这是一个直角坐标系,x 轴向右为正,y 轴向下为正,1 像素对应现实世界中的1mm。图 5中蓝色的两段手臂,B点为肩部舵机,C 点为肘部舵机,D 点为笔尖落点。为什么不把肩部舵机放置在 A 点原因很简单,我用的舵机是逆时针旋转的,从左转到右,对应着 0° ~180°,如果放在 A 点, 0°~90°的部分就超出了窗口定义的范围。 所以先要作一个坐标平移,把基准点从A 平移到 B,x 坐标取窗口宽度的一半,y 坐标不变,这样舵机的运动范围就完全包含在窗口以内了。不过这样一来鼠标坐标也跟着向右平移了1/2 个窗口宽度,需要进行修正, 最后得出笔尖落点 D 的坐标为 (mouseX- width/2,mouseY)。
& & &&从图 5 中可以看出,用手臂定位 D 点只需要确定两个关节旋转的角度就可以了。 角b为肩部舵机角度,角c为肘部舵机角度。 下面转到极坐标系,以B 为极点,Bx 为极轴, 可以用 dist() 函数计算出 D 点的极径,用反正弦函数计算出极角d,用反余弦函数计算出角a。每段手臂的长度115mm 是已知的。 有了这些数据,就可以在屏幕上画出手臂的仿真图形。最后,把弧度转换为角度,调用 Arduino 库的 servoWrite() 函数把角度写入对应的舵机就可以了。 别忘了还有一个控制笔尖起落的舵机,
& & & 这个舵机的控制是用Processing 对鼠标左键单击的响应来实现的。注意下面程序中涉及图形绘制部分采用的是弧度制,硬件控制部分采用的是角度制,不要弄混。最后发送到肩部舵机的角度 b=180-a-d,肘部舵机的角c 是手臂围成的大三角形的外角,因为两段手臂长度相等,可以得出 c=2a。
& & & 到这里,一些读者可能会觉得要实现这么多功能,程序编写起来会有一点难度。 不用担心,Processing 是一种基于感官的程序语言,强调的是实用和互动。举个例子,我想在屏幕上画个圆,只要敲一行代码,调用ellipse() 函数,给出几个参数就可以了。而换成传统的程序设计语言,可能要学习半个学期,写数十行代码才能实现。 Arduino 是在Processing 的基础上开发的, 因为血缘的关系,你会发现它的编程方式和 Arduino 很相似,只是 Arduino 更偏向 C, Processing 更偏向 Java。
& & & 接下来按照上面整理的思路给绘图机编写一个 Processing 驱动程序。为了方便阅 读理解,我把软件仿真部分标为蓝色,把硬件控制部分标为红色。
import processing.serial.*; // 导入串口库 import cc.arduino.*; // 导入 Arduino 库 A // 关联硬件
int servo1pin = 9; // 设定落笔舵机端口 int servo2pin = 10; // 设定肘部舵机端口 int servo3pin = 11; // 设定肩部舵机端口
// 设定 2 个关节的初始位置为 0°,上电以后,手臂摆动到左上角
?oat c = 0; // 肘部舵机初始角 ?oat b = 0; // 肩部舵机初始角// 系统初始化 void setup(){
size (800, 600); // 设定窗口尺寸
smooth(); // 平滑绘制 stroke(0,0,255,20);& // 设定画线为蓝色透明
arduino = new Arduino(this, Arduino. list()[0]); // 查找可用的 Arduino 硬件
arduino.pinMode(servo1pin,& Arduino.
SERVO); // 依次设定 3 个端口模式 arduino.pinMode(servo2pin,& Arduino.
arduino.pinMode(servo3pin,& Arduino.
void draw(){
translate(width/2, 0); // 坐标向右平移 半个窗口宽度
?oat penX = mouseX-width/2; // 计算笔 尖 x 坐标
?oat penY = mouseY; // 笔尖 y 坐标就是 鼠标的 y 坐标
// 起落笔控制
if (mousePressed) {
arduino.servoWrite(servo1pin,& 85);
// 落笔,调节这个角度,使肘关节至笔尖的 距离为 115mm
arduino.servoWrite(servo1pin,& 70);
// 调节这个角度使笔尖离开纸面
// 转到极坐标系进行计算 ellipse(0, 0, 5, 5); // 绘制极点
ellipse(penX, penY, 5, 5); // 绘制笔尖 line(0, 0, penX, penY); // 绘制极径
?oat BD = dist(0, 0, penX, penY); //
测量 D 点极径
?oat d = asin(penY/BD); // 计算极角 d
if (penX & 0) { d = PI - }
// 物理限位,最长不能超过 115+115,最短不 能小于 115
if (BD & 230) { BD = 230; }
if (BD & 115) { BD = 115; }
?oat a = acos(BD/2/115); // 计
?oat bc = a + // 计算 BC 的
// 绘制上臂
rotate(bc); // 旋转极坐标
line(0, 0, 115, 0); // 画线
translate(115, 0); // 坐标移动,
极点从 B 移动到 C
?oat cd = - 2 * // CD 以 C 为极点顺时针旋转,弧度为 cd = TWO_PI - 2 * a = -2 * a
arduino.servoWrite(servo3pin,
180 - round(degrees(bc)));
// 把弧度转换为角度,写入肩部舵机 delay(30); // 留出舵机动作时间,
修改数值可调节系统动态特性
// 绘制小臂
rotate(cd); // 旋转极坐标 line(0, 0, 115, 0); // 画线 arduino.servoWrite(servo2pin,
- round(degrees(bcd))); // 角度写入肘部 舵机
delay(30); // 留出舵机动作时间,
修改数值可调节系统动态特性
& & &3 个舵机的初始位置为肩 0 °、肘 0°、笔 90°。运行程序后,手臂会摆到左侧,笔尖为抬起状态,如图 6 所示;
图 6 绘图机初始化
& & 屏幕上会出现一个 800 像素 ×600 像素的窗口, 缓慢移动鼠标,可以看到机器人的仿真图形, 如图 7 所示。
图 7 机器人的仿真图形,黑色的为鼠标单击 操作,浅蓝色的线条为手臂姿态
& & 绘图机随着鼠标移动而开始工作,单击鼠标左键控制笔尖落下,就可以开始绘图了,如图 8 所示。
图 8 单击鼠标左键放下笔尖,开始绘图
& & & 用 Processing 建立的数学模型可以精确到1个像素,与之相对应的绘图机硬件可以达到±1mm 的定位精度,但这只是从单纯的数学角度得出的结论。机器人的实际运行情况会受到两个因素的制约:一个是鼠标, 另一个是舵机。
& & & 这个系统的核心思路是用 Processing 采集鼠标指针坐标进行运算。鼠标移动的物 理点对应着屏幕上的逻辑点(不一定是单个 像素)。鼠标的操作应该尽量放缓,防止动 作过于突兀,出现丢点现象。但是即使鼠标的分辨率足够高,这种手工定位的方法也会产生一定误差,不能体现出这个设计的真正实力。最根本的解决办法是把手动换成数控, 用软件生成
坐标,控制绘图机运转,比如下面这段程序。
//& 绘图机数控程序,绘制一条阿基米德螺旋线。
import processing.serial.*; import cc.arduino.*; A
int servo1pin = 9;
int servo2pin = 10;
int servo3pin = 11; ?oat angle = 0.0; ?oat offset = 60; ?oat scalar = 2; ?oat speed = 0.005; void setup() {
size(800,600);
arduino = new Arduino(this, Arduino. list()[0]);
arduino.pinMode(servo1pin,& Arduino.
arduino.pinMode(servo2pin,& Arduino.
arduino.pinMode(servo3pin,& Arduino.
arduino.servoWrite(servo1pin, 70); //
delay(300);
void draw() { translate(width/2, 0);
float x = offset + cos(angle) *
?oat y = 100 + offset + sin(angle) *
// 把初始 y 坐标设定在一个适中的位置 ellipse( x, y, 2, 2);
angle += scalar += ?oat penX = ?oat penY =
?oat BD = dist(0, 0, penX, penY); //
测量 D 点极径
?oat d = asin(penY/BD);
if (penX & 0) { d = PI - } if (BD & 230) { BD = 230; }
if (BD & 115) { BD = 115; }
?oat a = acos(BD/2.0/115); ?oat b = PI - a -
arduino.servoWrite(servo2pin, round(degrees(2 * a))); // 肘关节角度
arduino.servoWrite(servo3pin, 180 -
round(degrees(a + d))); // 肩关节角度 arduino.servoWrite(servo1pin, 85); //
println("b = " + round(degrees(PI - a
- d))); // 肩部舵机角度回显,方便调试
println("c = " + round(degrees(2 * a))); // 肘部舵机角度回显,方便调试
& & &&绘图机的测试视频见 。我做了3 次测试, 你可以看到每修改一次,性能都得到了一定程度的提升。测试 1 中的舵机没有加延迟, 手臂没作减振处理,抖动严重。测试2 是手臂和程序做了优化以后的效果,抖动减轻了很多,但是鼠标手动绘图的精度还是不够。测试 3 是数控绘制,已经可以感受到浓厚的极客味道了。
& & & 现在除了原生的 Processing,许多功能强大的计算机图形分析和仿真软件都加入了对 Arduino 的支持, 比如 MATLAB, 感兴趣的读者可以一试。为了让程序更通用,可以把手臂的算法打包成一个函数,调用时只需输入 x、y 坐标和笔尖状态即可。
& & &&这里为了简化程序,舵机采用的是角度控制,Processing 发送给舵机的指令只能精确到度。绘图机每段手臂的长度为115mm,由此可以计算出在手臂完全伸展的极限情况下,笔尖的定位精度为 (115+115)×2×3.14÷360 ≈ 4mm,这个误差还是比较大的。另外的问题是舵机从一个角度转动到另一个角度需要一定时间,而程序运行的速度比舵机快出很多, 如果舵机还没有到达预定角度就又接收到了新的指令,会因为系统来不及响应而造成手臂晃动。从图 9 所示的阿基米德螺旋线绘制效果就可以看出来,线条的平滑度不够。
& & & 一个优化系统动态特性的思路是把舵机固有的转速降低。一些高级数字舵机自带编程功能,用户可以修改舵机内部的多个参数,包括速度。普通舵机的调速就比较麻烦了,可以考虑给每个舵机建立一个数组,用插值算法让舵机平滑过渡到下一个位置。其实这个绘图机的算法严格来说应该包括两部分,一部分是手臂的仿真,另一部分是舵机的精细控制。网上有很多与舵机相关的资料,为了节省篇幅,文中就不展开讨论了。
& & & 为了提高绘图机的精度,还可以试试用脉宽调制技术控制舵机。标准舵机的控制脉冲一般为 0.5~2.5ms,内部控制电路定义的位置级数一般为1024。由此可以计算出舵机在 0°~180°范围下的角位移可以达到 180° /°,脉宽分辨率为 (24=2μs。和前面的角度控制比起来,精度可以用恐怖一词来形容。就是说你可以调用Arduino 舵机库的writeMicroseconds() 函数向舵机发送精度为2μs 的脉冲,舵机应该能够识别并产生动作。当然,这只是理想状态下的结论, 实际上受机械部分的限制,以直流电机和齿轮减速箱为核心的普通舵机很难做到这么高的精度。要知道 2 相 4 线步进电机的 1/8 细分也只能精确到 0.225°。
& & &&这个项目最大的意义是用比较简单的软硬件实现了 Arduino 和 Processing 的互动式应用,说明了算法在其中起到的重要作用, 并且帮助读者加深了对舵机的了解。如果你对计算机图形学和机器人艺术感兴趣,又不知道该从哪里下手,它应该可以作为一个不错的入门选择。
文章来自:无线电杂志-臧海波
相关文章:
------------------------------------------------------------------------------------------------------------------
奥松机器人官网:
微信号:搜索公众号“奥松机器人”
QQ群: (讨论,解惑)
微博:@奥松机器人基地(新+热)
----------------------------------------------------------------------------------------------------------------
温馨提示:予人玫瑰,手留余香;如果你喜欢这篇文章,不妨转发推荐给你身边的朋友!
总计 0 个记录,共 1 页。
扫二维码关注奥松微信,每天都有新鲜机器人资讯。
哈尔滨公司地址:黑龙江哈尔滨香坊区衡山路18号远东大厦C区2层
Tel: ,1-801
深圳公司地址:深圳市龙岗区天安数码城2栋B-402A
Hi,大家好,我是小奥!
欢迎来到奥松机器人的世界!
需要咨询服务请点小奥哦!
国际销售:
技术支持:
国内销售:
销售客服一:
销售客服二:
咨询电话:【暴力快递调查】Arduino + 加速度传感器,24小时实时跟踪分析快递大叔_Nuclear'Atk 网络安全研究中心
【暴力快递调查】Arduino + 加速度传感器,24小时实时跟踪分析快递大叔
用Arduino来看看快递的暴力程度!
【暴力快递评测报告】想知道哪家快递大叔更暴力?Arduino科学“跟踪”调查告诉你!
作者:果壳实验室,发表于: 19:45:27
前些日子,玉溪同学为了试着打开快递大叔的内心世界(啧啧。。。详情请点击“”)而DIY了暴力快递测试设备,取得众多网友的热烈反响,遂在经过千万场内心戏之后,开始了下一次更完备的暴力测试计划。(截至发帖,玉溪同学已经远在美帝,这次把他都供出来了,希望美帝能确保他人身安全!( ′ ▽ ` )? ……至少小编我很安全,嗯!)
由于果壳实验室的小伙伴DFRobot对快递大叔内心世界也颇感兴趣(误,这句划掉),由于果壳实验室的小伙伴DFRobot对这项拯救人类世界的计划颇为感兴趣,决定与果壳试验一起进行项目,于是,我们这项搞机计划便轰轰烈烈开始啦!
本次测试区域仍选择在北京市内,快递路线大致为朝阳区到海淀区。因此我们的设备功能需求是:能够测量包裹撞击时加速度的强度,并将数值连同撞击时间记录在SD卡内。考虑到北京市内快递一般能实现次日达,因此我们将设备续航时间设定在24小时。
综合了功能和设备小型化的需求,我们最终选择的设备构成包括:DFRduino nano+BMA220加速度传感器+MiscroSD 模块+DS1307时间模块,同时采用一块3.7V 2000MA的锂电池+直流升压模块(输出5V)给设备供电。
DFRduino nano
BMA220加速度传感器
MiscroSD 模块
DS1307时间模块
3.7V 2000MA的锂电池与直流升压模块
选好器材之后,果壳实验室与@DFRobot 就开始愉快地撸起来了……ˊ_&ˋ
首先把这些器材用杜邦线连接起来。铛铛铛~瞬间就接好了……
喔喔,好像节奏快了一点点……再贴张连接图吧!
接着,给RTC设置时间。将DS1307RTC的例程SetTime烧写入Arduino中,打开串口监视器,看到Arduino返回的时间数据为当前时间,时间设置完成!
然后开始写代码,点击一下upload,哇,好了!(怎么可能一次就好!写代码……改代码……写代码……改代码……写代码……改代码……写代码……upload,再改……这个过程我们就略过吧!)
终于,设备调试完了(ˊ_&ˋ这回真的好了) 。
装上电池后用信封包起来,装进盒子里。
然后就愉快地让内心世界丰富的快递大叔来把快递取走了!
磕磕碰碰,中间遇到其他事情,好几天才完成了包裹寄出和回收任务,然后就开始处理数据了……(别说了,这是最痛苦难受地好不好),然后,就出结果啦……
来看看快递大叔的心情……
其实快递的磕磕碰碰,汽车在快加速,或者急刹车的过程,产生的加速度也记录在设备上了。因此我们试着做一个比较好的比较,让同事带着设备走回家。 从公司到家,来回大约十三公里的路途,主要靠走路和地铁。我们获得的数据如下:
这个实验样本产生了11个数据点,对照时间,基本上是地铁加速减速产生的加速度,加速度大小主要在5~6m/s^2。
在我们试验的几个快递样本上,超过15m/s^2的加速度出现次数不少,也有几次超过20m/s^2,甚至达到27m/s^2。快递大叔的心情……啧啧……
实验至此,快递大叔的心情大家也看了,想说的道理其实大家也都懂,易碎的该包严实,贵重的要买保险……喔不,公司的同事说了,如果万一快递大叔明天心情不好了,你们几个就去给同事收发快递吧……别说了,让我先去厕所哭会……
等等……要代码?再此之前记得先安装一下RTC的库喔!
#include &Wire.h&
#include &math.h&
#include &SD.h&
#include &DS1307RTC.h&
#include &Time.h&
#include &Wire.h&
byte Version[3];
byte range=0x03;
float divi=16;
float x,y,z;
void setup()
Serial.begin(9600);
Wire.begin();
Wire.beginTransmission(0x0A); // address of the accelerometer
// range settings
Wire.write(0x22); //register address
Wire.write(range); //can be set at"0x00""0x01""0x02""0x03", refer to Datashhet on wiki
// low pass filter
Wire.write(0x20); //register address
Wire.write(0x05); //can be set at"0x05""0x04"......"0x01""0x00", refer to Datashhet on wiki
Wire.endTransmission();
Serial.println("Initialization SD card...");
pinMode(10,OUTPUT);
if (!SD.begin(4)) {
Serial.println("initialization failed!");
Serial.println("initialization done.");
void AccelerometerInit()// get accelerated
Wire.beginTransmission(0x0A); // address of the accelerometer
// reset the accelerometer
Wire.write(0x04); // Y data
Wire.endTransmission();
Wire.requestFrom(0x0A,1);
// request 6 bytes from slave device #2
while(Wire.available())
// slave may send less than requested
Version[0] = Wire.read(); // receive a byte as characte
x_data=(int8_t)Version[0]&&2;
Wire.beginTransmission(0x0A); // address of the accelerometer
// reset the accelerometer
Wire.write(0x06); // Y data
Wire.endTransmission();
Wire.requestFrom(0x0A,1);
// request 6 bytes from slave device #2
while(Wire.available())
// slave may send less than requested
Version[1] = Wire.read(); // receive a byte as characte
y_data=(int8_t)Version[1]&&2;
Wire.beginTransmission(0x0A); // address of the accelerometer
// reset the accelerometer
Wire.write(0x08); // Y data
Wire.endTransmission();
Wire.requestFrom(0x0A,1);
// request 6 bytes from slave device #2
while(Wire.available())
// slave may send less than requested
Version[2] = Wire.read(); // receive a byte as characte
z_data=(int8_t)Version[2]&&2;
x=(float)x_data/
y=(float)y_data/
z=(float)z_data/
Serial.print("X=");
Serial.print(x);
// print the character
Serial.print("
Serial.print("Y=");
Serial.print(y);
// print the character
Serial.print("
Serial.print("Z=");
// print the character
Serial.print(z);
void loop()
{ double accelerated_
switch(range)
//change the data dealing method based on the range u've set
case 0x00:divi=16;
case 0x01:divi=8;
case 0x02:divi=4;
case 0x03:divi=2;
default: Serial.println("range setting is Wrong,range:from 0to 3.Please check!");while(1);
AccelerometerInit();
accelerated_speed=sqrt(x*x+y*y+z*z);
Serial.print("accelerated_speed=");
Serial.println(accelerated_speed);
if(accelerated_speed&=1)
//get time
tmElements_
RTC.read(tm);
//write data
myFile = SD.open("test.txt", FILE_WRITE);
if (myFile) {
Serial.print("Writing to test.txt...");
//recoder time and data
myFile.print("accelerated_speed=");
myFile.print(accelerated_speed);
myFile.print("
myFile.print("time=");
myFile.print(tm.Hour);//
myFile.print(':');
myFile.print(tm.Minute);//
myFile.print(':');
myFile.print(tm.Second);//
myFile.print(':');
myFile.print(", Date (D/M/Y) = ");
myFile.print(tm.Day);
myFile.write('/');
myFile.print(tm.Month);
myFile.write('/');
myFile.print(tmYear);
// close the file:
myFile.close();
Serial.println("done.");
// if the file didn't open, print an error:
Serial.println("error opening test.txt");
delay(100);
void print2digits(int number) {
if (number &= 0 && number & 10) {
Serial.write('0');
Serial.print(number);
乌云吐槽:
啊L川 (我想起那天下午夕阳下的奔跑,那是我逝去的青春...) |
Anymous (专注于廉价迷你方便快捷的解决方案) |
我喜欢啊,但是这个不算hack吧,算geek?
疯狗 (阅尽天下漏洞,心中自然无码。) |
@Anymous 嗯,geek,但是Arduino应该也很容易做出点hack的玩具
下次可以去测下飞机托运的行李~
疯狗 (阅尽天下漏洞,心中自然无码。) |
@sdc1992 嗯,而且现在传感器对现实生活的信息感知能力非常强了,可以收集很多东西:P
light (生于理想,死于欲望) |
zzzzy (我已然别无所求) |
挺有意思de
一只猿 (我是猴子派来的彩笔) |
Arduino 菜鸟玩家路过
一只猿 (我是猴子派来的彩笔) |
对了DFRobot官方商城好像有问题,检查下吧
无敌L.t.H (?……天百一爱恋考高:簿相色白产国) |
为何没有EMS的结果?是不是EMS的被偷了?
Knight (查水表。缴wb不杀) |
这个两三年以前就有人做过了。
孤零落叶寒 (我会打酱油,我的大号去哪了?) |
现在只会搞家用浇花,鱼缸换水喂食等小东西,
黑暗游侠 |
@疯狗 @xsser 我想到的是当今快递行业对通信信号类设备还没有完善的检查措施,如果植入恶意的程序,被带到了快递总部车间,有没有完善的检测措施,能发生什么,还是可以想象的。
疯狗 (阅尽天下漏洞,心中自然无码。) |
@黑暗游侠 嗯,特殊的设备进入一个我们无法进入的区域,有点像电影
4399gdww (人为刀俎我为鱼肉) |
数据里还含有刹车吧
这个属于极客玩的吧!黑客玩不起没设备,话说把这个设备用在危险化学品运输跟踪上加个显示屏感觉意义会更大,有效检测危化品在运输途中的撞击避免事故发生。
kow (我只是个酱油。。。) |
这个之前用51就做过,现在应该有现成的产品了吧。。
(统治全球,奴役全人类!毁灭任何胆敢阻拦的有机生物!) |
哈哈哈,以前做过智能机器人。
这想法太吊了!
相关内容:
本文“”,来自:,本文地址:,转载请注明作者及出处!

我要回帖

更多关于 arduino循迹小车程序 的文章

 

随机推荐