极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: eagler8

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

[复制链接]
 楼主| 发表于 2019-6-19 16:15:10 | 显示全部楼层
本帖最后由 eagler8 于 2019-6-19 17:39 编辑

接线方法(以提供的程序为准,可以接任意IO口,在程序中修改端口定义即可):
VCC→+5V/3.3V
GND→GND
CLK→7
DAT→6
RST→5


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-19 17:39:45 | 显示全部楼层
  1. /*
  2. 【Arduino】37种传感器模块系列实验(29)
  3. 实验二十九:DS1302实时时钟模块(带电池CR2032 掉电走时)之一
  4. */

  5. #define RST 5   
  6. #define SCLK 7
  7. #define IO 6
  8. #define uchar unsigned char   

  9. void setup() {   
  10.   pinMode(RST,OUTPUT);
  11.   pinMode(SCLK,OUTPUT);
  12.   pinMode(IO,OUTPUT);
  13.   Serial.begin(9600);
  14.   attachInterrupt(0, settm, FALLING );  
  15. }

  16. void writeData(unsigned char addr,unsigned char dat){
  17.   pinMode(IO,OUTPUT);
  18.   digitalWrite(RST,LOW);   
  19.   digitalWrite(SCLK,LOW) ;
  20.   delayMicroseconds(1);
  21.   digitalWrite(RST,HIGH);

  22.   int i;
  23.   for(i =0;i<8;i++){
  24.     digitalWrite(SCLK,LOW);
  25.     digitalWrite(IO, addr&1);
  26.     addr =addr>>1;
  27.     digitalWrite(SCLK,HIGH);
  28.     delayMicroseconds(1);
  29.   }

  30.   for(i =0;i<8;i++){
  31.       digitalWrite(SCLK,LOW);
  32.       digitalWrite(IO, dat&1);
  33.       dat =dat>>1;
  34.       digitalWrite(SCLK,HIGH);
  35.       delayMicroseconds(1);
  36.   }
  37.   digitalWrite(RST,LOW);
  38. }

  39. uchar readData(uchar addr){              
  40.   addr = addr | 1;

  41.   pinMode(IO,OUTPUT);
  42.   digitalWrite(RST,LOW);
  43.   digitalWrite(SCLK,LOW) ;
  44.   delayMicroseconds(1);
  45.   digitalWrite(RST,HIGH);

  46.   int i;
  47.   for(i =0;i<8;i++){               
  48.     digitalWrite(SCLK,LOW);
  49.     digitalWrite(IO, addr&1);
  50.     addr =addr>>1;
  51.     digitalWrite(SCLK,HIGH);
  52.     delayMicroseconds(1);
  53.   }
  54.   pinMode(IO,INPUT);               

  55.   int dat = 0;
  56.   for(i =0;i<8;i++){
  57.       digitalWrite(SCLK,LOW);
  58.       delayMicroseconds(10);
  59.       uchar b = digitalRead(IO);
  60.       dat = dat >>1;

  61.       dat = dat | (b<<7);
  62.       digitalWrite(SCLK,HIGH);
  63.       delayMicroseconds(1);
  64.   }
  65.   digitalWrite(RST,LOW);  
  66.   return dat ;
  67. }

  68. #define SECOND  0x80   
  69. #define MIN 0x82
  70. #define HOUR 0x84
  71. #define DAY 0x86
  72. #define MONTH 0x88
  73. #define YEAR 0x8C
  74. #define WEEK 0x8A

  75. void writeTimeUnit(uchar TYPE,uchar data){

  76.   uchar high = data / 10;
  77.   uchar low = data % 10;
  78.   uchar d = ((data /10) << 4) | (data % 10);
  79.   writeData(TYPE,data);
  80. }

  81. uchar readTimeUnit(uchar TYPE){  
  82.   uchar r = readData(TYPE);
  83.   r = 10*(r >> 4)+ (r & 0xf);   
  84.   return r;
  85. }

  86. void writeAllTm(uchar tm[]){
  87.   uchar s = SECOND;
  88.   for(uchar i=0;i<5;i++){
  89.     writeTimeUnit(s,tm[5-i]);
  90.     s+=2;
  91.   }
  92.   writeTimeUnit(YEAR,tm[0]);
  93. }

  94. void readAllTm(uchar tm[]){  
  95.   uchar s = SECOND;
  96.   for(uchar i=0;i<5;i++){
  97.     tm[5-i] = readTimeUnit(s);  
  98.     s+=2;
  99.   }  
  100.   tm[0] = readTimeUnit(YEAR);
  101.   tm[6] = readTimeUnit(WEEK);
  102. }


  103. void printTm(uchar tm[]){
  104.   Serial.print(tm[0]);
  105.   Serial.print("-");
  106.   Serial.print(tm[1]);
  107.   Serial.print("-");
  108.   Serial.print(tm[2]);
  109.   Serial.print(" ");

  110.   Serial.print(tm[3]);
  111.   Serial.print(":");

  112.   Serial.print(tm[4]);
  113.   Serial.print(":");

  114.   Serial.print(tm[5]);
  115.   Serial.print(" week ");

  116.   Serial.print(tm[6]);
  117.   Serial.println();
  118. }
  119. uchar st = 0;
  120. void loop() {            
  121.     uchar tm[7] = {0};   
  122.     readAllTm(tm);
  123.     printTm(tm);
  124.     delay(1000);
  125. }

  126. void settm()
  127. {
  128.     uchar tm[] = {11,12,13,4,5,6 ,0};
  129.     Serial.println("set tm ...");
  130.       writeAllTm(tm);
  131. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-19 17:53:54 | 显示全部楼层
总算通过了一个程序,就是不知道如何调整为当前时间?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-19 21:03:34 | 显示全部楼层
  1. /*
  2. 【Arduino】37种传感器模块系列实验(29)
  3. 实验二十九:DS1302实时时钟模块(带电池CR2032 掉电走时)之二
  4. */

  5. #include <DS1302.h>

  6. DS1302 rtc(5, 6, 7);

  7. void setup()
  8. {
  9.   rtc.halt(false);
  10.   rtc.writeProtect(false);
  11.   Serial.begin(9600);
  12.   rtc.setDOW(FRIDAY);        
  13.   rtc.setTime(20, 49, 0);     
  14.   rtc.setDate(19, 6, 2019);  
  15. }

  16. void loop()
  17. {
  18.   Serial.print(rtc.getDOWStr());
  19.   Serial.print(" ");
  20.   Serial.print(rtc.getDateStr());
  21.   Serial.print(" -- ");
  22.   Serial.println(rtc.getTimeStr());
  23.   delay (1000);
  24. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-19 21:05:54 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-20 06:44:25 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-20 06:44:41 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-20 08:49:47 | 显示全部楼层
本帖最后由 eagler8 于 2019-6-20 09:11 编辑

试了不少串口调试工具,只有这二款能同步打印即使时间

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-20 08:50:04 | 显示全部楼层
本帖最后由 eagler8 于 2019-6-20 09:12 编辑

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-20 13:22:14 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-20 13:22:32 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-20 13:36:31 | 显示全部楼层
实验三十:光敏二极管传感器模块(英语:photodiode )

光敏二极管
也叫光电二极管。光敏二极管与半导体二极管在结构上是类似的,其管芯是一个具有光敏特征的PN结,具有单向导电性,因此工作时需加上反向电压。无光照时,有很小的饱和反向漏电流,即暗电流,此时光敏二极管截止。当受到光照时,饱和反向漏电流大大增加,形成光电流,它随入射光强度的变化而变化。当光线照射PN结时,可以使PN结中产生电子一空穴对,使少数载流子的密度增加。这些载流子在反向电压下漂移,使反向电流增加。因此可以利用光照强弱来改变电路中的电流。常见的有2CU、2DU等系列。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-20 13:48:46 | 显示全部楼层




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-20 13:53:37 | 显示全部楼层
工作原理
  光敏二极管是将光信号变成电信号的半导体器件。它的核心部分也是一个PN结,和普通二极管相比,在结构上不同的是,为了便于接受入射光照,PN结面积尽量做的大一些,电极面积尽量小些,而且PN结的结深很浅,一般小于1微米。
  光敏二极管是在反向电压作用之下工作的。没有光照时,反向电流很小(一般小于0.1微安),称为暗电流。当有光照时,携带能量的光子进入PN结后,把能量传给共价键上的束缚电子,使部分电子挣脱共价键,从而产生电子---空穴对,称为光生载流子。
  它们在反向电压作用下参加漂移运动,使反向电流明显变大,光的强度越大,反向电流也越大。这种特性称为“光电导”。光敏二极管在一般照度的光线照射下,所产生的电流叫光电流。如果在外电路上接上负载,负载上就获得了电信号,而且这个电信号随着光的变化而相应变化。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-20 14:10:36 | 显示全部楼层
光敏二极管与光敏电阻的区别
光敏电阻又称光敏电阻器或光导管常用的制作材料为硫化镉,另外还有硒、硫化铝、硫化铅和硫化铋等材料。这些制作材料具有在特定波长的光照射下,其阻值迅速减小的特性。这是由于光照产生的载流子都参与导电,在外加电场的作用下作漂移运动,电子奔向电源的正极,空穴奔向电源的负极,从而使光敏电阻器的阻值迅速下降。还有另一种入射光弱,电阻减小,入射光强,电阻增大。根据光敏电阻的光谱特性,可分为三种光敏电阻器:紫外光敏电阻器、红外光敏电阻器、可见光光敏电阻器。和光敏二极管不同,光敏电阻测量的时候,没有正反,2面的电阻是一样的。

光敏电阻和光敏二极管相比,光敏电阻内部的光电效应和电极无关(光电二极管才有关),即可以使用直流电源,灵敏度和半导体材料、以及入射光的波长有关,环氧树脂胶封装,可靠性好, 体积小, 灵敏度高,反应速度快,光谱特性好。但是光敏电阻受温度影响较大,响应速度不快,在ms到s之间,延迟时间受入射光的光照度影响(光电二极管无此缺点,光电二极管灵敏度比光敏电阻高)最后光敏电阻是耗材。




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-8 18:45 , Processed in 0.036543 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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