## 项目15 模拟沙漏

**1. 项目介绍：**

古代人没有电子时钟，就发明了沙漏来测时间，沙漏两边的容量比较大，在一边装了细沙，中间有个很小的通道，将沙漏直立，有细沙的一边在上方，由于重力的作用，细沙就会往下流通过通道到沙漏的另一边，当细沙都流到下边了，就倒过来，把一天反复的次数记录下来，第二天就可以通过沙漏反复流动的次数而知道这一天大概的时间了。

这一课我们将利用ESP32控制倾斜开关和LED灯来模拟沙漏，制作一个电子沙漏。

**2. 项目元件：**

| ![Img](./media/afc52f6616725ba37e3b12a2e01685ad.png) | ![Img](./media/a2aa343488c11843f13ae0413547c673.png) | ![Img](./media/01c1502f7cc76c09d4d77410dcdd31a6.png) | ![Img](./media/b3484a63586f907a33f23fa001c874ee.png) |
| :------------------------------------------------------------: | :------------------------------------------------------------: | :------------------------------------------------------------: | :------------------------------------------------------------: |
|                            ESP32*1                             |                             面包板*1                              |                             倾斜开关*1                             |                            10KΩ电阻*1                            |
| ![Img](./media/e8726e55ebfb8e7520e615575ce89204.png) | ![Img](./media/11f324f82f890b0691f134e1ea7a3765.png) | ![Img](./media/8d920d12138bd3b4e62f02cecc2c63a3.png) | ![Img](./media/b4421594adeb4676d63581a1047c6935.png) |
|                            红色 LED*4                            |                            220Ω电阻*4                            |                              跳线若干                              |                            USB 线*1                             |

**3. 元件知识：**

![Img](./media/966683cc81a185103df1862a16d7a844.png)

倾斜开关也叫数字开关或球形开关，里面有一个金属球。它用于检测小角度的倾斜。

原理很简单：当开关倾斜一定角度时，里面的球会向下滚动，接触到连接到外面引脚的两个触点，从而触发电路。否则，球将远离触点，从而断开电路。

这里用倾斜开关的内部结构来说明它是如何工作的，显示如下图：

![Img](./media/ed8fb48d5fbce7033fad9ffa5de67808.png)

**4. 项目接线图：**

![Img](./media/02d5f7df75aa8062f7b9399a47ae4285.png)

<span style="color: rgb(255, 76, 65);">注意: </span>

怎样连接LED 

![Img](./media/cbb16ef4d8cb62a4001d1a05ae3ac615.png)

怎样识别五色环220Ω电阻和五色环10KΩ电阻

![Img](./media/951ce7d7778b34bf8fbdb3de1b8c3116.png)

![Img](./media/2d3f0996515352c92c07d17e074e7308.png)

**5. 项目代码：**

```C
//**********************************************************************
/* 
 * 文件名  : 倾斜和LED
 * 描述 : 倾斜开关和四个led模拟沙漏.
*/
#define SWITCH_PIN  15  // 倾斜开关连接Pin15
byte switch_state = 0;
void setup()
{
  for(int i=16;i<20;i++)
  {
    pinMode(i, OUTPUT);
  } 
  pinMode(SWITCH_PIN, INPUT);
  for(int i=16;i<20;i++)
  {
    digitalWrite(i,0);
  } 
  Serial.begin(9600);
}
void loop()
{
switch_state = digitalRead(SWITCH_PIN); 
Serial.println(switch_state);
  if (switch_state == 0) 
  {
    for(int i=16;i<20;i++)
    {
      digitalWrite(i,1);
      delay(500);
    } 
}
 if (switch_state == 1) 
 {
   for(int i=19;i>15;i--)
   {
    digitalWrite(i,0);
    delay(500);
   }
  }
}
//**********************************************************************************
```

**6. 项目现象：**

代码上传成功后，利用USB线上电，你会看到的现象是：将面包板倾斜到一定角度，led就会一个一个地亮起来。当回到上一个角度时，led会一个一个关闭。就像沙漏一样，随着时间的推移，沙子漏了出来。

![Img](./media/2db9ee9bf59debc53c46aa954da31d47.png)





