找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
楼主: eagler8
打印 上一主题 下一主题
收起左侧

【Arduino】108种传感器模块系列实验(资料+代码+图形+仿真)

  [复制链接]
1321#
ID:513258 发表于 2019-7-25 15:34 | 只看该作者
AT24C256 I2C接口 EEPROM 存储模块



回复

使用道具 举报

1322#
ID:513258 发表于 2019-7-25 15:38 | 只看该作者
1.板载芯片AT24C256进口芯片;
2.板载I2C通讯所需的上拉电阻;
3.所有管脚均引出并标注;
4.PCB板子尺寸:1.9(CM)x1.1(CM)




回复

使用道具 举报

1323#
ID:513258 发表于 2019-7-25 15:45 | 只看该作者
模块电原理图


回复

使用道具 举报

1324#
ID:513258 发表于 2019-7-25 17:17 | 只看该作者
本帖最后由 eagler8 于 2019-7-26 15:51 编辑
  1. /*
  2. 【Arduino】66种传感器模块系列实验(69)
  3. 实验六十九: AT24C256 I2C接口 EEPROM 存储模块
  4. */

  5. #include <Wire.h>

  6. #define ADDRESS_AT24C256 0x50

  7. word wordAddress = 0x0F00;
  8. char str[] = "This is ZLBG.";
  9. byte buffer[30];

  10. int i;

  11. void setup()
  12. {
  13.     Wire.begin();
  14.     Serial.begin(9600);

  15.     //write
  16.     Wire.beginTransmission(ADDRESS_AT24C256);
  17.     Wire.write(highByte(wordAddress));
  18.     Wire.write(lowByte(wordAddress));
  19.     for (i = 0; i < sizeof(str); i++)
  20.     {
  21.         Wire.write(byte(str[i]));
  22.     }
  23.     Wire.endTransmission();   

  24.     delay(10);
  25. }

  26. void loop()
  27. {
  28.    
  29.     Wire.beginTransmission(ADDRESS_AT24C256);
  30.     Wire.write(highByte(wordAddress));
  31.     Wire.write(lowByte(wordAddress));
  32.     Wire.endTransmission();
  33.     Wire.requestFrom(ADDRESS_AT24C256, sizeof(str));
  34.     if(Wire.available() >= sizeof(str))
  35.     {
  36.         for (i = 0; i < sizeof(str); i++)
  37.         {
  38.             buffer[i] = Wire.read();
  39.         }
  40.     }

  41.    
  42.     for(i = 0; i < sizeof(str); i++)
  43.     {
  44.         Serial.print(char(buffer[i]));
  45.     }
  46.     Serial.println();

  47.     delay(2000);
  48. }
复制代码


回复

使用道具 举报

1325#
ID:513258 发表于 2019-7-25 17:19 | 只看该作者

回复

使用道具 举报

1326#
ID:513258 发表于 2019-7-25 17:40 | 只看该作者
  1. /*
  2. 【Arduino】66种传感器模块系列实验(69)
  3. 实验六十九: AT24C256 I2C接口 EEPROM 存储模块
  4. 程序之二
  5. */

  6. #include <Wire.h>
  7. #define EEPROM_ADDR 0x50     
  8.       
  9. void setup()
  10. {
  11.   Wire.begin();                        
  12.   Serial.begin(9600);

  13.   // TESTS FOR EACH FUNCTION BEGIN HERE
  14.   Serial.println("Writing Test:");
  15.   for (int i=0; i<20; i++){            
  16.     i2c_eeprom_write_byte(EEPROM_ADDR,i,i+65);   
  17.     Serial.print(". ");
  18.     delay(10);                        
  19.   }
  20.   Serial.println("");
  21.   delay(500);

  22.   Serial.println("Reading Test:");
  23.   for (int i=0; i<20; i++){            
  24.     Serial.write(i2c_eeprom_read_byte(EEPROM_ADDR, i));
  25.     Serial.print(" ");
  26.   }

  27.   byte PageData[30];                  
  28.   byte PageRead[30];                  
  29.   for (int i=0; i<30; i++){            
  30.     PageData[i] = 0;
  31.     PageRead[i] = 0;
  32.   }
  33.   Serial.println("");
  34.   for (int i=0; i<30; i++) PageData[i] = i+33;  
  35.   Serial.println("Writing Page Test:");
  36.   i2c_eeprom_write_page(EEPROM_ADDR, 100, PageData, 28 );
  37.   Serial.println("Reading Page Test:");
  38.   i2c_eeprom_read_buffer( EEPROM_ADDR, 100, PageRead, 28);
  39.   for (int i=0; i<28; i++){
  40.     Serial.write(PageRead[i]);   
  41.     Serial.print(" ");
  42.   }
  43. }

  44. void loop()
  45. {
  46. }

  47. void i2c_eeprom_write_byte( int deviceaddress, unsigned int eeaddress, byte data )
  48. {
  49.   int rdata = data;
  50.   Wire.beginTransmission(deviceaddress);
  51.   Wire.write((int)(eeaddress >> 8));   
  52.   Wire.write((int)(eeaddress & 0xFF));  
  53.   Wire.write(rdata);
  54.   Wire.endTransmission();
  55. }


  56. void i2c_eeprom_write_page
  57. ( int deviceaddress, unsigned int eeaddresspage, byte* data, byte length )
  58. {
  59.   Wire.beginTransmission(deviceaddress);
  60.   Wire.write((int)(eeaddresspage >> 8));
  61.   Wire.write((int)(eeaddresspage & 0xFF));
  62.   byte c;
  63.   for ( c = 0; c < length; c++)
  64.     Wire.write(data[c]);
  65.   Wire.endTransmission();
  66.   delay(10);                           
  67. }

  68. byte i2c_eeprom_read_byte( int deviceaddress, unsigned int eeaddress )
  69. {
  70.   byte rdata = 0xFF;
  71.   Wire.beginTransmission(deviceaddress);
  72.   Wire.write((int)(eeaddress >> 8));   
  73.   Wire.write((int)(eeaddress & 0xFF));  
  74.   Wire.endTransmission();
  75.   Wire.requestFrom(deviceaddress,1);
  76.   if (Wire.available()) rdata = Wire.read();
  77.   return rdata;
  78. }

  79. void i2c_eeprom_read_buffer( int deviceaddress, unsigned int eeaddress, byte *buffer, int length )
  80. {
  81.   Wire.beginTransmission(deviceaddress);
  82.   Wire.write((int)(eeaddress >> 8));   
  83.   Wire.write((int)(eeaddress & 0xFF));  
  84.   Wire.endTransmission();
  85.   Wire.requestFrom(deviceaddress,length);
  86.   
  87.   for ( int c = 0; c < length; c++ )
  88.     if (Wire.available()) buffer[c] = Wire.read();
  89. }
复制代码


回复

使用道具 举报

1327#
ID:513258 发表于 2019-7-25 17:42 | 只看该作者

回复

使用道具 举报

1328#
ID:513258 发表于 2019-7-25 18:28 | 只看该作者

回复

使用道具 举报

1329#
ID:513258 发表于 2019-7-25 18:41 | 只看该作者

回复

使用道具 举报

1330#
ID:513258 发表于 2019-7-25 18:45 | 只看该作者

回复

使用道具 举报

1331#
ID:513258 发表于 2019-7-25 20:15 | 只看该作者
实验七十: GY-30 数字光强度模块光照传感器(BH1750FVI芯片)

BH1750FVI
是日本罗姆(ROHM)半导体生产的数字式环境光传感IC,内置16位的模数转换器,它能够直接输出一个数字信号,不需要再做复杂的计算。这是一种更精良的和容易使用简易电阻器的版本,通过计算电压,来获得有效的数据。这款环境光传感器能够直接通过光度计来测量。光强度的单位是流明"lx"。当物体在均匀的光照下它能够在每平方米获得1lx的光通量,它们的光强度是1lx。有时为了充分利用光源,你可以增加一个光源的反射装置。那样在某些方向就能获得更多的光通量,以增加被照表面的亮度。




回复

使用道具 举报

1332#
ID:513258 发表于 2019-7-25 20:39 | 只看该作者
光亮度
光亮度(luminance)又称光照强度,发光率,是指一个表面的明亮程度,以L表示, 即从一个表面反射出来的光通量。或者说是指在某方向上单位投影面积的面光源沿该方向的发光强度。表示发光面明亮程度的,指发光表面在指定方向的发光强度与垂直于指定方向的发光面的面积之比,单位是坎德拉/平方米。对于一个漫散射面,尽管各个方向的光强和光通量不同,但各个方向的亮度都是相等的。电视机的荧光屏就是近似于这样的漫散射面,所以从各个方向上观看图像,都有相同的亮度感。不同物体对光有不同的反射系数或吸收系数。




回复

使用道具 举报

1333#
ID:513258 发表于 2019-7-26 10:08 | 只看该作者
BH1750FVI主要特性
I2C数字接口,支持速率最大400Kbps
输出量为光照度(Illuminance)
测量范围1~65535 lux,分辨率最小到1lux
低功耗(Power down)功能
屏蔽50/60Hz市电频率引起的光照变化干扰
支持两个I2C地址,通过ADDR引脚选择
较小的测量误差(精度误差最大值+/-20%)



回复

使用道具 举报

1334#
ID:513258 发表于 2019-7-26 10:27 | 只看该作者

回复

使用道具 举报

1335#
ID:513258 发表于 2019-7-26 10:32 | 只看该作者
BH1750FVI内部结构



回复

使用道具 举报

1336#
ID:513258 发表于 2019-7-26 10:50 | 只看该作者
特点功能
支持I2CBUS接口
接近视觉灵敏度的光谱灵敏度特性
输出对应亮度的数字值
对应广泛的输入光范围(相当于1-65535lx)
通过降低功率功能,实现低电流化
通过50Hz/60Hz除光噪音功能实现稳定的测定
支持1.8v逻辑输入接口
无需其他外部件
光源依赖性弱
有两种可选的I2Cslave地址
可调的测量结果影响较大的因素为光入口大小
使用这种功能计算1.1lx到100000lx马克斯/分钟的范围
最小误差变动在±20%
受红外线影响很小



回复

使用道具 举报

1337#
ID:513258 发表于 2019-7-26 11:04 | 只看该作者
GY-30 数字光强度模块



回复

使用道具 举报

1338#
ID:513258 发表于 2019-7-26 11:08 | 只看该作者
数字光强度检测模块:GY-30
采用ROHM原装BH1750FVI芯片
供电电源  :3-5v
光照度范围:0-65535 lx
传感器内置16bitAD转换器
直接数字输出,省略复杂的计算,省略标定
不区分环境光源
接近于视觉灵敏度的分光特性
可对广泛的亮度进行1勒克斯的高精度测定



回复

使用道具 举报

1339#
ID:513258 发表于 2019-7-26 11:17 | 只看该作者
模块电原理图




回复

使用道具 举报

1340#
ID:513258 发表于 2019-7-26 12:41 | 只看该作者
电路连接
由于模块本身已经带有了3.3V稳压芯片和I2C电平转换电路,因此可将模块直接与UNO板的I2C接口相连。对于UNO板,I2C总线的SDA信号线对应A4管脚,SCL时钟线对应A5管脚。




回复

使用道具 举报

1341#
ID:513258 发表于 2019-7-26 12:53 | 只看该作者
测量程序步骤



回复

使用道具 举报

1342#
ID:513258 发表于 2019-7-26 12:55 | 只看该作者
指令集合结构



回复

使用道具 举报

1343#
ID:513258 发表于 2019-7-26 12:58 | 只看该作者

回复

使用道具 举报

1344#
ID:513258 发表于 2019-7-26 13:01 | 只看该作者
本帖最后由 eagler8 于 2019-7-26 14:12 编辑


回复

使用道具 举报

1345#
ID:513258 发表于 2019-7-26 14:11 | 只看该作者
本帖最后由 eagler8 于 2019-7-26 15:52 编辑
  1. /*
  2. 【Arduino】66种传感器模块系列实验(70)
  3. GY-30 数字光强度模块光照传感器(BH1750FVI芯片)

  4. Module        UNO
  5. 5 VCC    <----->    5V
  6. 6 GND    <----->    GND
  7. 7 SCL    <----->    A5
  8. 8 SDA    <----->    A4
  9. 9 ADD    <----->    NC
  10. */

  11. #include <Wire.h>
  12. #include <math.h>
  13. int BH1750address = 0x23;

  14. byte buff[2];
  15. void setup()
  16. {
  17.   Wire.begin();
  18.   Serial.begin(57600);
  19. }

  20. void loop()
  21. {
  22.   int i;
  23.   uint16_t val=0;
  24.   BH1750_Init(BH1750address);
  25.   delay(200);

  26.   if(2==BH1750_Read(BH1750address))
  27.   {
  28.     val=((buff[0]<<8)|buff[1])/1.2;
  29.     Serial.print(val,DEC);     
  30.     Serial.println("[lx]");
  31.   }
  32.   delay(150);
  33. }

  34. int BH1750_Read(int address)
  35. {
  36.   int i=0;
  37.   Wire.beginTransmission(address);
  38.   Wire.requestFrom(address, 2);
  39.   while(Wire.available())
  40.   {
  41.     buff[i] = Wire.read();  
  42.     i++;
  43.   }
  44.   Wire.endTransmission();  
  45.   return i;
  46. }

  47. void BH1750_Init(int address)
  48. {
  49.   Wire.beginTransmission(address);
  50.   Wire.write(0x10);
  51.   Wire.endTransmission();
  52.   delay(500);
  53. }
复制代码


回复

使用道具 举报

1346#
ID:513258 发表于 2019-7-26 14:14 | 只看该作者

回复

使用道具 举报

1347#
ID:513258 发表于 2019-7-26 14:24 | 只看该作者
本帖最后由 eagler8 于 2019-7-26 15:52 编辑
  1. /*
  2. 【Arduino】66种传感器模块系列实验(70)
  3. GY-30 数字光强度模块光照传感器(BH1750FVI芯片)

  4. Module        UNO
  5. 5 VCC    <----->    5V
  6. 6 GND    <----->    GND
  7. 7 SCL    <----->    A5
  8. 8 SDA    <----->    A4
  9. 9 ADD    <----->    NC

  10. 程序之二,串口打印光照度的波形
  11. */

  12. #include <Wire.h>
  13. #include <math.h>
  14. int BH1750address = 0x23;

  15. byte buff[2];
  16. void setup()
  17. {
  18.   Wire.begin();
  19.   Serial.begin(57600);
  20. }

  21. void loop()
  22. {
  23.   int i;
  24.   uint16_t val=0;
  25.   BH1750_Init(BH1750address);
  26.   delay(200);

  27.   if(2==BH1750_Read(BH1750address))
  28.   {
  29.     val=((buff[0]<<8)|buff[1])/1.2;
  30.     Serial.println(val,DEC);     
  31.   }
  32.   delay(150);
  33. }

  34. int BH1750_Read(int address)
  35. {
  36.   int i=0;
  37.   Wire.beginTransmission(address);
  38.   Wire.requestFrom(address, 2);
  39.   while(Wire.available())
  40.   {
  41.     buff[i] = Wire.read();  
  42.     i++;
  43.   }
  44.   Wire.endTransmission();  
  45.   return i;
  46. }

  47. void BH1750_Init(int address)
  48. {
  49.   Wire.beginTransmission(address);
  50.   Wire.write(0x10);
  51.   Wire.endTransmission();
  52.   delay(500);
  53. }
复制代码


回复

使用道具 举报

1348#
ID:513258 发表于 2019-7-26 14:27 | 只看该作者

回复

使用道具 举报

1349#
ID:513258 发表于 2019-7-26 14:39 | 只看该作者
上图是自然光的变化,下图是用手电筒照射模块的波形



回复

使用道具 举报

1350#
ID:513258 发表于 2019-7-26 14:44 | 只看该作者

回复

使用道具 举报

1351#
ID:513258 发表于 2019-7-26 15:04 | 只看该作者
光亮度数据参考:
  晚上: 0.001-0.02;
  月夜: 0.02-0.3;
  多云室内: 5-50;
  多云室外: 50-500;
  晴天室内: 100-1000;
  夏天中午光照下: 大约10*6能量;
  阅读书籍时的照明度: 50-60;
  家庭录像标准照明度:1400




回复

使用道具 举报

1352#
ID:513258 发表于 2019-7-26 15:06 | 只看该作者

回复

使用道具 举报

1353#
ID:513258 发表于 2019-7-26 15:08 | 只看该作者

回复

使用道具 举报

1354#
ID:513258 发表于 2019-7-26 15:51 | 只看该作者

回复

使用道具 举报

1355#
ID:513258 发表于 2019-7-26 18:37 | 只看该作者
实验七十一:电容式土壤湿度传感器模块不易腐蚀宽电压工作(TL555I)

TL555I 6位模数转换器 SOP-8 实时时钟芯片



回复

使用道具 举报

1356#
ID:513258 发表于 2019-7-26 18:46 | 只看该作者
电容式传感器
是以各种类型的电容器作为传感元件,将被测物理量或机械量转换成为电容量变化的一种转换装置,实际上就是一个具有可变参数的电容器。电容式传感器广泛用于位移、角度、振动、速度、压力、成分分析、介质特性等方面的测量。最常用的是平行板型电容器或圆筒型电容器。典型的电容式传感器由上下电极、绝缘体和衬底构成。当薄膜受压力作用时,薄膜会发生一定的变形,因此,上下电极之间的距离发生一定的变化,从而使电容发生变化。但电容式压力传感器的电容与上下电极之间的距离的关系是非线性关系,因此,要用具有补偿功能的测量电路对输出电容进行非线性补偿。




回复

使用道具 举报

1357#
ID:513258 发表于 2019-7-26 18:55 | 只看该作者
电容式湿度传感器
是利用湿敏元件的电容值随湿度变化的原理进行湿度测量的传感器。此类湿敏元件实际上是一种吸湿性电解质材料的介电常数随湿度而变化的薄片状电容器,感湿材料为聚酰铵树脂,酰根纤维素和金属氧化物如AL2O3等。

国外厂家比较优质的湿度传感器产品主要使用聚酰胺树脂,产品结构概要为在硼硅玻璃或蓝宝石衬底上真空蒸发制作金电极,再喷镀感湿介质材料(如前所述)形式平整的感湿膜,再在薄膜上蒸发上金电极,金的原度控制在70Um 左右,以保证水蒸汽顺利通过.湿敏元件的电容值与相对湿度成正比关系,线性度约±2%湿敏电容与相对湿度关系图。

电极金薄膜和感湿膜为多孔结构薄膜,因此吸湿和脱湿容易,升湿响应小于3S,而脱湿相对慢一些为10-30S。

特性曲线看出在低湿段容值变化分辨显著下降,而在高湿段90%RH以上变化过陡非线性现象较重,对于非线性现象,一方面在电路中加以修正,同时可对湿度传感器作工艺处理,包括激光整补电极,纯化处理等,可以收到好的效果。

电容式湿度传感器线性度较好,重复性好,滞后小,反应快,尺寸小,能在-10℃-60℃湿度环境下使用。但电容式湿度传感器同时存在质量问题,稳定性不理想,由于容值在单位级变化,1%RH为0.3PF,容值小的漂移就容易造成%RH值的突变,一般在控制领域使用电容式湿敏传感器都需要慎重考虑。

回复

使用道具 举报

1358#
ID:513258 发表于 2019-7-26 19:00 | 只看该作者
电容式土壤湿度传感器模块



回复

使用道具 举报

1359#
ID:513258 发表于 2019-7-26 19:17 | 只看该作者
这款电容式土壤湿度传感器区别于市面上绝大部分的电阻式传感器,采用电容感应原理来检测土壤湿度。避免了电阻式传感器极易被腐蚀的问题,极大地延长了它的工作寿命。传感器内置稳压芯片,支持3.3~5.5V宽电压工作环境,这意味着即使在3.3V的Arduino主控板上,它也能正常工作。标志性的DFRobot-Gravity接口保证了接口的兼容性,可以直接与Gavity IO扩展板相连接。树莓派之类的微型PC,只需要外接一个ADC(模拟信号转数字信号)转换模块就可以工作。


回复

使用道具 举报

1360#
ID:513258 发表于 2019-7-27 11:32 | 只看该作者
特点:
模拟输出
该传感器兼容DFRobot 3针“重力”接口,可直接连接到重力I / O扩展板

规格:
工作电压:DC 3.3-5.5V
输出电压:DC 0-3.0V
接口:PH2.0-3P
尺寸:99x16mm / 3.9x0.63“

应用:
园林植物
水分检测
智能农业




回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表