tag 标签: Arduino动手做

相关博文
  • 热度 4
    2022-2-23 10:49
    808 次阅读|
    0 个评论
    【雕爷学编程】Arduino动手做(100)---MAX30102手腕心率
    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来---小小的进步或是搞不掂的问题,希望能够抛砖引玉。 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验一百: MAX30102血氧仪手腕心率脉搏检测心跳传感器模块 MAX30102 是一种综合性脉搏血氧测定法,心率监测模块。它包括内部LED,光电探测器、光学元件和低噪声电子设备具有环境光抑制功能。max30102提供了完整的系统解决方案,简化流程设计适用于移动和可穿戴设备。MAX30102在单个1.8V电源上工作为内部LED提供单独的5.0V电源。通信通过标准I2c兼容接口。模块可以通过软件关闭零备用电流,允许电源轨始终保持通电。 应用 ●可穿戴设备 ●健身辅助设备 MAX30102的优点和特点 ●心率监测器和脉搏血氧计传感器输入LED反射溶液 ●微型5.6毫米x 3.3毫米x 1.55毫米14针光学模块 •集成的盖玻片提供最佳、坚固的 ●移动设备超低功率运行 •可编程采样率和LED电流节电 •低功率心率监测器(<1兆瓦) •超低停机电流(0.7μA,典型值) ●快速数据输出能力 •采样率高 ●强大的运动伪影复原能力 •高信噪比 -40°C至+85°C工作温度范围 MAX30102手腕心率模块 有两个发光二极管,一个光检测器,优化光学和低噪声的仿真信号处理,以检测脉搏血氧饱和度和心脏速率信号。 1、只需要将手指头紧贴在传感器上,就能估计 脉搏血氧饱和度(SpO2)及脉搏(相当于心跳)。 2、携带氧气的红血球能吸收较多红外光(850-1000nm),未携带氧气的红血球则是吸收较多的红光(600-750nm)。 3、因此pulse oximeter就是一个迷你的分光计,利用不同红血球之吸收光谱的原理,来分析血氧饱和度。 4、这种实时而快速的测量方式,也广泛被运用在许多临床的参考。 MAX30102手腕心率模块电原理图 经过多方寻找,从一个研究MAX30102算法的程序中找到了一个经过亲自验证有效的实际血氧标定计算公式: SpO2=-45.060*R*R+ 30.354 *R + 94.845 其中的R可以通过红光和红外光光强的对数值计算得到,这个标定表达式实际上是对血氧饱和度的二次曲线拟合,是经过测量得到的。最后终于可以输出血氧饱和度数据了。 MAX30102手腕心率模块主要应用 辅助健身设备 智能电话 平板电脑 可穿戴设备 MAX30102的发光部分包括两个LED,一个是红光LED(660nm),另一个是红外光LED(880nm),这个是测量血氧饱和度SPO2最常见的配置。接收部分是一个对可见光和红外光都敏感的光电二极管,其接收的光强度信号转换为电流信号,经过环境光消除电路后,最后被自带的18位ADC进行采样转化,至此模拟部分完成。AD转化后的数字经过数字滤波后储存在数据寄存器中,最后可通过I2C总线被外接MCU读取。在硬件上,LED的电源和其他部分的电源不是同一个,因为LED为了保证足够的出射光强,需要瞬间大电流(最大50ma),这就要求LED的正向电压足够大(要求3.1V以上)。而其余的AD转换和I2C总线部分,为了实现低功耗要求电压足够小(要求1.8V),所以传感器需要两路独立的电源。此外,由于LED电源会产生瞬间大电流,所以电源引脚附近要加一个大电容减轻对电源电压的影响。 传统的脉搏测量方法主要有三种:一是从心电信号中提取;二是从测量血压时压力传感器测到的波动来计算脉率;三是光电容积法。前两种方法提取信号都会限制病人的活动,如果长时间使用会增加病人生理和心理上的不舒适感。而光电容积法脉搏测量作为监护测量中最普遍的方法之一,其具有方法简单、佩戴方便、可靠性高等特点。 光电容积法的基本原理是利用人体组织在血管搏动时造成透光率不同来进行脉搏和血氧饱和度测量的。其使用的传感器由光源和光电变换器两部分组成,通过绑带或夹子固定在病人的手指、手腕或耳垂上。光源一般采用对动脉血中氧合血红蛋白(HbO2)和去氧血红蛋白(Hb)有选择性的特定波长的发光二极管(一般选用660nm附近的红光和900nm附近的红外光)。当光束透过人体外周血管,由于动脉搏动充血容积变化导致这束光的透光率发生改变,此时由光电变换器接收经人体组织反射的光线,转变为电信号并将其放大和输出。由于脉搏是随心脏的搏动而周期性变化的信号,动脉血管容积也呈现周期性变化,因此光电变换器的电信号变化周期就是脉搏率。 MAX30102手腕心率模块实验接线示意图 实验开源代码 /* 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验一百: MAX30102血氧仪手腕心率脉搏检测心跳传感器模块 1、安装库:IDE-工具-管理库-搜索“MAX30105”-安装 2、项目:串口读取测量数据 3、连线(I2C): VIN → 3.3V GND → GND SDA 接 A4 SCL 接 A5 */ #include #include "MAX30105.h" #include "heartRate.h" MAX30105 particleSensor; const byte RATE_SIZE = 4; //Increase this for more averaging. 4 is good. byte rates ; //Array of heart rates byte rateSpot = 0; long lastBeat = 0; //Time at which the last beat occurred float beatsPerMinute; int beatAvg; void setup(){ Serial.begin(115200); Serial.println("Initializing..."); // Initialize sensor if (!particleSensor.begin(Wire, I2C_SPEED_FAST)) //Use default I2C port, 400kHz speed { Serial.println("MAX30105 was not found. Please check wiring/power. "); while (1); } Serial.println("Place your index finger on the sensor with steady pressure."); particleSensor.setup(); //Configure sensor with default settings particleSensor.setPulseAmplitudeRed(0x0A); //Turn Red LED to low to indicate sensor is running particleSensor.setPulseAmplitudeGreen(0); //Turn off Green LED } void loop(){ long irValue = particleSensor.getIR(); if (checkForBeat(irValue) == true) { //We sensed a beat! long delta = millis() - lastBeat; lastBeat = millis(); beatsPerMinute = 60 / (delta / 1000.0); if (beatsPerMinute 20) { rates = (byte)beatsPerMinute; //Store this reading in the array rateSpot %= RATE_SIZE; //Wrap variable //Take average of readings beatAvg = 0; for (byte x = 0 ; x < RATE_SIZE ; x++) beatAvg += rates ; beatAvg /= RATE_SIZE; } } Serial.print("IR="); Serial.print(irValue); Serial.print(", BPM="); Serial.print(beatsPerMinute); Serial.print(", Avg BPM="); Serial.print(beatAvg); Serial.println(); delay(1000); } Initializing... Place your index finger on the sensor with steady pressure. 正在初始化… 将食指稳定地放在传感器上。 (初始化后的串口数据-未放上手指) 实验串口返回情况 模块电原理图之二
  • 热度 6
    2022-2-19 13:51
    621 次阅读|
    3 个评论
    【雕爷学编程】Arduino动手做(99)---8X32 LED点阵模块
    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来---小小的进步或是搞不掂的问题,希望能够抛砖引玉。 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验九十九: 8X32 LED点阵显示模块 MAX7219 输出 共阴 5V 四位点阵模组 MAX7219 是美国MAXIM 公司推出的多位LED 显示驱动器,采用3 线串行接口传送数据,可直接与单片机接口连接,用户能方便修改其内部参数,以实现多位LED 显示。它内含硬件动态扫描电路、BCD译码器、段驱动器和位驱动器。此外,其内部还含有8X8 位静态RAM,用于存放8 个数字的显示数据。显然,它可直接驱动64 段LED点阵显示器。当多片MAX7219 级联时,可控制更多的LED 点阵显示器。显示的数据通过单片机数据处理后,送给MAX7219 显示。 MAX7219/MAX7221是一种集成化的串行输入/输出共阴极显示驱动器,它连接微处理器与8位数字的7段数字LED显示,也可以连接条线图显示器或者64个独立的LED。其上包括一个片上的B型BCD编码器、多路扫描回路,段字驱动器,而且还有一个8*8的静态RAM用来存储每一个数据。只有一个外部寄存器用来设置各个LED的段电流。MAX7221与SPI™、QSPI™以及 MICROWIRE™相兼容,同时它有限制回转电流的段驱动来减少EMI(电磁干扰)。一个方便的四线串行接口可以联接所有通用的微处理器。每个数据可以寻址在更新时不需要改写所有的显示。MAX7219/MAX7221同样允许用户对每一个数据选择编码或者不编码。整个设备包含一个150μA的低功耗关闭模式,模拟和数字亮度控制,一个扫描限制寄存器允许用户显示1-8位数据,还有一个让所有LED发光的检测模式。 MAX7219管脚描述 1 DIN 串行数据输入端口。在时钟上升沿时数据被载入内部的16位寄存器。 2,3,5-8,10,11 DIG 0–DIG7 八个数据驱动线路置显示器共阴极为低电平。关闭时7219此管脚输出高电平,7221呈现高阻抗。 4,9 GND 地线 (4脚和9脚必须同时接地) 12 LOAD (MAX7219) 载入数据。连续数据的后16位在LOAD端的上升沿时被锁定。CS (MAX7221) 片选端。该端为低电平时串行数据被载入移位寄存器。连续数据的后16位在cs端的上升沿时被锁定。 13 CLK 时钟序列输入端。最大速率为 10MHz.在时钟的上升沿, 数据移入内部移位寄存器。 下降沿时, 数据从DOUT端输出。对MAX7221来说,只有当cs端为低电平时时钟输入才有效。 14-17,20-23 SEG 7 段和小数点驱动,为显示器提供电流。当一个段驱A–SEG G, 动关闭时,7219的此端呈低电平,7221呈现高阻抗。DP 18 SET 通过一个电阻连接到VDD 来提高段电流。 19 V+ 正极电压输入,+5V 24 DOUT 串行数据输出端口,从DIN输入的数据在16.5个时钟周期后在此端有效。当使用多个MAX7219/MAX7221时用此端方便扩展。 MAX7219功能特点 1 10MHz连续串行口 2 独立的LED段控制 3 数字的译码与非译码选择 4 150μA的低功耗关闭模式 5 亮度的数字和模拟控制 6 高电压中断显示 7 共阴极LED显示驱动 8 限制回转电流的段驱动来减少EMI(MAX7221) 9 SPI, QSPI, MICROWIRE串行接口(MAX7221) 10 24脚的 DIP和 SO 封装 8X32 LED点阵显示模块 MAX7219 输出 共阴 5V 四位点阵模组 8X32 LED点阵显示级联模块,MAX7219是一种集成化的串行输入/输出共阴极显示驱动器,它连接微处理器与8位数字的7段数字LED显示,也可以连接条线图显示器或者64个独立的LED。其上包括一个片上的B型BCD编码器、多路扫描回路,段字驱动器,而且还有一个8*8的静态RAM用来存储每一个数据。只有一个外部寄存器用来设置各个LED的段电流。一个方便的四线串行接口可以联接所有通用的微处理器。每个数据可以寻址在更新时不需要改写所有的显示。MAX7219同样允许用户对每一个数据选择编码或者不编码。整个设备包含一个150μA的低功耗关闭模式,模拟和数字亮度控制,一个扫描限制寄存器允许用户显示1-8位数据,还有一个让所有LED发光的检测模式。只需要3个IO口即可驱动1个点阵!点阵显示时无闪烁!支持级联! 8X32 LED点阵显示模块参考电原理图 模块参数: 1.单个模块可以驱动一个8*8共阴点阵 2.模块工作电压:5V 3.模块尺寸:长12.8厘米X宽3.2厘米X高1.3厘米 4.带64个固定螺丝孔,孔径3mm 5.模块带输入输出接口,支持多个模块级联 接线说明: 1.模块左边为输入端口,右边为输出端口。 2.控制单个模块时,只需要将输入端口接到CPU 3.多个模块级联时,第1个模块的输入端接CPU,输出端接第2个模块的输入端,第2个模块的输出端接第3个模块的输入端,以此类推... 实验开源代码 /* 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验九十九:8X32 LED点阵显示模块 MAX7219 输出 共阴 5V 四位点阵模组 1、下载安装库: GitHub | riyas-org/max7219 https://github.com/riyas-org/max7219 2、项目:应用多种函数,显示字母,笑脸等图案以及左向移动 3、连线: VCC → 5V GND → GND DIN → D11 CS → D12 CLK → D13 */ #include int DIN = 11; // DIN pin of MAX7219 module int CLK = 13; // CLK pin of MAX7219 module int CS = 12; // CS pin of MAX7219 module int maxInUse = 1; MaxMatrix m(DIN, CS, CLK, maxInUse); char A = {4, 8, B01111111, B01001001, B01001001, B00110110, }; char smile01 = {8, 8, B00111100, B01000010, B10010101, B10010001, B10010001, B10010101, B01000010, B00111100 }; char smile03 实验开源代码之二 /* 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验九十九:8X32 LED点阵显示模块 MAX7219 输出 共阴 5V 四位点阵模组 1、下载安装库: GitHub | riyas-org/max7219 https://github.com/riyas-org/max7219 2、项目:程序中将所要显示的图型使用数组方式存放,主回圈中交错显示在 8x8 点阵 模块上产生一个有趣的点阵动画 3、连线: VCC → 5V GND → GND DIN 接 D11 (MOSI) CS 接 D10 (SS) CLK 接 D13 (SCK) */ #include const byte sprite = { { 0xf8, 0xbc, 0x15, 0x7e, 0x7e, 0x15, 0xbc, 0xf8 }, { 0xfc, 0x8e, 0x1b, 0x2e, 0x2e, 0x1b, 0x8e, 0xfc } }; const byte DECODEMODE = 0x09; const byte INTENSITY = 0x0a; const byte SCANLIMIT = 0x0b; const byte SHUTDOWN = 0x0c; const byte DISPLAYTEST = 0x0f; void max7219(const byte reg, const byte data) { digitalWrite(SS, LOW); SPI.transfer(reg); SPI.transfer(data); digitalWrite(SS, HIGH); } void setup() { SPI.begin(); max7219(SCANLIMIT, 7); max7219(DECODEMODE, 0); max7219(INTENSITY, 2); max7219(DISPLAYTEST, 0); max7219(SHUTDOWN, 1); for(byte i=0; i<8; i++) { max7219(i+1, 0); } } void loop() { for(byte j=0; j<2; j++) { for(byte i=0; i<8; i++) { max7219(i+1, sprite ); } delay(500); } } 实验开源代码之三 /* 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验九十九:8X32 LED点阵显示模块 MAX7219 输出 共阴 5V 四位点阵模组 1、下载库 https://www.pjrc.com/teensy/arduino_libraries/Matrix_Sprite.zip 2、项目:在四个8x8屏间跳动的红点(快速扫描所有点阵) 3、连线: VCC → 5V GND → GND DIN 接 D11 (MOSI) CS 接 D10 (SS) CLK 接 D13 (SCK) */ #include // Sprite before Matrix #include const int numChips = 4; //DIN, CLK, SS, #chips Matrix myLeds = Matrix(11, 13, 10, numChips); void setup() { myLeds.clear(); } void loop() { byte x, y; // light one LED at a time, scanning left to right // and top to bottom... useful for testing the matrix for (y=0; y<8; y++) { for (x=0; x<(numChips * 8); x++) { myLeds.write(x, y, HIGH); delay(20); myLeds.write(x, y, LOW); } } } 实验开源代码之四 /* 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验九十九:8X32 LED点阵显示模块 MAX7219 输出 共阴 5V 四位点阵模组 1、下载库 https://www.pjrc.com/teensy/arduino_libraries/Matrix_Sprite.zip 2、项目:显示字母 3、连线: VCC → 5V GND → GND DIN 接 D11 (MOSI) CS 接 D10 (SS) CLK 接 D13 (SCK) */ #include // Sprite before Matrix #include //DIN, CLK, CS, #chips Matrix myLeds = Matrix(11, 13, 10, 3); Sprite letter_L = Sprite(5, 8, B11000, B11000, B11000, B11000, B11000, B11000, B11111, B11111 ); Sprite letter_E = Sprite(5, 8, B11111, B11111, B11000, B11110, B11110, B11000, B11111, B11111 ); Sprite letter_D = Sprite(6, 8, B111100, B111110, B110111, B110011, B110011, B110111, B111110, B111100 ); Sprite letter_S = Sprite(5, 8, B01110, B11111, B11000, B11110, B01111, B00011, B11111, B01110 ); void setup() { myLeds.clear(); myLeds.setBrightness(0); myLeds.write(3, 0, letter_L); myLeds.write(10, 0, letter_E); myLeds.write(18, 0, letter_D); myLeds.write(26, 0, letter_S); } void loop() { } 实验场景图 Matrix库的几个函数 基本用法,仅限像素 Matrix myLeds = Matrix(DIN,CLK,LOAD,numChips); 使用您选择的名称创建Matrix对象的实例。DIN,CLK和LOAD是连接这些信号的引脚号。如果连接了多个单独连接的MAX7219芯片,则可以创建多个对象。 myLeds。clear(); 清除整个显示屏。 myLeds。setBrightness(15); 设置显示亮度,从0到15(最亮)。 myLeds。write(x,y,value); 更改单个像素。对于关闭,值应为LOW,对于on,值应为HIGH。 基本用法,使用Sprite Sprite myIcon = Sprite(宽度,高度,B11000,B11000,B11111,B11111); 创建一个精灵对象。您可以根据需要创建任意数量的精灵,每个精灵都有一个唯一的名称。宽度应与每个数据值中的位数匹配,高度应与数据值的数量匹配。 myLeds。write(x,y,myIcon); 在显示屏上绘制一个闪烁的精灵。 Sprite库允许创建与Matrix库一起使用的图像精灵 Sprite 启动LCD库。 width() 返回精灵的宽度(以像素为单位)。 height() 返回精灵的高度(以像素为单位)。 write() 将数据写入精灵的x,y位置。 read() 返回存储在sprite的x,y位置的数据。 实验开源仿真编程(Linkboy V4.63) 实验开源图形编程(Mind+、Mixly、编玩边学) 【花雕动手做】有趣好玩的音乐可视化系列小项目(08)---四位32段点阵屏 项目之三:红绿色32段级联频谱点阵屏灯(FFT算法) 实验开源代码 /* 【花雕动手做】有趣好玩的音乐可视化系列小项目(08)---四位32段点阵屏 项目之三:红绿色32段级联频谱点阵屏灯(FFT算法) 接脚连线:MAX9814 接A0 MAX7219 UNO VCC →→→→→ 5V GND →→→→→ GND DIN →→→→→ D11(数据,数据接收引脚) CS →→→→→ D10(负载,命令接收引脚) CLK →→→→→ D13(时钟,时钟引脚) */ #include #include #include MD_MAX72XX disp = MD_MAX72XX(MD_MAX72XX::FC16_HW, 10, 1); arduinoFFT FFT = arduinoFFT(); double realComponent ; double imagComponent ; int spectralHeight = analogRead(A7) / sensitivity; imagComponent = 0; } FFT.Windowing(realComponent, 64, FFT_WIN_TYP_HAMMING, FFT_FORWARD); FFT.Compute(realComponent, imagComponent, 64, FFT_FORWARD); FFT.ComplexToMagnitude(realComponent, imagComponent, 64); for (int i = 0; i < 32; i++) { realComponent = constrain(realComponent , 0, 80); realComponent = map(realComponent , 0, 80, 0, 8); index = realComponent ; value = spectralHeight ; c = 31 - i; disp.setColumn(c, value); } } 实验场景动态图 https://img.mydigit.cn/forum/202111/22/142941orny1mpjp1ktcdtr.gif 实验视频剪辑 https://v.youku.com/v_show/id_XNTgyMTc1NTk2OA==.html?spm=a2hcb.playlsit.page.1
  • 热度 3
    2022-2-17 08:06
    586 次阅读|
    0 个评论
    【雕爷学编程】Arduino动手做(98)---RC522 RFID射频模块
    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来---小小的进步或是搞不掂的问题,希望能够抛砖引玉。 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)实验九十八: MFRC-522 RC522 RFID射频 IC卡感应模块读卡器S50复旦卡钥匙扣模组 MF RC522 是应用于13.56MHz 非接触式通信中高集成度读写卡系列芯片中的一员。是NXP 公司针对“三表”应用推出的一款低 电压、低成本、体积小的非接触式读写卡芯片,是智能仪表和便携式手持设备研发的较好选择。 MF RC522特点和优势 高度集成的模拟电路来解调和解码的响应 缓冲的输出驱动器,用于连接一个天线的最小数量 外部元件 支持ISO / IEC 14443 A / MIFARE 典型操作距离在读/写模式下可达至50mm视 天线的尺寸和调整 支持MF1xxS20 , MF1xxS70和MF1xxS50在读/写模式加密 支持ISO / IEC 14443高达848 kBd的更高传输速度的通信 支持MFIN / MFOUT 额外的内部电源IC智能卡,通过MFIN / MFOUT连接 支持的主机接口 MFRC522是一个高度集成的读取器/写入器IC,适用于非接触式通信 在13.56MHz 。该MFRC522读卡器支持ISO / IEC 14443 A / MIFARE模式。 该MFRC522的内部发射器能够驱动一个读/写器天线设计 符合ISO / IEC 14443 A / MIFARE卡和转发器,无需额外通信 有源电路。接收器模块提供了一个强大而英法fi cient实现 从ISO / IEC解调和解码信号14443 A / MIFARE兼容卡 转发器。数字模块管理的完整的ISO / IEC 14443 A和取景 错误检测(奇偶和CRC )功能。 该MFRC522支持MF1xxS20 , MF1xxS70和MF1xxS50产品。该MFRC522 支持非接触式通信,并使用MIFARE更高的传输速度高达 848 kBd的两个方向。 提供了下面的主机接口: •串行外设接口(SPI ) •串行UART (类似与RS232电平依赖于引脚电压源) •I2C- BUS接口 MF522-AN模块采用Philips MFRC522原装芯片设计读卡电路,使用方便,成本低廉,适用于设备开发、读卡器开发等高级应用的用户、需要进行射频卡终端设计/生产的用户。本模块可直接装入各种读卡器模具。模块采用电压为3.3V,通过SPI接口简单的几条线就可以直接与用户任何CPU主板相连接通信,可以保证模块稳定可靠的工作、读卡距离远; 【电气参数简介】 工作电流:13—26mA/直流3.3V 空闲电流:10-13mA/直流3.3V 休眠电流:<80uA 峰值电流:<30mA 工作频率:13.56MHz 支持的卡类型:mifare1 S50、mifare1 S70、mifare UltraLight、mifare Pro、mifare Desfire 产品物理特性:尺寸:40mm×60mm 环境工作温度:摄氏-20—80度 环境储存温度:摄氏-40—85度 环境相对湿度:相对湿度5%—95% 【模块接口SPI参数】 数据传输速率:最大10Mbit/s MFRC-522 RC522 RFID射频 IC卡感应模块读卡器S50复旦卡钥匙扣模组 模块参考电原理图 射频卡 非接触式IC卡又称射频卡,由IC芯片、感应天线组成,封装在一个标准的PVC卡片内,芯片及天线无任何外露部分。是世界上最近几年发展起来的一项新技术,它成功的将射频识别技术和IC卡技术结合起来,结束了无源(卡中无电源)和免接触这一难题,是电子器件领域的一大突破。卡片在一定距离范围(通常为5—10cm)靠近读写器表面,通过无线电波的传递来完成数据的读写操作。 工作原理 射频读写器向IC卡发一组固定频率的电磁波,卡片内有一个LC串联谐振电路,其频率与读写器发射的频率相同,这样在电磁波激励下,LC谐振电路产生共振,从而使电容内有了电荷;在这个电荷的另一端,接有一个单向导通的电子泵,将电容内的电荷送到另一个电容内存储,当所积累的电荷达到2V时,此电容可作为电源为其它电路提供工作电压,将卡内数据发射出去或接受读写器的数据。 发射原理 非接触性IC卡与读卡器之间通过无线电波来完成读写操作。二者之间的通讯频率为13.56MHZ。非接触性IC卡本身是无源卡,当读写器对卡进行读写操作时,读写器发出的信号由两部分叠加组成:一部分是电源信号,该信号由卡接收后,与本身的L/C产生一个瞬间能量来供给芯片工作。另一部分则是指令和数据信号,指挥芯片完成数据的读取、修改、储存等,并返回信号给读写器,完成一次读写操作。读写器则一般由单片机,专用智能模块和天线组成,并配有与PC的通讯接口,打印口,I/O口等,以便应用于不同的领域。 Miafre 1 s50 感应式IC卡 ◇ 芯 片:  Philips Mifare 1 S50 ◇ 存储容量:  8Kbit ,16个分区,每分区两组密码 ◇ 工作频率:  13.56MHZ ◇ 通讯速度:  106Kboud ◇ 读写距离:  2.5—10CM ◇ 读写时间:  1-2MS ◇ 工作温度:  -20℃-85℃ ◇ 擦写次数:  >100000次 ◇ 数据保存:  >10年 ◇ 规  格:  0.87×85.5×54/ 非标卡 ◇ 封装材料:  PVC、PET、0.13铜钱 ◇ 封装工艺:  超声波自动植线/自动碰焊 ◇ 制作标准:  ISO 14443, ISO 10536 ◇ 应用范围:  企业/校园一卡通、公交储值卡、高速公路收费、停车场、小区管理等 实验原理 RFID系统组成 RFID 技术利用无线射频方式在阅读器和射频卡之间进行非接触双向数据传输,以达到目标识别和数据交换的目的。最基本的 RFID 系统由三部分组成: 1. 标签(Tag,即射频卡):由耦合元件及芯片组成,标签含有内置天线,用于和射频天线间进行通信。 2. 阅读器:读取(在读写卡中还可以写入)标签信息的设备。 3. 天线:在标签和读取器间传递射频信号。 工作原理 MCU通过对读卡器芯片内寄存器的读写来控制读卡器芯片,读卡器芯片收到MCU发来的命令后,按照非接触式射频卡协议格式,通过天线及其匹配电路向附近发出一组固定频率的调制信号(13.56 MHz)进行寻卡,若此范围内有卡片存在,卡片内部的LC谐振电路(谐振频率与读卡器发送的电磁波频率相同)在电磁波的激励下,产生共振,在卡片内部电压泵的作用下不断为其另一端的电容充电,获得能量,当该电容电压达到2 V时,即可作为电源为卡片的其他电路提供工作电压。 当有卡片处在读卡器的有效工作范围内时,MCU向卡片发出寻卡命令,卡片将回复卡片类型,建立卡片与读卡器的第一步联系,若同时有多张卡片在天线的工作范围内,读卡器通过启动防冲撞机制,根据卡片序列号来选定一张卡片,被选中的卡片再与读卡器进行密码校验,确保读卡器对卡片有操作权限以及卡片的合法性,而未被选中的则仍然处在闲置状态,等待下一次寻卡命令。密码验证通过之后,就可以对卡片进行读写等应用操作。 RC522模块 模块的射频读写芯片应该是飞利浦的 MF RC522,在上一篇文章我应该已经附上了英文和中文的手册。MF RC522提供了3种接口模式:高达10 Mb/s的SPI、I2C总线模式(快速模式下能达400 kb/s,而高速模式下能达3.4 Mb/s)、最高达1228.8 kb/s的UART模式。买来的模块采用了第一种模式——四线制SPI,通信中的时钟信号由 Arduino 产生,MF RC522芯片设置为从机模式,接收来自 Arduino 的数据以设置寄存器,并负责射频接口通信中相关数据的收发。数据的传输路径为:Arduino 通过 MOSI 线将数据发到 MF RC522,MF RC522 通过 MISO 线发回至 Arduino。 RC522模块各引脚功能 SDA -- 串行数据线(IIC接口时的I/O线);在SPI接口中为NSS(从机标志管脚); SCK -- 连接MCU的SCK信号; MOSI -- MCU输出,RC522接收(即主设备输出,从设备输入); MISO -- RC522输出,MCU接收(即从设备输出,主设备输入); IRQ -- 中断请求输出; GND -- 接地; RST -- 复位; 3.3V -- VSS,工作电压,若使用的事5V的MCU,注意分压。 实验开源代码 /* 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验九十八:MFRC-522 RC522 RFID射频 IC卡感应模块读卡器S50复旦卡钥匙扣模组 1、工具-管理库-搜索“MFRC522”库-安装 2、项目:使用MFRC522 RFID和Arduino读写标签 3、RFID与Arduino Uno的连线 SDA------------------------Digital 10 SCK------------------------Digital 13 MOSI----------------------Digital 11 MISO----------------------Digital 12 IRQ------------------------不用连接 GND-----------------------GND RST------------------------Digital 9 3.3V------------------------3.3V (千万不要连接到5V接口!!!) */ #include #include #define SS_PIN 10 #define RST_PIN 9 MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance. void setup() { Serial.begin(9600); // Initialize serial communications with the PC SPI.begin(); // Init SPI bus mfrc522.PCD_Init(); // Init MFRC522 card Serial.println("Scan PICC to see UID and type..."); } void loop() { // Look for new cards if ( ! mfrc522.PICC_IsNewCardPresent()) { return; } // Select one of the cards if ( ! mfrc522.PICC_ReadCardSerial()) { return; } // Dump debug info about the card. PICC_HaltA() is automatically called. mfrc522.PICC_DumpToSerial(&(mfrc522.uid)); } 实验串口返回情况 实验场景图 实验开源代码之二 /* 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验九十八:MFRC-522 RC522 RFID射频 IC卡感应模块读卡器S50复旦卡钥匙扣模组 1、工具-管理库-搜索“MFRC522”库-安装 2、项目二:读取UID,并将其分别以十进制和十六进制输出到串口 3、RFID与Arduino Uno的连线 SDA------------------------Digital 10 SCK------------------------Digital 13 MOSI----------------------Digital 11 MISO----------------------Digital 12 IRQ------------------------不用连接 GND-----------------------GND RST------------------------Digital 9 3.3V------------------------3.3V (千万不要连接到5V接口!!!) */ #include #include #define SS_PIN 10 #define RST_PIN 9 MFRC522 rfid(SS_PIN, RST_PIN); //实例化类 // 初始化数组用于存储读取到的NUID byte nuidPICC ; void setup() { Serial.begin(9600); SPI.begin(); // 初始化SPI总线 rfid.PCD_Init(); // 初始化 MFRC522 } void loop() { // 找卡 if ( ! rfid.PICC_IsNewCardPresent()) return; // 验证NUID是否可读 if ( ! rfid.PICC_ReadCardSerial()) return; MFRC522::ICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak); // 检查是否MIFARE卡类型 if (piccType != MFRC522::ICC_TYPE_MIFARE_MINI && piccType != MFRC522::ICC_TYPE_MIFARE_1K && piccType != MFRC522::ICC_TYPE_MIFARE_4K) { Serial.println("不支持读取此卡类型"); return; } // 将NUID保存到nuidPICC数组 for (byte i = 0; i < 4; i++) { nuidPICC = rfid.uid.uidByte; } Serial.print("十六进制UID:"); printHex(rfid.uid.uidByte, rfid.uid.size); Serial.println(); Serial.print("十进制UID:"); printDec(rfid.uid.uidByte, rfid.uid.size); Serial.println(); // 使放置在读卡区的IC卡进入休眠状态,不再重复读卡 rfid.PICC_HaltA(); // 停止读卡模块编码 rfid.PCD_StopCrypto1(); } void printHex(byte *buffer, byte bufferSize) { for (byte i = 0; i < bufferSize; i++) { Serial.print(buffer < 0x10 ? " 0" : ""); Serial.print(buffer, HEX); } } void printDec(byte *buffer, byte bufferSize) { for (byte i = 0; i < bufferSize; i++) { Serial.print(buffer < 0x10 ? " 0" : ""); Serial.print(buffer, DEC); } } 实验串口返回情况 实验开源代码之三 /* 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验九十八:MFRC-522 RC522 RFID射频 IC卡感应模块读卡器S50复旦卡钥匙扣模组 1、安装库:IDE-工具-管理库-搜索“MFRC522”库-安装 2、项目三:RC522 模块的读写操作 3、RFID与Arduino Uno的连线 SDA------------------------Digital 10 SCK------------------------Digital 13 MOSI----------------------Digital 11 MISO----------------------Digital 12 IRQ------------------------不用连接 GND-----------------------GND RST------------------------Digital 9 3.3V------------------------3.3V (千万不要连接到5V接口!!!) */ #include #include #define RST_PIN 9 // 配置针脚 #define SS_PIN 10 MFRC522 mfrc522(SS_PIN, RST_PIN); // 创建新的RFID实例 MFRC522::MIFARE_Key key; void setup() { Serial.begin(9600); // 设置串口波特率为9600 while (!Serial); // 如果串口没有打开,则死循环下去不进行下面的操作 SPI.begin(); // SPI开始 mfrc522.PCD_Init(); // Init MFRC522 card for (byte i = 0; i < 6; i++) { key.keyByte = 0xFF; } Serial.println(F("扫描卡开始进行读或者写")); Serial.print(F("使用A和B作为键")); dump_byte_array(key.keyByte, MFRC522::MF_KEY_SIZE); Serial.println(); Serial.println(F("注意,会把数据写入到卡在#1")); } void loop() { // 寻找新卡 if ( ! mfrc522.PICC_IsNewCardPresent()) return; // 选择一张卡 if ( ! mfrc522.PICC_ReadCardSerial()) return; // 显示卡片的详细信息 Serial.print(F("卡片 UID:")); dump_byte_array(mfrc522.uid.uidByte, mfrc522.uid.size); Serial.println(); Serial.print(F("卡片类型: ")); MFRC522:ICC_Type piccType = mfrc522.PICC_GetType(mfrc522.uid.sak); Serial.println(mfrc522.PICC_GetTypeName(piccType)); // 检查兼容性 if ( piccType != MFRC522:ICC_TYPE_MIFARE_MINI && piccType != MFRC522:ICC_TYPE_MIFARE_1K && piccType != MFRC522:ICC_TYPE_MIFARE_4K) { Serial.println(F("仅仅适合Mifare Classic卡的读写")); return; } // 我们只使用第二个扇区 // 覆盖扇区4 byte sector = 1; byte blockAddr = 4; byte dataBlock ; byte size = sizeof(buffer); // 原来的数据 Serial.println(F("显示原本的数据...")); status = (MFRC522::StatusCode) mfrc522.PCD_Authenticate(MFRC522:ICC_CMD_MF_AUTH_KEY_A, trailerBlock, &key, &(mfrc522.uid)); if (status != MFRC522::STATUS_OK) { Serial.print(F("身份验证失败?或者是卡链接失败")); Serial.println(mfrc522.GetStatusCodeName(status)); return; } // 显示整个扇区 Serial.println(F("显示所有扇区的数据")); mfrc522.PICC_DumpMifareClassicSectorToSerial(&(mfrc522.uid), &key, sector); Serial.println(); // 从块儿读取数据 Serial.print(F("读取块儿的数据在:")); Serial.print(blockAddr); Serial.println(F("块 ...")); status = (MFRC522::StatusCode) mfrc522.MIFARE_Read(blockAddr, buffer, &size); if (status != MFRC522::STATUS_OK) { Serial.print(F("读卡失败,没有连接上 ")); Serial.println(mfrc522.GetStatusCodeName(status)); } Serial.print(F("数据内容在第 ")); Serial.print(blockAddr); Serial.println(F(" 块:")); dump_byte_array(buffer, 16); Serial.println(); Serial.println(); //开始进行写入准备 Serial.println(F("开始进行写入的准备...")); status = (MFRC522::StatusCode) mfrc522.PCD_Authenticate(MFRC522:ICC_CMD_MF_AUTH_KEY_B, trailerBlock, &key, &(mfrc522.uid)); if (status != MFRC522::STATUS_OK) { Serial.print(F("写入失败,没有连接上或者没有权限 ")); Serial.println(mfrc522.GetStatusCodeName(status)); return; } // Write data to the block Serial.print(F("在第: ")); Serial.print(blockAddr); Serial.println(F(" 块中写入数据...")); dump_byte_array(dataBlock, 16); Serial.println(); status = (MFRC522::StatusCode) mfrc522.MIFARE_Write(blockAddr, dataBlock, 16); if (status != MFRC522::STATUS_OK) { Serial.print(F("写入失败... ")); Serial.println(mfrc522.GetStatusCodeName(status)); } Serial.println(); // 再次读取卡中数据,这次是写入之后的数据 Serial.print(F("读取写入后第")); Serial.print(blockAddr); Serial.println(F(" 块的数据 ...")); status = (MFRC522::StatusCode) mfrc522.MIFARE_Read(blockAddr, buffer, &size); if (status != MFRC522::STATUS_OK) { Serial.print(F("读取失败... ")); Serial.println(mfrc522.GetStatusCodeName(status)); } Serial.print(F("块 ")); Serial.print(blockAddr); Serial.println(F("数据为 :")); dump_byte_array(buffer, 16); Serial.println(); // 验证一下数据,要保证写入前后数据是相等的 // 通过计算块中的字节数量 Serial.println(F("等待验证结果...")); byte count = 0; for (byte i = 0; i < 16; i++) { // 比较一下缓存中的数据(我们读出来的数据) = (我们刚刚写的数据) if (buffer == dataBlock) count++; } Serial.print(F("匹配的字节数量 = ")); Serial.println(count); if (count == 16) { Serial.println(F("验证成功 :")); } else { Serial.println(F("失败,数据不匹配")); Serial.println(F("也许写入的内容不恰当")); } Serial.println(); // 转储扇区数据 Serial.println(F("写入后的数据内容为::")); mfrc522.PICC_DumpMifareClassicSectorToSerial(&(mfrc522.uid), &key, sector); Serial.println(); // 停止 PICC mfrc522.PICC_HaltA(); //停止加密PCD mfrc522.PCD_StopCrypto1(); } /** * 将字节数组转储为串行的十六进制值 */ void dump_byte_array(byte *buffer, byte bufferSize) { for (byte i = 0; i < bufferSize; i++) { Serial.print(buffer < 0x10 ? " 0" : " "); Serial.print(buffer, HEX); } } 实验串口返回情况 实验开源仿真编程(Linkboy V4.62) 实验仿真编程(Linkboy V4.62)之二 实验串口返回情况 实验开源仿真编程(Linkboy V4.62)其他 NFC Tools PRO 应该是目前为止最强大的NFC工具了吧(APP),可惜nfc这玩意儿不是所有手机都标配。NFC Tools PRO是一款可以读取和写入nfc标签的工具,同时还提供了一些额外功能。NFC工具专业版包含额外的功能,如配置文件管理等等。保存您的标记或任务配置文件后重新使用它们。NFC工具专业版允许您在记录或任务直接从现有的NFC标签导入。您可以非常快的编辑您的标签。您也可以直接运行的任务配置文件。 主要功能: - 读写NFC - NFC标签配置文件管理 - 从标签导入任务
  • 热度 2
    2022-2-10 07:31
    939 次阅读|
    0 个评论
    【雕爷学编程】Arduino动手做(97)---10段LED光柱模块
    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来---小小的进步或是搞不掂的问题,希望能够抛砖引玉。 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验九十七: 10段LED发光条MT102510AG数码显示光柱模块 10段光条数码管红色20个脚,外形尺寸:25.10x10.10x7.9mm,一面脚为正极一面为负极,超亮红色光条,10个笔段可以单独控制 模块特性 *能在低电压、小电流条件下驱动发光; *发光响应时间极短(<0.1μs),高频特性好,单色性好,亮度高; *体积小,重量轻,抗冲击性能好。固态封装,封装方式为灌胶型,稳定性高; *寿命长,使用寿命在5万小时以上; *可连续扫描驱动各灯段; *良好的显示效果、视角宽; *推荐恒流使用,恒压会出现亮度不均匀现象; *表面有保护膜的产品,可以在使用前撕下来; *使用温度:-30℃至65℃。 实验开源代码 /* 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验九十七:10段LED发光条MT102510AG数码显示光柱模块 1、项目一:10段红色数码光条,逐条点亮逐条熄灭 2、接脚(2、3、4、5、6、7、8、9、10、11) */ int BASE = 2 ; int NUM = 10; void setup(){ for (int i = BASE; i < BASE + NUM; i ++) { pinMode(i, OUTPUT); } } void loop(){ for (int i = BASE; i < BASE + NUM; i ++) { digitalWrite(i, LOW); delay(200); } for (int i = BASE; i < BASE + NUM; i ++) { digitalWrite(i, HIGH); delay(200); } } 实验场景图 实验开源代码之二 /* 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验九十七:10段LED发光条MT102510AG数码显示光柱模块 1、程序之二,流水灯效果:全灭的灯逐个往一边点亮,再逐 个往开始端灭掉,循环即可,当然也可以其它效果,可自己设定 2、接脚(2、3、4、5、6、7、8、9、10、11) */ int led1 = 2; int led2 = 3; int led3 = 4; int led4 = 5; int led5 = 6; int led6 = 7; int led7 = 8; int led8 = 9; int led9 = 10; int led10 = 11; int i; void setup() { for (i = 2; i < 12; i++) { pinMode(i, OUTPUT); } } void loop() { for (i = 1; i < 12; i++) { digitalWrite(i, HIGH); delay(50); 1; i--) { digitalWrite(i, LOW); delay(50); } } 实验开源代码之三 /* 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验九十七:10段LED发光条MT102510AG数码显示光柱模块 1、程序之三,控制多个LED实现多种闪烁效果 2、接脚(2、3、4、5、6、7、8、9、10、11) */ int led1 = 2; int led2 = 3; int led3 = 4; int led4 = 5; int led5 = 6; int led6 = 7; int led7 = 8; int led8 = 9; int led9 = 10; int led10 = 11; int n; void setup(){ for(n=2;n<=11;n++) { pinMode(n, OUTPUT); } } void loop(){ turn1(); clean(); turn2(); clean(); turn3(); clean(); } void turn1() { for(n=2;n<=11;n++) { digitalWrite(n,HIGH); delay(300); } for(n=2;n<=11;n++) { digitalWrite(n,LOW); delay(300); } } void turn2() { for(int x=0;x<=2;x++) { for(n=2;n<=11;n++) { digitalWrite(n,HIGH); } delay(300); for(n=2;n<=11;n++) { digitalWrite(n,LOW); } delay(300); } } void turn3() { for(int x=0;x<=2;x++) { digitalWrite(2,HIGH); digitalWrite(3,HIGH); for(n=4;n<=11;n++){ digitalWrite(n,LOW); } delay(300); digitalWrite(6,HIGH); digitalWrite(7,HIGH); digitalWrite(2,LOW); digitalWrite(3,LOW); digitalWrite(4,LOW); digitalWrite(5,LOW); digitalWrite(8,LOW); digitalWrite(9,LOW); digitalWrite(10,LOW); digitalWrite(11,LOW); delay(300); digitalWrite(10,HIGH); digitalWrite(11,HIGH); for(n=2;n<=9;n++){ digitalWrite(n,LOW); } delay(300); } } void clean() { for(n=2;n<=11;n++) { digitalWrite(n,LOW); } delay(300); } 实验的视频记录 https://v.youku.com/v_show/id_XNDMzNTk0ODE1Ng==.html?spm=a2hzp.8244740.0.0 实验开源图形编程(Mind+、Mixly、编玩边学)
  • 热度 6
    2022-2-3 09:29
    1134 次阅读|
    0 个评论
    【雕爷学编程】Arduino动手做(96)---BT05蓝牙4.0BLE模块
    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来---小小的进步或是搞不掂的问题,希望能够抛砖引玉。 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验九十六: BT-05蓝牙4.0BLE 模块 串口引出 CC2541兼容HM-10 蓝牙AT09模块 CC2541 是一款针对低能耗以及私有 2.4GHz 应用的功率优化的真正片载系统 (SoC) 解决方案。 它使得使用低总体物料清单成本建立强健网络节点成为可能。 CC2541 将领先 RF 收发器的出色性能和一个业界标准的增强型 8051 MCU、系统内可编程闪存存储器、8kB RAM 和很多其它功能强大的特性和外设组合在一起。 CC2541 非常适合应用于需要超低能耗的系统。 这由多种不同的运行模式指定。 运行模式间较短的转换时间进一步使低能耗变为可能 。 CC2540/41特性 (1)射频 –2.4GHz蓝牙符合低能耗规范和私有的RF片载系统 –支持250kbps,500kbps,1Mbps,2Mbps的制器内核数据速率–出色的链路预算,不使用外部前段而支持长距离应用–高达0dBm的可编程输出功率 –出色的接收器灵敏度(1Mbps时为-94dBm),可选择性,和阻挡性能 –适合于针对符合世界范围内的无线电频率调节系统:ETSIEN300328和EN3004402类(欧洲),FCCCFR4715部分(美国),和ARIBSTD-T66(日本) (2)布局 –极少的外部组件–提供参考设计支持 –6mm×6mm方形扁平无引脚(QFN)-40封装 –与CC2540引脚兼容(当不使用USB或者I2C时)(ADC) (3)低功率 –工作模式RX低至:17.9mA –工作模式TX(0dBm):18.2mA–功率模式1(4μs唤醒):270μs–功率模式2(睡眠定时器打开):1μs–功率模式3(外部中断):0.5μs (4)工作模式下TPS62730兼容低功率 –RX低至:14.7mA(3V电源)–TX(0dBm):14.3mA(3V电源) (5)微控制器 –具有代码预取功能的高性能和低功率8051微控制器内核 –系统内可编程闪存,128或者256KB –在所有功率模式下具有保持功能的8KBRAM –支持硬件调试 –扩展基带自动化,包括自动确认和地址解码 –所有功率模式中对所有相关寄存器的保持 (6)外设 –功能强大的5通道直接内存访问(DMA) –通用定时器(1个16位,2个8位) –红外(IR)生成电路 –具有捕捉功能的32kHz睡眠定时器 –精确数字接收到的数字信号强度指示器(RSSI)支持 –电池监视器和温度感应器 –含8通道和可配置分辨率的12位模数转换器(ADC) –高级加密标准(AES)安全协处理器 –2个功能强大的支持几个串行协议的通用异步接收发器(UART) –23个通用I/O引脚(21×4mA,2×20mA) –I2C接口 –2个具有LED驱动功能的I/O引脚 –安全装置定时器 –集成的高性能比较器(7)开发工具 –CC2541评估模块工具包(CC2541EMK) –CC2541小型开发工具包(CC2541DK-MINI) –SmartRF™软件 –提供IAR嵌入式Workbench™ CC2540/41软件特性 (1)符合针对单模式蓝牙低能耗(BLE)解决方案的符合蓝牙4.0协议的堆栈器 –完全功率优化堆栈,包括控制器和主机 –GAP-中心设备,外设,或者广播器(包括组合角色) –属性协议(ATT)/通用属性配置文件(GATT) –客户端和服务器 –L2CAP说明 (2)示例应用和配置文件 –针对GAP中心和外围作用的一般应用 –距离临近,加速计,简单关键字,和电池GATT服务 –BLE软件栈内支持更多应用 (3)多重配置选项 –单芯片配置,允许应用运行在CC2541上 –用于运行在一个外部微处理器接口 –BTool-用于评估、开发和测试的视窗(Windows)PC应用 应用范围 •2.4GHz蓝牙低能耗系统 •私有的2.4GHz系统 •人机接口器件(键盘,鼠标,遥控) •体育和休闲设备1个HWI2C接口。 •移动电话附件•消费类电子产品 CC2540/41经典应用电路 CC2540/41 射频部分: 支持BLE协议栈及私有2.4G RF片载系统; 传输速率:250kbps,500kbps,1Mbps,2Mbps; 输出功率:0dBm(支持可编程输出功率) 接收灵敏度:-94dBm@1Mbps; 适合针对符合世界范围内的无线电频率应用系统 出色的链路预算,支持超长距离应用; 低功耗: 工作模式RX低至17.9mA; 工作模式TX(0dBm):18.2mA; 功率模式1(4us唤醒):270uA; 功率模式2(睡眠定时器开):1uA; 功率模式3(外部中断):0.5uA; 宽电源电压范围(2V-3.6V); MCU: 具有代码预取功能的高性能和低功耗8051内核; 可编程Flash:CC2541F128 128KB 和CC2541F256 256KB; 支持硬件调试; 扩展基带自动化,包括自动确认和低至解码; 各个功率模式下,相关寄存器数据保持; 外设: 功能强大的5通道直接内存访问(DMA); 通用定时器(1个16bit,2 个8bit); 红外生产电路; 32kHz 具有捕获功能的睡眠定时器; 支持RSSI(数字信号强度指示器); 电池监视器和温度传感器 8通道12位模数转化器(可配置分辨率); 高级加密标准安全协处理器; 2个功能强大的支持多个串口协议的异步串口通信接口(UART); 23个通用I/O接口(21*4mA;2*20mA); IIC 接口; 2个大电流I/O(直接驱动LED); 安全装置定时器; 集成的高性能比较器; 开发工具: CC2541 评估模块工具包(CC2541EMK); CC2541 小型开发工具包(CC2541DK-MINI); SmartRF 软件; 提供IAR嵌入式Workbench。 BT05蓝牙4.0BLE模块亮点: 1.超低待机功耗 90uA~400uA 2.超远连接距离32.8英尺/10米 3.超快反应速度0.4秒 4.安卓、苹果、PC、MAC全通用. 5.收发无字节限制,最高可达3K Bytes/秒 6.不需要做MFI 7.IOS系统完美支持 8.Android4.3系统完美支持. 9.主从一体模块,具透传、远控、PIO采集三种功能,通过AT指令集进行切换和设置, 与您之前用过的蓝牙串口模块一样,在不改PCB和下位机程序的情况下轻松升级到蓝4.0! 模块电原理图 BT05蓝牙4.0BLE模块特点: 使用条件:苹果手机限定:4S及以上型号,系统版本iOS6及以上 安卓手机限定:系统为4.3版本及以上,手机蓝牙版本为4.0。 1、核心模块使用BT05从模块,引出接口包括VCC,GND,TXD,RXD,STATE。预留LED状态输出脚,单片机可通过该脚状态判断蓝牙是否已经连接, 2、LED指示蓝牙连接状态,闪烁表示没有蓝牙连接,常亮表示蓝牙已连接并打开了端口,STATE脚输出高电平为已连接,其他状态为低电平。 3、设置模块为主模式:模块已经为软件设置主从模块,通过串口发送AT+ROLE1(回车或者加\r\n),返回OK,则表示设置成功,此时模块LED灯进入快闪。主模块连接从模块需要通过AT指令进行连接(详情请参照BT05 AT指令集)。 4、底板3.3V LDO,输入电压3.6~6V,输入电压禁止超过7V! 5、接口电平3.3V,可以直接连接各种单片机(51,AVR,PIC,ARM,MSP430等),5V单片机也可直接连接,无需MAX232也不能经过MAX232! 6、空旷地有效距离7-10米,超过10米也是可能的,但不对此距离的连接质量做保证 7、配对以后当全双工串口使用,无需了解任何蓝牙协议,但仅支持8位数据位、1位停止位、无奇偶校验的通信格式,这也是最常用的通信格式,不支持其他格式。 8、在未建立蓝牙连接时支持通过AT指令设置波特率、名称、配对密码,设置的参数掉电保存。蓝牙连接以后自动切换到透传模式 9、体积小巧(3.57cm*1.52cm),工厂贴片生产,保证贴片质量。并套透明热缩管,防尘美观,且有一定的防静电能力。 10、该链接为从机,从机能与各种带蓝牙功能的电脑、蓝牙主机、大部分带蓝牙的手机、PDA、PSP等智能终端配对,从机之间不能配对。 模块接线 输入电压:3.3V/5V只需要一组电源供电。 内置电平转换功能。 如果用5.0V MCU与蓝牙模块通讯,5.0V电源端口供电,RX TX 逻辑电平5V 如果用3.3V MCU与蓝牙模块通讯,3.3V电源端口供电,RX TX 逻辑电平3.3V RX,蓝牙模块串口接收端与MCU的TXD连接。 TX,蓝牙模块串口发送端与MCU的RXD连接。 GND,地端电源负极 3.3V,电源端3.3V电源 5V,电源端5V电源 模块使用注意事项 MLT-BT05 4.0 蓝牙模块工作在 2.4G 无线频段,应尽量避免各种因素对无线收发 的影响,注意以下几点: 1、包围蓝牙模块的产品外壳避免使用金属,当使用部分金属外壳时,应尽量让模块天线部分远离金属部分。 2、产品内部金属连接线或者金属螺钉,应尽量远离模块天线部分。 3、模块天线部分应靠载板 PCB 四围放置,不允许放置于板中,且天线下方载板铣空,与天线平行的方向,不允许铺铜或走线。直接把天线部分直接露出载板,也是比较好的选择。 4、模块下方尽量铺大片 GND,走线尽量往外围延伸。 5、建议在基板上的模块贴装位置使用绝缘材料进行隔离,例如在该位置放一个 整块的丝印(TopOverLay)。 小常识(非常重要) TXD:发送端,一般表示为自己的发送端,正常通信必须接另一个设备的RXD。 RXD:接收端,一般表示为自己的接收端,正常通信必须接另一个设备的TXD。 正常通信时候本身的TXD永远接设备的RXD! 自收自发:正常通信时RXD接其他设备的TXD,因此如果要接收自己发送的数据顾名思义,也就是自己接收自己发送的数据,即自身的TXD直接连接到RXD,用来测试本身的发送和接收是否正常,是最快最简单的测试方法,当出现问题时首先做该测试确定是否产品故障,也称回环测试。 蓝牙4.0BLE 蓝牙发展至今经历了8个版本的更新,1.1、1.2、2.0、2.1、3.0、4.0、4.1、4.2。那么在1.x~3.0之间的我们称之为传统蓝牙,4.x开始的蓝牙我们称之为低功耗蓝牙也就是蓝牙ble,当然4.x版本的蓝牙也是向下兼容的。android手机必须系统版本4.3及以上才支持BLE API。低功耗蓝牙较传统蓝牙,传输速度更快,覆盖范围更广,安全性更高,延迟更短,耗电极低等等优点。(现在的穿戴设备都是使用BLE蓝牙技术的) 传统蓝牙与低功耗蓝牙通信方式也有所不同,传统的一般通过socket方式,而低功耗蓝牙是通过Gatt协议来实现。 主要优点 低功耗,使用标准有机电池,可运行一年乃至数年,成本低,可以完全实现兼容,速度支持1M的数据传输,可以最大程度的减少4G的串扰,更加智能,最大可以在3毫秒内完成数据的传输,安全性采用加密算法,会有数据包的加密和认证。所以蓝牙4.0的优点就是3种规格于一体,包括传统蓝牙的技术,与3.0的版本最大的区别就是功耗更低了,4.0的版本比老版本的功耗低了90%,随着蓝牙技术由手机,游戏,电脑,汽车等传统领域向物联网,医疗等新领域的发展,对用户的要求也就会越来越高,4.0的版本强化了数据传输的技术,又更注重了低功耗的性能。 实验开源代码 /* 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验九十六:BT-05蓝牙4.0BLE 模块 串口引出 CC2541兼容HM-10模块 1、实验项目:Arduino 调试源代码 2、实验接脚: TXD = D0 RXD = D1 GND = GND VCC = 3.3V */ void setup(){ Serial.begin(9600); } void loop(){ while(Serial.available()) { char c=Serial.read(); if(c=='A') { Serial.println("Hello I am eagler8"); } } } 实验串口返回情况 实验开源图形编程(Mind+、Mixly、编玩边学) 实验场景图 这几天在网上一直搜索蓝牙4.0BLE的电脑端调试软件和手机上调试app,也去了微信平台查询相关调试小程序,感觉比传统蓝牙(2.0,3.0)模块要复杂一些,老是不得要领....... 实验开源代码 /* 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验九十六:BT-05蓝牙4.0BLE 模块 串口引出 CC2541兼容HM-10模块 1、实验项目:通过BLE蓝牙模块与Arduino通信控制LED 2、实验接脚: CC2541模块与Uno: VCC——3.3V GND——GND TXD——RX RXD——TX */ #include char c=' '; const byte led=13; void setup() { Serial.begin(9600); Serial.println("BT is ready!"); pinMode(led, OUTPUT); } void loop(){ if(Serial.available()) { c=Serial.read(); Serial.println("Got input:"); Serial.println(c); //1的ASCII为49,0的ASCII为48 if(c==49) { Serial.write("Serial--13--high"); digitalWrite(13, HIGH); } if(c==48) { Serial.write("Serial--13--low"); digitalWrite(13, LOW); } } } 实验串口返回情况