零基础入门学用Arduino教程(智能应用篇) – 10 环保智能小夜灯(控制程序 您所在的位置:网站首页 智能灯线路 零基础入门学用Arduino教程(智能应用篇) – 10 环保智能小夜灯(控制程序

零基础入门学用Arduino教程(智能应用篇) – 10 环保智能小夜灯(控制程序

2024-06-08 17:31| 来源: 网络整理| 查看: 265

如视频无法正常播放,可点击这里前往B站观看

小夜灯控制程序-2:(无法复制本站示例程序代码?请点击这里获得解决方法。)

在示例程序2后面有示例程序-3

太极创客-环保小夜灯-示例程序-2 Arduino 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201  /* * TC-Light-fade-OnOff-Breathe-Custom-Color * 太极创客-环保小夜灯-示例程序-2 * by 太极创客 (2017-11-21) * www.taichi-maker.com * * 此示例程序为配合太极创客制作的 * 零基础入门学用ARDUINO教程-智能应用篇使用 * * 基本功能介绍: * 小夜灯配备人体红外感应传感器以及光敏电阻实现照明自动化 * 点亮和熄灭时产生渐明渐暗效果 * 在点亮过程中产生呼吸灯的效果 * 用户可以通过变量 maxRVal、maxGVal、maxBVal 自定义小夜灯点亮的颜色 * 用户可以通过变量 breathStep、breathStepDelay 自定义小夜灯渐明渐暗的速度 * * 基本电路连接说明: * 共阴极RGB-LED引脚R 连接 Arduino控制器引脚6 * 共阴极RGB-LED引脚G 连接 Arduino控制器引脚5 * 共阴极RGB-LED引脚B 连接 Arduino控制器引脚3 * 红外人体感应模块信号输出引脚 连接 Arduino控制器引脚8 * 光敏电阻分压电路信号输出引脚 连接 Arduino控制器引脚A0 * * 如需获取太极创客-环保小夜灯的具体电路连接 * 请参见太极创客网站: www.taichi-maker.com *          */#define rLedPin 6  //RGB-LED引脚R#define gLedPin 5  //RGB-LED引脚G#define bLedPin 3  //RGB-LED引脚B#define irSensorPin 8  //红外人体感应模块信号输出#define lightSensorPin A0  //光敏电阻分压电路信号输出 int ledR  = 0; //R Led 亮度 (请勿改变数值)int ledG  = 0; //G Led 亮度 (请勿改变数值)int ledB  = 0; //B Led 亮度 (请勿改变数值) bool irReading;    //红外人体感应模块输出int lightReading;  //光敏电阻分压电路信号输出 //用户可以通过变量 maxRVal、maxGVal、maxBVal 自定义RGB-LED颜色int maxRVal = 125;    //夜灯R LED最大亮度 (允许数值:0 - 255)int maxGVal = 200;    //夜灯G LED最大亮度 (允许数值:0 - 255)int maxBVal = 33;     //夜灯B LED最大亮度 (允许数值:0 - 255) int minRVal = 39;   //夜灯呼吸时R LED最小亮度 (允许数值:0 - 255)int minGVal = 95;   //夜灯呼吸时G LED最小亮度 (允许数值:0 - 255)int minBVal = 11;   //夜灯呼吸时B LED最小亮度 (允许数值:0 - 255) int breathStep = 1;        //呼吸起伏速度 数值越大 速度越快int breathStepDelay = 18;  //呼吸起伏速度延迟 数值越大 起伏速度越慢bool breatheOnOff = 0;     //小夜灯呼吸状态                            //breatheOnOff = 1 开启呼吸灯模式                            //breatheOnOff = 0 关闭呼吸灯模式                           bool onOffState;   //小夜灯开关状态                        bool debugOn = 0;  /* * Arduino在控制LED亮度变化时,对于时间的要求很苛刻。 * 每一次Arduino通过串口监视器输出信息时都会让Arduino短暂停顿 * 这些短暂停顿会影响小夜灯的渐明渐暗效果。 * 因此建议在程序开发时令debugOn = 1,以便于观察Arduino * 的工作状态并作出必要的修改。 * 但是在正常工作时,建议将debugOn = 0, 从而确保Arduino * 的最佳工作效果。 * */ void setup() {  //设置引脚为相应工作模式  pinMode(rLedPin, OUTPUT);  pinMode(gLedPin, OUTPUT);  pinMode(bLedPin, OUTPUT);  pinMode(irSensorPin, INPUT);  if(debugOn){    Serial.begin(9600);     Serial.println("Welcome to Taichi-Maker RGB Led Night-Light.");  }  //检测是否LED亮度参数符合程序要求(min数值小于等于 max数值)  if (minRVal > maxRVal || minGVal > maxGVal || minBVal > maxBVal) {    while(true){  //如果出现数值设置问题,持续闪烁红灯      analogWrite(rLedPin, 255);      delay(500);      analogWrite(rLedPin, 0);      delay(500);      Serial.begin(9600);       Serial.println("Bad LED Settings!!!");    }  }} void loop() {    irReading = digitalRead(irSensorPin);      //读取红外人体感应模块  lightReading = analogRead(lightSensorPin); //读取光敏电阻分压电路信号输出    if(irReading == HIGH && lightReading >= 880){ //如感应到人且亮度达到需照明程度    if (onOffState == 0) fadeUp(maxRVal, maxGVal, maxBVal);    //点亮小夜灯照明                              onOffState = 1;     //告知Arduino小夜灯被点亮了                                                 if (breatheOnOff == 1)ledBreathe();    } else {                                   //如未感应到人且亮度未达到需照明程度      if (onOffState == 1) fadeDown(0, 0, 0);                    //保持小夜灯熄灭                            onOffState = 0;     //告知Arduino小夜灯被熄灭了  }    //通过串口监视器实时输出各个传感器检测的数据结果  //可用于调试小夜灯工作参数使用  if(debugOn){    Serial.println("");    Serial.println("===========================");    Serial.print("irReading = "); Serial.println(irReading);    Serial.print("lightReading = "); Serial.println(lightReading);    Serial.println("===========================");    delay(50);  }} void fadeUp(int rTopVal, int gTopVal, int bTopVal){  while(ledR bBottomVal) {      ledB-=breathStep ;      analogWrite(bLedPin, ledB);    } else {      ledB = bBottomVal;      analogWrite(bLedPin, ledB);    }        delay(breathStepDelay);            if (debugOn){      Serial.println("================");       Serial.print("rVal = "); Serial.println(ledR);      Serial.print("gVal = "); Serial.println(ledG);        Serial.print("bVal = "); Serial.println(ledB);      Serial.println("================");            }  }} void ledBreathe(){  //亮度先降低  fadeDown(minRVal, minGVal, minBVal);   //亮度再提高  fadeUp(maxRVal, maxGVal, maxBVal);}

小夜灯控制程序-3

太极创客-环保小夜灯-示例程序-3 Arduino 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244  /* * TC-Light-fade-OnOff-Color-Change * 太极创客-环保小夜灯-示例程序-3 * by 太极创客 (2017-11-21) * www.taichi-maker.com * * 此示例程序为配合太极创客制作的 * 零基础入门学用ARDUINO教程-智能应用篇使用 * * 基本功能介绍: * 用户可通过传感器控制RGB-LED点亮和关闭 * 小夜灯配备人体红外感应传感器以及光敏电阻实现照明自动化 * 点亮和熄灭时产生渐明渐暗效果 * 点亮时色彩不断变化 * * 基本电路连接说明: * 共阴极RGB-LED引脚R 连接 Arduino控制器引脚6 * 共阴极RGB-LED引脚G 连接 Arduino控制器引脚5 * 共阴极RGB-LED引脚B 连接 Arduino控制器引脚3 * 红外人体感应模块信号输出引脚 连接 Arduino控制器引脚8 * 光敏电阻分压电路信号输出引脚 连接 Arduino控制器引脚A0 * * 如需获取太极创客-环保小夜灯的具体电路连接 * 请参见太极创客网站: www.taichi-maker.com *          */#define rLedPin 6 //RGB-LED引脚R#define gLedPin 5 //RGB-LED引脚G#define bLedPin 3 //RGB-LED引脚B#define irSensorPin 8 //红外人体感应模块信号输出#define lightSensorPin A0 //光敏电阻分压电路信号输出 int ledR  = 0; //R Led 亮度int ledG  = 0; //G Led 亮度int ledB  = 0; //B Led 亮度 bool irReading;   //红外人体感应模块输出int lightReading; //光敏电阻分压电路信号输出bool onOffState; //小夜灯开关状态 unsigned long previousIRMillis;    //上一次检查红外传感器的时间unsigned long previousLightMillis; //上一次检查光敏传感器的时间int irCheckInterval = 500;         //红外传感器检查时间间隔int lightCheckInterval = 1000;     //光敏传感器检查时间间隔 int colorIndex;             //颜色序列号int colorChangeDelay = 1;   //颜色改变速度控制变量(数值越大,颜色改变速度越慢)void setup() {  //设置引脚为相应工作模式  pinMode(rLedPin, OUTPUT); //pinMode(6, OUTPUT);  pinMode(gLedPin, OUTPUT);  pinMode(bLedPin, OUTPUT);  pinMode(irSensorPin, INPUT);    Serial.begin(9600);   Serial.println("Welcome to Taichi-Maker RGB Led Night-Light.");  Serial.println("System Start Sensor Check.");    irReading = digitalRead(irSensorPin);       //读取红外人体感应模块  lightReading = analogRead(lightSensorPin);  //读取光敏电阻分压电路信号输出    //通过串口监视器实时输出各个传感器检测的数据结果  //可用于调试小夜灯工作参数使用  Serial.println("");  Serial.println("======Checking Sensor.=====");  Serial.println("===========================");  Serial.print("irReading = "); Serial.println(irReading);  Serial.print("lightReading = "); Serial.println(lightReading);  Serial.println("===========================");  Serial.println("");  } void loop() {    unsigned long currentMillis = millis();   //millis函数可用来获取Arduino开机后运行的时间    irCheck(currentMillis);     //检查红外传感器时间(currentMillis为当前Arduino开机运行的时间)  lightCheck(currentMillis);  //检查光敏电阻时间(currentMillis为当前Arduino开机运行的时间)    if (irReading ==HIGH ) {    irCheckInterval = 30000;                 //感应到人时人体传感器检查时间间隔较长  } else {    irCheckInterval = 500;                   //未感应到人时人体传感器检查时间间隔较短  }    /*   * 以下语句将循环改变RGB-LED的颜色。   * 函数ledShowColor中共定义了约1536种颜色,   * 而每种颜色都被编上一个独立的序号,   * 且相邻两个编号色彩之间的色差极小。   * 于是RGB-LED在循环显示这些色彩时,   * 小夜灯将会产生逐渐颜色变化的效果。  */   if(irReading ==HIGH && lightReading>=880){   //如感应到人且亮度达到需照明程度        if (onOffState == 0) fadeOn();           //点亮小夜灯照明                                   onOffState = 1;         //检查颜色序号是否达到上限    if (colorIndex 1535) {   //如颜色序号达到上限          colorIndex = 0;                  //另颜色序号归零     }         ledShowColor(colorIndex);       } else {                                   //如未感应到人且亮度未达到需照明程度           if (onOffState == 1) fadeOff();          //保持小夜灯熄灭                            onOffState = 0;       }} void fadeOn(){  Serial.println("");  Serial.println("Fade ON");  int i;  while(i 0){    ledR--;    analogWrite (rLedPin, ledR);    Serial.print("ledR = ");Serial.println(ledR);  }  while(ledB > 0){    ledB--;    analogWrite (bLedPin, ledB);    Serial.print("ledB = ");Serial.println(ledB);  }  while(ledG > 0){    ledG--;    analogWrite (gLedPin, ledG);    Serial.print("ledG = ");Serial.println(ledG);    }  colorIndex = 0;  }  void ledShowColor(int ledColorIndex){   /*   * ledColorIndex参数为颜色序列号。   * 以下语句根据参数ledColorIndex让RGB-LED显示相应颜色。   * 从而产生小夜灯色彩渐变的效果。   * 您可以将程序上传并观察小夜灯在工作时候的串口监视器数据输出   * 从而找到小夜灯颜色变化的规律。  */    if (ledColorIndex >= 0 && ledColorIndex = 256 && ledColorIndex = 512 && ledColorIndex = 768 && ledColorIndex = 1024 && ledColorIndex = 1280 && ledColorIndex = irCheckInterval)) {  //如果时间间隔到达了                                                                                                   irReading = digitalRead(irSensorPin);       //读取红外人体感应模块        //通过串口监视器实时输出传感器检测的数据结果    //可用于调试小夜灯工作参数使用    Serial.println("");    Serial.println("=== Checking IR Sensor ====");    Serial.println("===========================");    Serial.print("irReading = "); Serial.println(irReading);    Serial.print("thisIRMillis = "); Serial.println(thisIRMillis);           Serial.print("previousIRMillis = "); Serial.println(previousIRMillis);           Serial.println("===========================");    Serial.println("");        // 每一次检查完传感器以后,都要将这一次检查传感器的时间更新给previousIRMillis。    // 这一个操作是通过将thisIRMillis存储的时间信息赋值给previousIRMillis完成的。    // 这样下次irCheck函数被调用时,previousIRMillis将保持为最近一次传感器检查时间。    previousIRMillis = thisIRMillis;            } } void lightCheck(unsigned long thisLightMillis) {    //检查是否到达时间间隔  if ((unsigned long)(thisLightMillis - previousLightMillis >= lightCheckInterval)) {  //如果时间间隔到达了                                                                                                             lightReading = analogRead(lightSensorPin);  //读取光敏电阻分压电路信号输出            //通过串口监视器实时输出各个传感器检测的数据结果    //可用于调试小夜灯工作参数使用    Serial.println("");    Serial.println("== Checking Light Sensor ==");    Serial.println("===========================");    Serial.print("lightReading = "); Serial.println(lightReading);    Serial.print("thisLightMillis = "); Serial.println(thisLightMillis);           Serial.print("previousLightMillis = "); Serial.println(previousLightMillis);           Serial.println("===========================");    Serial.println("");        previousLightMillis = thisLightMillis;  // 记录最新一次的传感器检查时间           }}



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有