需要加载MFRC522h函数库
补充:
利用SPI可以在软件的控制下构成各种系统。如一个主控制器和几个从控制器、几个从控制器相互连接构成多主机系统(分布式系统)、一个主控制器和一个或几个从 I/O设备 所构成的各种系统等。在大多数应用场合,可以使用一个主控制器作为主控机来控制数据,并向一个或几个从外围器件传送该数据。从器件只有在主控机发命令时才能接收或发送数据,其数据的传输格式是高位(MSB)在前,低位(LSB)在后。单主系统只有一台主控制器,其他均为从控制器。我毕业设计做的是基于物联网控制的机器人,如果你是计算机专业的,二选一的话,我推荐用raspberry PI B+,如果计算机基础不是很好,可以用Arduino,这个实现方便,开发周期短,本身带了很多类库。
嗯,直接告诉你,树莓派可以直接控制舵机和动力模块,但是仍然需要加一个电机驱动芯片,可以选择经典的 L298或者L9110。这里不需要arduino,当然可以连上。我做的是远程视频监控,用的是树莓派。
有一整套的论文,但是不能给你哈,因为已经提交,如果泄露,可能面临学位证被收回的风险。不过如果你想交流一下还是可以的。 SD卡体积小,价格便宜,因此在许多工业数据记录和家用电子产品中有越来越多的应用。Arduino可以通过SPI接口与之通信,进行诸如建立文件、删除文件、向文件中添加内容、修改文件等 *** 作,这样采用Arduino配合SD卡可以开发数据记录设备。
Arduino与SD卡的简单连接,只需要6只电阻和1张SD卡,通过软件模拟的方式实现SPI接口,Arduino与SD卡连接电路如图2所示。
2gif
图2 Arduino与SD卡连接电路
由于SD卡的 *** 作电压为33 V,而Arduino的逻辑电压为5 V,因此需要用起分压作用的电阻(本文采用了Josh Adams书中的验证性电路),在实际的应用中最好采用分压模块以保证卡和Arduino板的安全。之后在网址>小小云提示:教程作者 caterpillar是来自台湾的programmer(kinda),所以在一些专有名词的使用上会和我们这边使用的不太一样啦,不过作者也有标注出英文名称,大家自行转换哟(⁎⁍̴̛ᴗ⁍̴̛⁎)
步进电机这东西的学问真不少,就结论而言,控制步进电机最好的方式,就是找到与手边步进电机可以配合的程式库来使用。Arduino IDE 不是有 Stepper 程式库可以使用吗?嗯!它是可以用一些步进电机上,不过,不见得能完全发挥步进电机应有的控制能力,控制某些电机则会有些问题,正巧,我手上这颗 28BYJ-48 5V DC 就是!… XD
在 Arduino 官方网站的 Arduino – Stepper 文件中,谈到了步进电机的两个基本分类:单极步进电机(Unipolar Stepper)与双极步进电机(Bipolar Stepper)。那么就从这两个分类开始认识!
单极步进电机是提供单一方向的电流来驱动电机,例如:
在上图中,可以看到线圈各有一个共同接点,通常接电源,只要改变其他接点的电压讯号,就可以产生电流,而电流都是固定的方向,而由于有四个线圈,这样的电机被称为四相(Phase)电机。
双极步进电机的电流则是双向的,例如:
这类电机在驱动时,需要改变电流的方向来达到不同激磁的效果,而由于有两个线圈,这样的电机被称为二相电机。
电机的相数除了二向、四相之外,还有单相、三相、五相等,这是为了达到不同程度的控制,电机的控制是运用电流通过线圈会产生磁场,并与另一永久磁铁产生作用,来达到转动的效果,以四相步进电机为例:
如果做为定子的线圈激磁后,面对转子一面是 S 极,就会吸引转子的 N 极,只要依顺序对各相线圈激磁,就会产生转动效果,像上面这种一次激磁一个线圈的方式,称为一相激磁,因为每次只激磁一个线圈,电力消耗小,不过缺点是振动大、转距小。
常见的激磁方式是二相激磁,顾名思义,一次激磁两相,由于有两相用以吸引住转子,因此振动小、转距大:
也有一相、二相轮流激磁,称为一/二相激磁,顺序其实就是上面两张图的结合:
可以看出这种激磁方式,每次转动的角度为一相或二相激磁的一半,可以得到更精确的控制。
步进电机需要比较高的电压或电流驱动,在 Arduino 官方网站的 Arduino – Stepper 文件中,有 Unipolar Steppers 及 Bipolar Steppers 两个页面,介绍了如何连接出能驱动步进电机的电路,分别有可以接成两个控制脚位与四个控制脚位的方式。
其中会用到的 IC 是达灵顿阵列(Darlington Array),如先前〈mBlock & Arduino(15)认识晶体管与继电器〉谈到的,若想运用晶体管提供更大的电流来驱动电机,可以使用两个或多个晶体管的组合,达灵顿阵列中有多组达灵顿电路,以 ULN2003APG 来说,里头有七组达灵顿电路。
如果不想那么麻烦地自己接电路,那么可以依使用的步进电机来搭配现成的步进电机驱动模组:
这个步进电机驱动模组,左上四个脚位可以接到 Arduino 的数位输出脚位,下方有 +、- 两个脚位,分别接 Vcc 与 GND,右上白色插槽用来连接我手边这颗五线四相的 28BYJ-48 5V DC,上图步进电机驱动模组中的 ULN2003APG,可搭配 28BYJ-48 5V DC 这个步进电机:
28BYJ-48 5V DC 这个步进电机,其中红线是接 5V 电源,各线的连接是:
如果搭配 ULN2003,要对 28BYJ-48 5V DC 步进电机做激磁,那么 ULN2003 的输入脚位 4、3、2、1,提供电位以进行激磁的顺序为 …
一相激磁:1000-0100-0010-0001
二相激磁:1100-0110-0011-1001
一/二相激磁:1000-1100-0100-0110-0010-0011-0001-1001
如果想要体验一下步进电机转动,那么可以简单地如下实作,脚位 D8 到 D11 分别对应至澄、黄、粉、蓝,例如一相激磁:
执行程式之后,你可以见到步进电机缓慢的转动,将顺序改为 S4 到 S1,就会看到电机缓慢的逆转,这边没有设任何的工作时间延迟,这是因为 mBlock 执行速度的关系,直接使用 Arduino 积木方块,只能是这个速度了。
类似地,以下是二相激磁:
以下是一/二相激磁:
如果想更进一步试试步进电机控制,可以使用 Arduino IDE 中的 Stepper 范例,它们使用到 Arduino 的 Stepper 程式库,不过,如果你手边是 28BYJ-48 5V DC 步进电机,就要注意一下了,以 stepper_oneRevolution 范例为例:
直接执行的话,你的电机只会有一个方向的转动,无法逆转,这是因为 28BYJ-48 5V DC 的接线顺序,与 Stepper 程式库预期的不同,如果你的 28BYJ-48 5V DC 的接线顺序由澄、黄、粉、蓝分别是接至 D8 到 D11,那么有两个方式可以解决,一个方式是在 Arduino 上将 D9 与 D10 接线对调,另一个方式是在建立Stepper时,9与10对调:
再来是stepsPerRevolution必须设定为你的电机实际上一圈会有多少步,如果是 28BYJ-48 5V DC 的话,查询到的规格上写着,步进角为5625 / 64,因此这电机转一圈需要的步数是360 / (5625 / 64),也就是4096步,不过,这是一/二相激磁才会有的步数,如果你查看 Stepper 程式库原始码,会发现,它是采二相激磁的实作方式,因此,使用这个 Stepper 程式库,你实际上要设的stepsPerRevolution必须是2048步。
不过,如果你改了脚位也将stepsPerRevolution设为2048,步进电机还是不会动,这是因为 Stepper 程式库中setSpeed函式的关系:
这是以毫秒为单位来设置step_delay,如果你设为2048步,那number_of_steps就是2048,那么step_delay就会是29296875 / whatSpeed,如果whatSpeed设为60,那结果就会是048828125,然而step_delay是unsigned long,也就是实际上结果只会储存0,那么step函式中millis() - this->last_step_time >= this->step_delay该行,就会一直是成立的,也就是完全没给工作时间,这么一来电机就不会动了。
因此,如果你直接使用 Stepper 程式库,设为 2048 步之后,那么速度就不能设太高,例如以下就可以正常正反转了:
如果你会使用 Arduino 官方语言的话,改写 Stepper 应该不是难事,可以试着实作一/二相激磁,并令其能支援 28BYJ-48 5V DC 的4096步与高转速,懒的话,网路上是也有人已经实作或改写好的版本,不过,想要精确控制的话,重点还是在于,认识你的步进电机与程式库!
感谢CodeData用户: caterpillar 的贡献 著作权归作者所有
整理:宁波家电物联网云平台,中科极动云1,你这个代码不会是20秒才能跑完的,一定是有其他部分在起作用。要查到真相,你要把全部代码发上才能分析清楚的。
2,u8g2库很费资源,这么大的图,如果是arduino uno的板子,静态显示也费劲,别说是移动了…
3,想达到移动显示效果,用显示屏自带的更底层的库去写,不要用u8g2,哪怕是用u8g也比它强。是的,Arduino可以运行智能控制算法。Arduino是一款开源的单片机,它可以运行简单的控制算法,如PID控制、滤波器等。它还可以运行更复杂的智能控制算法,如机器学习、神经网络等。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)