久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2228|回復: 1
收起左側

寒假做的一套基于arduino的簡易智能家居 源程序

[復制鏈接]
ID:1033693 發表于 2022-6-17 09:20 | 顯示全部樓層 |閱讀模式
此項目沒有使用中斷,代碼可以運行

為了讀者有更好的體驗,筆者進行了詳細的注釋

創作不易,請讀者給個小心心吧

所有庫文件筆者已經打包請在上面的文件下載


2021 12  31
by-王思源

1898874c9adab358d29f8f8c7b4d7d3.jpg


6008c2622cee78fa090d130508de8ba.jpg


bc58021b7d176e4482eb80ee92086e8.jpg

Arduino源程序如下:
  1. #include "pitches.h"//調用蜂鳴器頭文件
  2. #include "dht11.h"//調用溫濕度頭文件
  3. #include "new.h" //調用頭文件
  4. #include "Wire.h"//調用總線文件
  5. #include "Servo.h"//調用伺服馬達文件
  6. #include "LiquidCrystal_I2C.h"//調用1602文件
  7. #define DHT11PIN A0 //定意溫濕度的I/O口是A0
  8. dht11 dht11; //初始化dhrll
  9. Servo myservo; //初始化伺服電機
  10. int ledpin = 3;
  11. int TrigPin = 4;   //定義超聲波的接口
  12. int EchoPin = 5;
  13. int tonepin = 6;
  14. int dianji = 7;
  15. int lighttrail = A1;
  16. int mx =A2;
  17. float distance;
  18. int swi = A4;
  19. int mxq;
  20. LiquidCrystal_I2C mylcd(0x27, 16, 2);//、、、、、、、、、、、、、、、用了scl和sda、、、、、、、、、0和1接口不能用、、、、、、、、、、、、、
  21. //初始化1602
  22. int pp;
  23. void tempearture(int temp) {
  24.   Serial.println(temp);
  25.   if (temp > 15) {
  26.     digitalWrite(dianji, LOW);
  27.     digitalWrite(ledpin, HIGH);
  28.     //    int length = sizeof(tune) / sizeof(tune[0]);//、、、、、、、、、、數組長度提取
  29.     //    for (int x = 0; x < length; x++) //循環音符的次數
  30.     //  {
  31.     //    tone(tonepin, tune[x]); //依次播放tune數組元素,即每個音符
  32.     //    delay(400 * duration[x]); //每個音符持續的時間,即節拍duration,400是調整時間的越大,曲子速度越慢,越小曲子速度越快
  33.     //    noTone(tonepin);//停止當前音符,進入下一音符
  34.     //  }
  35.     if (!temp) {
  36.       digitalWrite(dianji, LOW);
  37.     }
  38.   } else
  39.   {
  40.     digitalWrite(dianji, HIGH);
  41.   }
  42. }
  43. void dis(float distance,float mqx) {
  44.   Serial.print(distance);
  45.   Serial.print("m");
  46.   Serial.println();
  47.   if (distance < 0.5)
  48.   {
  49.    digitalWrite(ledpin, HIGH);
  50.     Serial.println("燈亮");
  51.     for (int thisNote = 0; thisNote < 8; thisNote++) {
  52.       int noteDuration = 1000 / noteDurations[thisNote];
  53.       tone(tonepin, tune[thisNote], noteDuration);
  54.       int pauseBetweenNotes = noteDuration * 1.30;
  55.       delay(pauseBetweenNotes);
  56.       noTone(17);
  57.     }
  58.   }
  59.     if (mqx >20)
  60.   {
  61.    digitalWrite(ledpin, HIGH);
  62.     Serial.println("燈亮");
  63.     for (int thisNote = 0; thisNote < 8; thisNote++) {
  64.       int noteDuration = 1000 / noteDurations[thisNote];
  65.       tone(tonepin, tune[thisNote], noteDuration);
  66.       int pauseBetweenNotes = noteDuration * 1.30;
  67.       delay(pauseBetweenNotes);
  68.       noTone(17);
  69.     }
  70.   }
  71.   else
  72.   {
  73.     digitalWrite(ledpin, LOW);
  74.     Serial.println("燈滅");
  75.   }
  76. }
  77. void tempss(int pp, int hump, float distance) {
  78.   mylcd.setCursor(0, 0);
  79.   mylcd.print("T :");
  80.   mylcd.setCursor(4, 0);
  81.   mylcd.print(pp);
  82.   mylcd.setCursor(0, 1);
  83.   mylcd.print("H :");
  84.   mylcd.setCursor(4, 1);
  85.   mylcd.print(hump);
  86.   mylcd.setCursor(7, 0);
  87.   mylcd.print("D :");
  88.   mylcd.setCursor(10, 0);
  89.   mylcd.print(distance);

  90. }
  91. void setup()                                      //建立函數
  92. {
  93.   mylcd.init();            //、、、、、、、、、、、、、、、、、、、、、、、初始化liquidcrytal_2c
  94.   mylcd.backlight();
  95.   myservo.attach(9);
  96.   pinMode(dianji, OUTPUT);
  97.   pinMode(ledpin, OUTPUT);
  98.   pinMode(TrigPin, OUTPUT);
  99.   pinMode(EchoPin, INPUT);
  100.   pinMode(mx, INPUT);
  101.   pinMode(swi,INPUT);
  102.   Serial.begin(9600);
  103.   Serial.println();
  104. }
  105. void loop()                   //、、、、、、、、、、、、、、、、、、、、、、、、主函數
  106. {
  107.   int cc = analogRead(swi);
  108.    int mxq = analogRead(mx);


  109.    pp= (swi*0.0048828125*100);  
  110.   Serial.println("lailia");
  111.   Serial.println(pp);
  112.   digitalWrite(TrigPin, LOW);
  113.   delayMicroseconds(2);
  114.   digitalWrite(TrigPin, HIGH);
  115.   delayMicroseconds(10);
  116.   digitalWrite(TrigPin, LOW);
  117.   distance = pulseIn(EchoPin, HIGH) / 58.00 / 100;//、、、、、、、、、、距離計算
  118.   Serial.println("\n");
  119.   dht11.read(DHT11PIN);    //、、、、、、、、、、、、、、、、、、、、、、讀取dth11的溫度以便于復賦值
  120.   Serial.print("濕度 (%): ");
  121.   Serial.println((float)dht11.humidity, 4);
  122.   Serial.print("溫度 (oC): ");
  123.   Serial.println((float)dht11.temperature, 4);
  124. //  int temp = (float)dht11.temperature;
  125.   int hump = (float)dht11.humidity;

  126.   tempearture(pp);   //、、、、、、、、、、、、、、、、、、、、、&#128073;溫度控制如果溫度過高會開啟溫度過高保護
  127.   tempss(pp, hump, distance); //、、、、、、、、、、、、、、、、、 &#128073;液晶屏顯示,船了三個參數,分別是溫度濕度還有距離
  128.   dis(distance,mxq);      //、、、、、、、、、、、、、、、、、、、、、&#128073;距離函數如果距離過高會開啟蜂鳴器

  129.   int  val = analogRead(lighttrail);            // reads the value of the potentiometer (value between 0 and 1023)
  130.   val = map(val, 0, 100, 100, 0);     // scale it for use with the servo (value between 0 and 180)
  131.   myservo.write(val);




  132.   delay(900);

  133. }
復制代碼
new.h
  1. double Fahrenheit(double celsius)
  2. {
  3.         return 1.8 * celsius + 32;
  4. }    //攝氏溫度度轉化為華氏溫度

  5. double Kelvin(double celsius)
  6. {
  7.         return celsius + 273.15;
  8. }     //攝氏溫度轉化為開氏溫度

  9. // 露點(點在此溫度時,空氣飽和并產生露珠)
  10. // 參考: http://wahiduddin.net/calc/density_algorithms.htm
  11. double dewPoint(double celsius, double humidity)
  12. {
  13.         double A0= 373.15/(273.15 + celsius);
  14.         double SUM = -7.90298 * (A0-1);
  15.         SUM += 5.02808 * log10(A0);
  16.         SUM += -1.3816e-7 * (pow(10, (11.344*(1-1/A0)))-1) ;
  17.         SUM += 8.1328e-3 * (pow(10,(-3.49149*(A0-1)))-1) ;
  18.         SUM += log10(1013.246);
  19.         double VP = pow(10, SUM-3) * humidity;
  20.         double T = log(VP/0.61078);   // temp var
  21.         return (241.88 * T) / (17.558-T);
  22. }

  23. // 快速計算露點,速度是5倍dewPoint()
  24. // 參考: http://en.wikipedia.org/wiki/Dew_point
  25. double dewPointFast(double celsius, double humidity)
  26. {
  27.         double a = 17.271;
  28.         double b = 237.7;
  29.         double temp = (a * celsius) / (b + celsius) + log(humidity/100);
  30.         double Td = (b * temp) / (a - temp);
  31.         return Td;
  32. }
復制代碼

pitches.h
  1. #define NOTE_B0  31
  2. #define NOTE_C1  33
  3. #define NOTE_CS1 35
  4. #define NOTE_D1  37
  5. #define NOTE_DS1 39
  6. #define NOTE_E1  41
  7. #define NOTE_F1  44
  8. #define NOTE_FS1 46
  9. #define NOTE_G1  49
  10. #define NOTE_GS1 52
  11. #define NOTE_A1  55
  12. #define NOTE_AS1 58
  13. #define NOTE_B1  62
  14. #define NOTE_C2  65
  15. #define NOTE_CS2 69
  16. #define NOTE_D2  73
  17. #define NOTE_DS2 78
  18. #define NOTE_E2  82
  19. #define NOTE_F2  87
  20. #define NOTE_FS2 93
  21. #define NOTE_G2  98
  22. #define NOTE_GS2 104
  23. #define NOTE_A2  110
  24. #define NOTE_AS2 117
  25. #define NOTE_B2  123
  26. #define NOTE_C3  131
  27. #define NOTE_CS3 139
  28. #define NOTE_D3  147
  29. #define NOTE_DS3 156
  30. #define NOTE_E3  165
  31. #define NOTE_F3  175
  32. #define NOTE_FS3 185
  33. #define NOTE_G3  196
  34. #define NOTE_GS3 208
  35. #define NOTE_A3  220
  36. #define NOTE_AS3 233
  37. #define NOTE_B3  247
  38. #define NOTE_C4  262
  39. #define NOTE_CS4 277
  40. #define NOTE_D4  294
  41. #define NOTE_DS4 311
  42. #define NOTE_E4  330
  43. #define NOTE_F4  349
  44. #define NOTE_FS4 370
  45. #define NOTE_G4  392
  46. #define NOTE_GS4 415
  47. #define NOTE_A4  440
  48. #define NOTE_AS4 466
  49. #define NOTE_B4  494
  50. #define NOTE_C5  523
  51. #define NOTE_CS5 554
  52. #define NOTE_D5  587
  53. #define NOTE_DS5 622
  54. #define NOTE_E5  659
  55. #define NOTE_F5  698
  56. #define NOTE_FS5 740
  57. #define NOTE_G5  784
  58. #define NOTE_GS5 831
  59. #define NOTE_A5  880
  60. #define NOTE_AS5 932
  61. #define NOTE_B5  988
  62. #define NOTE_C6  1047
  63. #define NOTE_CS6 1109
  64. #define NOTE_D6  1175
  65. #define NOTE_DS6 1245
  66. #define NOTE_E6  1319
  67. #define NOTE_F6  1397
  68. #define NOTE_FS6 1480
  69. #define NOTE_G6  1568
  70. #define NOTE_GS6 1661
  71. #define NOTE_A6  1760
  72. #define NOTE_AS6 1865
  73. #define NOTE_B6  1976
  74. #define NOTE_C7  2093
  75. #define NOTE_CS7 2217
  76. #define NOTE_D7  2349
  77. #define NOTE_DS7 2489
  78. #define NOTE_E7  2637
  79. #define NOTE_F7  2794
  80. #define NOTE_FS7 2960
  81. #define NOTE_G7  3136
  82. #define NOTE_GS7 3322
  83. #define NOTE_A7  3520
  84. #define NOTE_AS7 3729
  85. #define NOTE_B7  3951
  86. #define NOTE_C8  4186
  87. #define NOTE_CS8 4435
  88. #define NOTE_D8  4699
  89. #define NOTE_DS8 4978

  90. #define NOTE_D0 -1
  91. #define NOTE_D1 294
  92. #define NOTE_D2 330
  93. #define NOTE_D3 350
  94. #define NOTE_D4 393
  95. #define NOTE_D5 441
  96. #define NOTE_D6 495
  97. #define NOTE_D7 556

  98. #define NOTE_DL1 147
  99. #define NOTE_DL2 165
  100. #define NOTE_DL3 175
  101. #define NOTE_DL4 196
  102. #define NOTE_DL5 221
  103. #define NOTE_DL6 248
  104. #define NOTE_DL7 278

  105. #define NOTE_DH1 589
  106. #define NOTE_DH2 661
  107. #define NOTE_DH3 700
  108. #define NOTE_DH4 786
  109. #define NOTE_DH5 882
  110. #define NOTE_DH6 990
  111. #define NOTE_DH7 112

  112. #define WHOLE 1
  113. #define HALF 0.5
  114. #define QUARTER 0.25
  115. #define EIGHTH 0.25
  116. #define SIXTEENTH 0.625



  117. int melody[] = {
  118.   NOTE_C4, NOTE_G3, NOTE_GS3, NOTE_A3, NOTE_G3, 0, NOTE_B3, NOTE_DS8
  119. };
  120. int noteDurations[] = {
  121.   4, 8, 8, 4, 4, 4, 4, 4
  122. };
  123. int tune[] =
  124. {
  125.   NOTE_DH1, NOTE_D6, NOTE_D5, NOTE_D6, NOTE_D0,
  126.   NOTE_DH1, NOTE_D6, NOTE_D5, NOTE_DH1, NOTE_D6, NOTE_D0, NOTE_D6,
  127.   NOTE_D6, NOTE_D6, NOTE_D5, NOTE_D6, NOTE_D0, NOTE_D6,
  128.   NOTE_DH1, NOTE_D6, NOTE_D5, NOTE_DH1, NOTE_D6, NOTE_D0,

  129.   NOTE_D1, NOTE_D1, NOTE_D3,
  130.   NOTE_D1, NOTE_D1, NOTE_D3, NOTE_D0,
  131.   NOTE_D6, NOTE_D6, NOTE_D6, NOTE_D5, NOTE_D6,
  132.   NOTE_D5, NOTE_D1, NOTE_D3, NOTE_D0,
  133.   NOTE_DH1, NOTE_D6, NOTE_D6, NOTE_D5, NOTE_D6,
  134.   NOTE_D5, NOTE_D1, NOTE_D2, NOTE_D0,
  135.   NOTE_D7, NOTE_D7, NOTE_D5, NOTE_D3,
  136.   NOTE_D5,
  137.   NOTE_DH1, NOTE_D0, NOTE_D6, NOTE_D6, NOTE_D5, NOTE_D5, NOTE_D6, NOTE_D6,
  138.   NOTE_D0, NOTE_D5, NOTE_D1, NOTE_D3, NOTE_D0,
  139.   NOTE_DH1, NOTE_D0, NOTE_D6, NOTE_D6, NOTE_D5, NOTE_D5, NOTE_D6, NOTE_D6,
  140.   NOTE_D0, NOTE_D5, NOTE_D1, NOTE_D2, NOTE_D0,
  141.   NOTE_D3, NOTE_D3, NOTE_D1, NOTE_DL6,
  142.   NOTE_D1,
  143.   NOTE_D3, NOTE_D5, NOTE_D6, NOTE_D6,
  144.   NOTE_D3, NOTE_D5, NOTE_D6, NOTE_D6,
  145.   NOTE_DH1, NOTE_D0, NOTE_D7, NOTE_D5,
  146.   NOTE_D6,
  147. };

  148. //曲子的節拍,即音符持續時間
  149. float duration[] =
  150. {
  151.   1, 1, 0.5, 0.5, 1,
  152.   0.5, 0.5, 0.5, 0.5, 1, 0.5, 0.5,
  153.   0.5, 1, 0.5, 1, 0.5, 0.5,
  154.   0.5, 0.5, 0.5, 0.5, 1, 1,

  155.   1, 1, 1 + 1,
  156.   0.5, 1, 1 + 0.5, 1,
  157.   1, 1, 0.5, 0.5, 1,
  158.   0.5, 1, 1 + 0.5, 1,
  159.   0.5, 0.5, 0.5, 0.5, 1 + 1,
  160.   0.5, 1, 1 + 0.5, 1,
  161.   1 + 1, 0.5, 0.5, 1,
  162.   1 + 1 + 1 + 1,
  163.   0.5, 0.5, 0.5 + 0.25, 0.25, 0.5 + 0.25, 0.25, 0.5 + 0.25, 0.25,
  164.   0.5, 1, 0.5, 1, 1,
  165.   0.5, 0.5, 0.5 + 0.25, 0.25, 0.5 + 0.25, 0.25, 0.5 + 0.25, 0.25,
  166.   0.5, 1, 0.5, 1, 1,
  167.   1 + 1, 0.5, 0.5, 1,
  168.   1 + 1 + 1 + 1,
  169.   0.5, 1, 0.5, 1 + 1,
  170.   0.5, 1, 0.5, 1 + 1,
  171.   1 + 1, 0.5, 0.5, 1,
  172.   1 + 1 + 1 + 1
  173. };
復制代碼

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:1033693 發表于 2022-6-17 09:22 | 顯示全部樓層
避坑操作:
首先沒有中斷,就沒有優先級
優先級有問題,就會導致當蜂鳴器響起時,超聲波就會不工作
光感傳感器就不會工作,
溫濕度也會不工作
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美1—12sexvideos | 色偷偷人人澡人人爽人人模 | 亚洲精品一区二区三区中文字幕 | 国内久久精品 | 欧美一级欧美一级在线播放 | 日本午夜精品一区二区三区 | 欧美国产激情 | 交专区videossex农村 | 国产极品91| 国产原创在线观看 | 久久国产精品视频 | 羞羞在线观看视频 | 九色视频网站 | 国产精品a久久久久 | 日韩av黄色 | 懂色一区二区三区免费观看 | 欧美精品网 | 欧美激情一区二区 | 99只有精品 | 欧美日韩亚洲视频 | 蜜桃视频一区二区三区 | 精品一区二区三区免费视频 | 国产精品自产拍在线观看蜜 | 亚洲午夜小视频 | 亚洲成av| 拍真实国产伦偷精品 | 欧美色999| 在线观看中文字幕亚洲 | 一级免费在线视频 | 国产欧美精品一区二区色综合 | 精品欧美一区二区在线观看欧美熟 | 少妇一区在线观看 | 国产精品久久久久久久模特 | 免费看国产片在线观看 | 国产欧美性成人精品午夜 | 日韩在线一区二区 | 欧美一级二级视频 | 2021天天躁夜夜看 | 国产成人99久久亚洲综合精品 | 一区二区三区日韩 | 久久久久久久久久一区 |