CAT | Arduino
首先科普一下,当一块通有电流的金属或半导体薄片垂直地放在磁场中时,薄片的两端就会产生电位差,这种现象就称为霍尔效应。霍尔开关则是利用霍尔效应的一种传感器,它可以很方便的把磁信号转换成电信号,具有很高的可靠性和灵敏度。
在Arduino上使用霍尔开关比较简单,电路连接上只需要用专用的传感器连接线,将霍尔开关与传感器扩展板上的相应端口连接起来就可以了:
编程的话使用最简单的数字输入函数digitalRead()进行读取就可以了:
int ledPin = 13; int switchPin = 19; int value = 0; void setup() { pinMode(switchPin, INPUT); pinMode(ledPin, OUTPUT); Serial.begin(9600); } void loop() { value = digitalRead(switchPin); if (HIGH == value) { digitalWrite(ledPin, HIGH); } else { digitalWrite(ledPin, LOW); } }
使用的时候当霍尔开关靠近磁铁的时候,从Arduino相应引脚读出来的值为高,而当霍尔开关远离磁铁的时候,从Arduino相应引脚读出来的值为低。另外这里介绍的霍尔开关模块属于单极性霍尔元件,所以只对磁铁的南极或者北极有响应,实验的时候如果发现不响应的话可以试着换磁铁的另一极使用噢;-)
7段数码管可以用来很方便地显示0-9的数字以及,因此在一些电子制作中经常被使用到。7段数码管顾名思义其实就是由7个LED组成,它们一般按照共阴或者共阳的方式连接在一起,既然原理上这么简单,那么用Arduino来驱动7段数码管的方式自然就不言而喻了:分别将7个LED的引脚连接到Arduino的7个引脚上,然后通过给相应引脚置高或者置低的方式来控制7段数码管上显示出不同的数字来。可是仔细想想你会发现,通常Arduino上只有12个可以使用的数字引脚,如果驱动一个7段数码管就需要占用7个引脚,那驱动两个更者更多7段数码管的话,Arduino的引脚数目马上就告急了!这个时候你就可以考虑我们这里介绍的这个4路7段数码管的电子积木模块了:-)
这个4位7段数码管的模块采用专用的驱动芯片来控制数码管的各个引脚,并且使用I2C总线与Arduino进行连接,也就是说我们只需要用两根数据线就可以用Arduino来控制这一数码管模块了:
连接的方法很简单,只需要用专用的I2C连接线,将这一4位7段数码管与Arduino专用扩展板上的I2C端口连接起来就可以了:
同时注意将模块背面的RS开关设置到ON的位置,使能I2C引脚上的上拉电阻:
测试的时候可以使用如下的代码,该代码可以在数码管上循环显示0-9和a-f,同时还可以控制数码管上的小数点:
#include "Wire.h" // enable I2C bus //byte saa1064 = 0x70 >> 1; // define the I2C bus address for our SAA1064 (pin 1 to GND) byte saa1064 = 0x76 >> 1; // define the I2C bus address for our SAA1064 (pin 1 to VCC) int digits[16]={63, 6, 91, 79, 102, 109, 125,7, 127, 111, 119, 124, 57, 94, 121, 113}; // these are the byte representations of pins required to display each digit 0~9 then A~F void setup() { Wire.begin(); // start up I2C bus delay(500); initDisplay(); } void initDisplay() // turns on dynamic mode and adjusts segment current to 12mA { Wire.beginTransmission(saa1064); Wire.send(B00000000); // this is the instruction byte. Zero means the next byte is the control byte Wire.send(B01000111); // control byte (dynamic mode on, digits 1+3 on, digits 2+4 on, 12mA segment current Wire.endTransmission(); } void displayDigits() // show all digits 0~9, A~F on all digits of display { for (int z=0; z<16; z++) { Wire.beginTransmission(saa1064); Wire.send(1); // instruction byte - first digit to control is 1 (right hand side) Wire.send(digits[z]); // digit 1 (RHS) Wire.send(digits[z]); // digit 2 Wire.send(digits[z]); // digit 3 Wire.send(digits[z]); // digit 4 (LHS) Wire.endTransmission(); delay(500); } // now repeat but with decimal point for (int z=0; z<16; z++) { Wire.beginTransmission(saa1064); Wire.send(1); // instruction byte - first digit to control is 1 (right hand side) Wire.send(digits[z]+128); // digit 1 (RHS) Wire.send(digits[z]+128); // digit 2 Wire.send(digits[z]+128); // digit 3 Wire.send(digits[z]+128); // digit 4 (LHS) Wire.endTransmission(); delay(500); } } void clearDisplay() // clears all digits { Wire.beginTransmission(saa1064); Wire.send(1); // instruction byte - first digit to control is 1 (right hand side) Wire.send(0); // digit 1 (RHS) Wire.send(0); // digit 2 Wire.send(0); // digit 3 Wire.send(0); // digit 4 (LHS) Wire.endTransmission(); } void loop() { displayDigits(); clearDisplay(); delay(1000); }
运行结果如下图所示:
由于该模块使用的是I2C接口,因此实际上也允许同时接入多个数码管模块,但必须对模块的地址进行设置。在数码管模块的背面有一个ADDR跳线,正是进行这一地址位设置的:
设置的办法是用铬铁将中间的引脚分别与VCC或者GND端连接起来,如果中间引脚与VCC连接时,相应的地址为0×76:
如果中间引脚与GND连接时,相应的地址为0×70:
这一模块在出厂时中间的引脚即不与VCC连接,也不与GND连接,此时的地址也是0×76。
电子积木模块4路MOSFET开关 V02版在原来版本的基础上电路做了相应的调整,但主要的变化还是在元件的布局和连接上,首先将MOSFET管的布局改成卧式的了,虽然这样会占据一定的空间,但相对于以前立式的版本更加美观一些,受到影响的程度也更小一些。
此外的与外界电路的连接上提供了更多的连接端子,这样就避免了以前必须将几条线一同连接到一个端子的现象。按照目前的设计,外接电源还是连接在POWER 所标记的+和-两个引脚上,而外接用电设备(如LED灯带)则可以直接连接在CH1、CH2、CH3、CH4这4个通道的+/-两个引脚上,使用起来更加 方便一些,但缺点是整个电路板的体积比起以前的版本来稍大一些。
最后是背面图,电路走线的宽度增加,为更大电流通过时通过了相应的可能性
有关MOSFET模块的具体使用办法可以参考之前blog上的文章Arduino 电子积木 4路MOSFET开关
No tags
ENC28J60是除W5100之外另一个经常用到的网络芯片,最早出现在Arduino上的网络扩展板就是借助于ENC28J60来完成的,虽然后来Arduino官方提供的网络扩展板是基于W5100实现的,但ENC28J60仍以其稳定可靠的特性被广泛使用着。这里要介绍的这款电子积木正是基于ENC28J60实现的网络模块:
该款网络模块也是基于SPI接口的,因此在电路连接上只需要通过我们的IDC扩展板用相应的6芯连接线将其与Arduino连接起来就可以了:
程序的话我们需要下载相应的库文件EncEthernet.zip,将其解压缩到Arduino安装目录下的libraries目录中并重命名为EncEthernet:
重新启动Arduino之后,就可以在File->Examples->EncEtherent菜单中找到WebServer这一示例程序:
通常你只需要根据自己的网络配置情况修改IP地址就可以了:
static uint8_t myip[4] = {192,168,0,15};
将程序下载到Arduino中之后,你就可以通过浏览器来访问你的Arduino了:
目前将Arduino连接到局域网中已经有不少解决方案,比如之前介绍的Ethernet扩展板或者WiFi模块,这里要介绍的电子积木W5100网络模块提供了另外一种选择。W5100是一款集TCP/IP协议、MAC和PHY于一体的网络芯片,支持直接总线接口、间接总线接口和 SPI总线,并且Arduino IDE内置的Ethernet库就是直接针对W5100设置的:
这款W5100网格模块电子积木采用的是SPI接口,因此我们可以使用IDC扩展板与Arduino主板进行连接:
另外正常使用时模块上的PROG开关不能置到ON的位置上:
测试的话我们可以使用Arduino自带的Ethernet库中的WebServer例子,从Arduino IDE的File->Examples->Ethernet菜单中选择WebServer,打开相应的代码:
根据你的局域网设置的不同,一般只需要修改IP地址就可以了:
byte ip[] = { 192,168,0, 177 };
相应的程序下载到Arduino并运行起来之后,Arduino实际上就成为了一个Web Server,因此我们可以通过浏览器来进行访问。Ethernet库所提供的WebServer程序实际上是接收来自于浏览器的请求,读出所有模拟输入端口的值,并返回给浏览器。如果感兴趣的话可以试着在模拟输入端口上接上相应的传感器,来观察返回值的不同:
