在现代办公和学习环境中,正确的坐姿对于保护视力和预防颈椎、腰椎疾病至关重要。然而,长时间的工作和学习往往让人不自觉地忽略坐姿,导致各种健康问题。为了帮助用户保持正确的坐姿,同时提供智能的照明解决方案,我设计了一个基于Arduino Uno的坐姿矫正器及智能台灯系统。这个系统不仅能够监测用户的坐姿,还能根据环境光线自动调节台灯的亮度,确保用户在舒适的光线下工作或学习。

硬件组件

  1. Arduino Uno:作为项目的控制核心,负责协调各个元件的工作。

  2. HC-SR04超声波传感器:用于测量用户与台灯的距离,检测坐姿是否正确。

  3. 光敏模块:检测环境光线强度,自动控制白色LED的亮灭,提供补光功能。

  4. 白色LED:在环境光线较暗时自动点亮,提供补光。

  5. 红色LED:当用户坐姿不正确时亮起,提醒用户调整坐姿。

  6. DHT11温湿度传感器:监测环境的温度和湿度,确保舒适的工作环境。

  7. 0.96英寸OLED显示屏(I2C接口):显示温湿度、距离、光线强度和当前时间等信息。

  8. DS3231实时时钟模块:提供准确的时间信息,确保系统的时间显示准确。

硬件连接

1. HC-SR04超声波传感器

  • VCC 连接到 Arduino Uno 的 5V 引脚

  • Trig 连接到 Arduino Uno 的数字引脚 11

  • Echo 连接到 Arduino Uno 的数字引脚 12

  • GND 连接到 Arduino Uno 的 GND 引脚

2. 光敏模块

  • VCC 连接到 Arduino Uno 的 5V 引脚

  • AO 连接到 Arduino Uno 的模拟引脚 A1

  • GND 连接到 Arduino Uno 的 GND 引脚

3. 白色LED

  • 正极 连接到 Arduino Uno 的数字引脚 5

  • 负极 通过一个220欧姆的电阻连接到 Arduino Uno 的 GND 引脚

4. 红色LED

  • 正极 连接到 Arduino Uno 的数字引脚 9

  • 负极 通过一个220欧姆的电阻连接到 Arduino Uno 的 GND 引脚

5. DHT11温湿度传感器

  • VCC 连接到 Arduino Uno 的 5V 引脚

  • DATA 连接到 Arduino Uno 的数字引脚 2

  • GND 连接到 Arduino Uno 的 GND 引脚

6. 0.96英寸OLED显示屏(I2C接口)

  • VCC 连接到 Arduino Uno 的 5V 引脚

  • GND 连接到 Arduino Uno 的 GND 引脚

  • SDA 连接到 Arduino Uno 的 A4 引脚

  • SCL 连接到 Arduino Uno 的 A5 引脚

7. DS3231实时时钟模块(I2C接口)

  • VCC 连接到 Arduino Uno 的 5V 引脚

  • GND 连接到 Arduino Uno 的 GND 引脚

  • SDA 连接到 Arduino Uno 的 A4 引脚

  • SCL 连接到 Arduino Uno 的 A5 引脚

    #include <Wire.h>
    #include <Adafruit_GFX.h>
    #include <Adafruit_SSD1306.h>
    #include <DHT.h>
    #include <NewPing.h>
    #include <RTClib.h>
    
    #define SCREEN_WIDTH 128 // OLED显示屏幕的宽度,以像素为单位
    #define SCREEN_HEIGHT 64 // OLED显示屏幕的高度,以像素为单位
    #define OLED_RESET     -1 // 重置引脚,如果不使用可以设置为 -1
    
    #define DHTPIN 2     // DHT11的数据引脚连接到数字引脚2
    #define DHTTYPE DHT11   // DHT 11
    
    #define TRIG_PIN 11
    #define ECHO_PIN 12
    #define MAX_DISTANCE 200
    NewPing sonar(TRIG_PIN, ECHO_PIN, MAX_DISTANCE);
    
    #define WHITE_LED_PIN 5
    #define RED_LED_PIN 9
    
    #define LIGHT_SENSOR_PIN A1
    
    Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
    DHT dht(DHTPIN, DHTTYPE);
    RTC_DS3231 rtc;
    
    void setup() {
      pinMode(WHITE_LED_PIN, OUTPUT);
      pinMode(RED_LED_PIN, OUTPUT);
    
      dht.begin();
      if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // 这里的0x3C是OLED的I2C地址,根据实际情况调整
        Serial.println(F("SSD1306 allocation failed"));
        for(;;); // 进入无限循环,无法初始化显示屏
      }
      display.display(); // 显示启动画面
      delay(2000); // 等待2秒
      display.clearDisplay(); // 清除画面
    
      if (!rtc.begin()) {
        Serial.println("Couldn't find RTC");
        while (1);
      }
    
      if (rtc.lostPower()) {
        Serial.println("RTC lost power, let's set the time!");
        rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); // 使用编译日期和时间
      }
    }
    
    void loop() {
      float h = dht.readHumidity();
      float t = dht.readTemperature();
      if (isnan(h) || isnan(t)) {
        Serial.println(F("Failed to read from DHT sensor!"));
        return;
      }
    
      int distance = sonar.ping_cm();
      int lightValue = analogRead(LIGHT_SENSOR_PIN);
      DateTime now = rtc.now();
    
      display.clearDisplay(); // 清除画面
      display.setTextSize(1); // 设置文本大小
      display.setTextColor(SSD1306_WHITE); // 设置文本颜色
      display.setCursor(0,10); // 设置文本开始的坐标
      display.cp437(true); // 使用扩展字符集
      display.println(F("Sit Corrector & Smart Lamp")); // 显示标题
      display.print(F("Temp: "));
      display.print(t);
      display.print(F("*C        Humidity: "));
      display.print(h);
      display.println(F("%"));
      display.print(F("Distance: "));
      display.print(distance);
      display.println(F("cm"));
      display.print(F("Light: "));
      display.print(lightValue);
      display.println(F(" "));
      display.print(F("Time: "));
      display.print(now.hour(), DEC);
      display.print(':');
      display.print(now.minute(), DEC);
      display.print(':');
      display.print(now.second(), DEC);
      display.println(F(" "));
      display.display(); // 将以上内容显示出来
    
      // 控制白色LED
      if (lightValue < 500) { // 光线暗时点亮白色LED
        digitalWrite(WHITE_LED_PIN, HIGH);
      } else {
        digitalWrite(WHITE_LED_PIN, LOW);
      }
    
      // 控制红色LED
      if (distance < 30) { // 用户距离台灯过近时点亮红色LED
        digitalWrite(RED_LED_PIN, HIGH);
      } else {
        digitalWrite(RED_LED_PIN, LOW);
      }
    
      delay(1000); // 每秒更新一次
    }

    项目功能

  • 温湿度监测:通过DHT11传感器实时监测环境的温度和湿度,并将结果显示在OLED显示屏上。

  • 距离监测:使用HC-SR04超声波传感器测量用户与台灯的距离,当用户距离台灯过近时(例如小于30厘米),红色LED会亮起,提醒用户调整坐姿。

  • 光线监测:通过光敏模块检测环境光线强度,当光线较暗时(例如小于500),自动点亮白色LED,提供补光功能。

  • 时间显示:DS3231实时时钟模块提供准确的时间信息,并将当前时间显示在OLED显示屏上。

  • OLED显示:OLED显示屏用于显示温湿度、距离、光线强度和当前时间的数据,方便用户实时查看环境状态

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐