這個(gè)是arduino綜合案例,希望有助于大家做畢設(shè),或者自己玩玩。
原名“溫控流量混合裝置” 作用:一個(gè)水管出熱水,一個(gè)水管出冷水,檢測(cè)混合之后的溫度和流量,混合之后出溫水。顯示目標(biāo)溫度和目標(biāo)流量,當(dāng)前溫度和當(dāng)前流量。
%ZZGEF[}Y%WO1_ONR5YI16V.png (181.8 KB, 下載次數(shù): 71)
下載附件
左邊是原理圖中的電位器可以調(diào)節(jié)1602的顯示
2018-5-25 05:54 上傳
//////////////////////////////////////////////可以忽略上面的內(nèi)容/////////////////////////////////
簡(jiǎn)化后:“溫控混合裝置”,供大家學(xué)習(xí) 簡(jiǎn)圖如下
0.png (45.9 KB, 下載次數(shù): 65)
下載附件
2018-5-25 16:02 上傳
主要所需材料:arduinoUno主板,lcd1602,4*4薄膜鍵盤,dht11溫度傳感,ULN2003(用于驅(qū)動(dòng)步進(jìn)電機(jī)),28BYJ-48步進(jìn)電機(jī) ArduinoUno上的A0到A5引腳就是14到19引腳。 原理圖和我的程序在引腳分配上稍有不同,請(qǐng)萬分注意。! 請(qǐng)自行按需分配引腳。 刪除代碼里面的沒用的代碼,程序看起來會(huì)更加清晰。 #include所包含的庫文件,自行百度解決,或咨詢找我要我也行。 建議每個(gè)都會(huì)使用了,再建立綜合項(xiàng)目
電路原理圖如下:
0.png (64.07 KB, 下載次數(shù): 72)
下載附件
2018-5-25 16:03 上傳
arduino Uno源程序如下:
- //時(shí)間:2018-5-25
- //地點(diǎn):貴州
- //作者:0721的
- //不懂的地方請(qǐng)?jiān)儐枺?25470791
- #include <LiquidCrystal.h>//包含驅(qū)動(dòng)LCD1602所需要的定義及函數(shù)
- #include "DHT.h"//包含溫度計(jì)所需的定義及函數(shù)
- #include <Keypad.h>//包含鍵盤所需的定義及函數(shù)
- #include <Stepper.h> //包含步進(jìn)電機(jī)所需的定義及函數(shù)
- ///////////////////////////////LCD1602部分//////////////////////////////////////////////
- const int rs = 13, rw = 12, en = 11, d4 = 10, d5 = 9, d6 = 8, d7 = 7; //定義驅(qū)動(dòng)LCD1602需要的引腳
- LiquidCrystal lcd(rs, rw, en, d4, d5, d6, d7); //聲明一個(gè)名字為lcd的1602對(duì)象,在以后用這個(gè)實(shí)例調(diào)用函數(shù)來顯示字符
- ///////////////////////////////DHT11溫度傳感器部分/////////////////////////////////////////
- // Uncomment whatever type you're using!
- #define DHTPIN 2 // 將引腳X指定為溫度計(jì)輸入口,此處指定為PIN2,即引腳2.
- #define DHTTYPE DHT11 // 定義溫度計(jì)型號(hào)為DHT11
- //#define DHTTYPE DHT22 // 取消定義溫度計(jì)型號(hào)為DHT 22 (AM2302), AM2321
- //#define DHTTYPE DHT21 // 取消定義溫度計(jì)型號(hào)為DHT 21 (AM2301)
- DHT dht(DHTPIN, DHTTYPE); //實(shí)例化一個(gè)DHT溫度計(jì),取名為dht
- //////////////////////////////////key按鍵部分///////////////////////////////////*/
- const byte ROWS = 4; //定義鍵盤為四行
- const byte COLS = 4; //定義鍵盤為四列
- char hexaKeys[ROWS][COLS] = {
- {'1', '2', '3', 'A'},
- {'4', '5', '6', 'B'},
- {'7', '8', '9', 'C'},
- {'*', '0', '#', 'D'}
- };
- byte rowPins[ROWS] = {6, 5, 4, 3}; //連接到行掃描的輸入輸出端口 //此處很有規(guī)律,請(qǐng)自行發(fā)現(xiàn)
- byte colPins[COLS] = {18, 1, 0, 19}; //連接到列掃描的輸入輸出端口
- Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);//創(chuàng)建一個(gè)鍵盤實(shí)例取名字為customKeypad
- /////////////////////////////////步進(jìn)電機(jī)部分////////////////////////////////////
- const int stepsPerRevolution = 48; //
- Stepper myStepper(stepsPerRevolution, 14, 16, 15, 17);
- /*/////////////////////////////////流量計(jì)部分////////////////////////////////////
- //F=8.1Q-3
- //Q=(F+3)/8.1 //流量計(jì)算公式
- #define Q1PIN 2 //定義第一個(gè)流量傳感器外部中斷引腳 UNO板子只有2、3兩個(gè)引腳可作為中斷
- #define Q2PIN 3 //定義第二個(gè)流量傳感器外部中斷引腳 UNO板子只有2、3兩個(gè)引腳可作為中斷
- volatile long Q1count =0;
- volatile long Q2count =0;
- ///////////////////////////////////////////////////////////////////////////////*/
- //////////////////////////////////初始化部分/////////////////////////////////////
- void setup() {
- dht.begin();//開始運(yùn)行溫度檢測(cè)程序
- // set up the LCD's number of columns and rows:
- lcd.begin(16, 2);//將lcd初始化為16列2行
- // Print a message to the LCD.
- lcd.print("Welcome to use ");//初始化歡迎界面
- lcd.setCursor(0,1);
- lcd.print(" ^_^ ");
- delay(3000);//延時(shí)顯示時(shí)間
- myStepper.setSpeed(60);//設(shè)置步進(jìn)速度
- //pinMode(Q1PIN,INPUT);
- //pinMode(Q2PIN,INPUT);
- //attachInterrupt(0,Q1INT,FALLING); //定義下降沿中斷端口及要執(zhí)行的函數(shù) 0對(duì)應(yīng)引腳2
- //attachInterrupt(1,Q2INT,FALLING); //定義下降沿中斷端口及要執(zhí)行的函數(shù) 1對(duì)應(yīng)引腳3
- }
- /////////////////////////////////初始化部分結(jié)束/////////////////////////////////
- /////////////////////////////////程序循環(huán)部分///////////////////////////////////
- void loop() {
- int trgT = displayT();
- int trgQ = displayQ();
- int nowT, nowQ;
- displayQT(trgT, trgQ, nowT, nowQ);
- while (1) {
- float h = dht.readHumidity();//濕度讀取,并不影響我們仿真
- float t = dht.readTemperature();//攝氏度值
- displayQT(trgT, trgQ, (int)t, trgQ);
- if (trgT < (int)t) {
- myStepper.step(-stepsPerRevolution *5);
- }
- else {
- myStepper.step(stepsPerRevolution*5);
- }
- }
- /*/讀取溫度計(jì)的攝氏溫度代碼如下
- float h = dht.readHumidity();//濕度讀取,并不影響我們仿真
- // Read temperature as Celsius (the default)
- float t = dht.readTemperature();//攝氏度值
- // Read temperature as Fahrenheit (isFahrenheit = true)
- float f = dht.readTemperature(true);//攝氏度轉(zhuǎn)華氏度值
- // 檢查溫度傳感器是否工作正常
- if (isnan(h) || isnan(t) || isnan(f)) {
- Serial.println("讀取溫度傳感器失!");
- return;
- }*/
- /*
- //讀取流量傳感器代碼如下
- //attachInterrupt(0,Q1INT,FALLING); //定義下降沿中斷端口及要執(zhí)行的函數(shù) 0對(duì)應(yīng)引腳2
- //attachInterrupt(1,Q2INT,FALLING); //定義下降沿中斷端口及要執(zhí)行的函數(shù) 1對(duì)應(yīng)引腳3
- delay(1000);
- //detachInterrupt(0);
- //detachInterrupt(1);
- delay(100);
- //int Qall = GetQall();
- //lcd顯示溫度流量代碼如下
- lcd.setCursor(0, 1);//設(shè)置顯示器顯示坐標(biāo)
- // print the number of seconds since reset:
- lcd.setCursor(0, 0);
- lcd.print("Q Of Flow(Q)");//在lcd第一行顯示"quantityOfFlow(Q)"表示流量
- lcd.print(Qall, DEC);
- lcd.setCursor(0, 1);
- lcd.print("Temperature(C)");//在lcd第二行顯示"Temperature(C)"表示當(dāng)前溫度
- lcd.print(t, DEC); //顯示溫度變量,后面的DEC表示十進(jìn)制(可填寫B(tài)IN表示二進(jìn)制,DEC表示十進(jìn)制,OTC表示8進(jìn)制,HEX表示十六進(jìn)制)
- char customKey = customKeypad.getKey();//讀取鍵盤值
- myStepper.step(20);//步進(jìn)電機(jī)運(yùn)動(dòng)
- */
- }
- void displayQT(int trgT, int trgQ, int nowT, int nowQ) {
- lcd.clear();
- lcd.setCursor(0, 0);//設(shè)置顯示位置為0列0行
- lcd.print("trgT:"); lcd.print(trgT); lcd.setCursor(8, 0); lcd.print("nowT:"); lcd.print(nowT); //其中設(shè)置顯示位置為8列0行
- lcd.setCursor(0, 1);
- lcd.print("trgQ:"); lcd.print(trgQ); lcd.setCursor(8, 1); lcd.print("nowQ:"); lcd.print(nowQ); //其中設(shè)置顯示位置為8列1行
- }
- int displayQ() {
- lcd.setCursor(0, 1);
- lcd.print("Q Of Flow:");
- char customKey = ' ';
- int data1;
- int data;
- int keycount = 0;
- while (keycount != 2) { //進(jìn)入死循環(huán),等待按兩次數(shù)字鍵
- customKey = customKeypad.getKey();
- switch (customKey) {
- case '0': data = 0; keycount++;
- break;
- case '1': data = 1; keycount++;
- break;
- case '2': data = 2; keycount++;
- break;
- case '3': data = 3; keycount++;
- break;
- case '4': data = 4; keycount++;
- break;
- case '5': data = 5; keycount++;
- break;
- case '6': data = 6; keycount++;
- break;
- case '7': data = 7; keycount++;
- break;
- case '8': data = 8; keycount++;
- break;
- case '9': data = 9; keycount++;
- break;
- default:
- break;
- }
- customKey = ' ';
- if (keycount == 1)data1 = data;
- if (keycount == 2)data1 = data1 * 10 + data;
- }
- lcd.print(data1, DEC);
- return data1; //按鍵按兩次數(shù)字鍵,返回一個(gè)兩位數(shù)
- }
- int displayT() {
- lcd.clear(); //比displayQ多了這個(gè)clesr(),用于清除屏幕,
- lcd.setCursor(0, 0);
- lcd.print("temperature:");
- char customKey = ' ';
- int data1;
- int data;
- int keycount = 0;
- while (keycount != 2) { //進(jìn)入死循環(huán),等待按兩次數(shù)字鍵
- customKey = customKeypad.getKey();
- switch (customKey) {
- case '0': data = 0; keycount++;
- break;
- case '1': data = 1; keycount++;
- break;
- case '2': data = 2; keycount++;
- break;
- case '3': data = 3; keycount++;
- break;
- case '4': data = 4; keycount++;
- break;
- case '5': data = 5; keycount++;
- break;
- case '6': data = 6; keycount++;
- break;
- case '7': data = 7; keycount++;
- break;
- case '8': data = 8; keycount++;
- break;
- case '9': data = 9; keycount++;
- break;
- default:
- break;
- }
- customKey = ' ';
- if (keycount == 1)data1 = data;
- if (keycount == 2)data1 = data1 * 10 + data;
- }
- lcd.print(data1, DEC);
- return data1; //按鍵按兩次數(shù)字鍵,返回一個(gè)兩位數(shù)
- }
復(fù)制代碼
0.png (40.6 KB, 下載次數(shù): 68)
下載附件
2018-5-25 16:03 上傳
所有資料51hei提供下載:
分享并進(jìn)步.zip
(193.6 KB, 下載次數(shù): 30)
2018-5-25 06:00 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|