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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 10469|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

自制基于Arduino移動式城市環(huán)境信息采集器

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:113207 發(fā)表于 2016-4-10 00:41 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式

制作靈感來源于一個叫做 urban feeds 的項目。儀器能夠采集:

  • 溫度
  • 濕度
  • CO2濃度
  • O3濃度
  • 光照強(qiáng)度
  • 人流量
  • 大于1微米空氣懸浮粒子
  • 大于2.5微米空氣懸浮粒子
  • 日期時間
  • 位置信息
采用SD卡存儲數(shù)據(jù),鋰電池供電,外觀如圖:

全部配件包括:

  • 密封盒 1個 115×90×55
  • arduino UNO核心板 1塊
  • SD卡模塊1個及SD卡1張(容量不限,但由于FAT16文件分區(qū)格式的限制單個分區(qū)應(yīng)小于2G)
  • SHT10溫濕度傳感器 1個
  • BH1750FVI光照傳感器 1個
  • MG811二氧化碳(CO2)傳感器(無需底板) 1個
  • MQ131臭氧(O3)傳感器(無需底板) 1個
  • 七星座 2個
  • DSM501A粉塵傳感器 1個
  • SIRF II GPS模塊 1個
  • HC-SR501 人體紅外感應(yīng)模塊 1個
  • 0.5A 單鋰電池充電、升壓板(保護(hù)+充電+升壓+充電指示)  1塊
  • 606168P 聚合物鋰電池 3.7V 2800mAH 1塊
  • CA3140 阻抗變換 1個
  • 二極管1N4007 1個
  • 3mm 發(fā)光二極管LED 綠(顏色隨意) 1個
  • 電容 10nF(104貼片) 1個
  • 電阻 220 1個、10K(104貼片) 1個、22K 1個、10K 2個、1K 1個
  • 雙面洞洞板 2×8cm 1塊
  • 單排針 間距2.54mm 高11mm和高17mm 若干
  • 彩色杜邦線建議最短20cm 若干
  • KN3-3 撥動開關(guān)(六腳) 1個
  • M3螺母 若干
  • 6+12 M3銅柱子 若干
  • M3螺絲 包括10mm和6mm(非必需) 若干
  • M3空心銅柱(非必需) 若干


電路部分:

  • SD卡接法請參考:arduino學(xué)習(xí)筆記18 - SD卡讀寫實驗
  • SHT10 data腳接D8,clock腳接D9
  • BH1750FVI 是I2C協(xié)議,參見:arduino學(xué)習(xí)筆記27 - DS1307 RTC時鐘芯片與DS18B20數(shù)字溫度傳感器實驗中DS1307 與UNO板的接法
  • MG811二氧化碳傳感器阻抗變換電路如圖,接A3:
  • MQ131臭氧傳感器輔助電路如圖,接A2:
  • DSM501A粉塵傳感器接線如圖,接輸出1接D7,輸出2接D6:
  • SIRF II GPS模塊TX接D0,RX接D1
  • HC-SR501 人體紅外感應(yīng)模塊輸出接A1
  • 發(fā)光二極管串聯(lián)220歐姆電阻接在電源地和D2之間
  • 鋰電池充電、升壓板與鋰電池接法按板子說明連接
  • 六角撥動開關(guān)一組控制儀器電源開關(guān),一組控制鋰電池充電開關(guān),兩組控制狀態(tài)互斥如示意圖:
  • 電源供電從鋰電池充電、升壓板升壓輸出端+5v經(jīng)撥動開關(guān)儀器電源一組連接到UNO Vin腳;電池充電從UNO +5v輸出經(jīng)撥動開關(guān)儀器充電一組接到鋰電池充電、升壓板充電輸入端
  • 從鋰電池充電、升壓板充電輸入端引出線到A0并為A0設(shè)置10K下拉電阻
  • 所有傳感器(除SD卡、溫濕度)的+5v輸入接UNO Vin腳,SD卡和溫濕度傳感器接UNO +5v輸出腳;所有傳感器的GND和鋰電池充電、升壓板的充電輸入、+5V升壓輸出的GND接UNO GND腳


儀器組裝:


DSM501A粉塵傳感器 需垂直安裝
儀器內(nèi)部:



程序代碼:


  1.     //davidce 20111211

  2.     // Include
  3.     #include
  4.     #include
  5.     #include

  6.     // Digital pin
  7.     // SHT1x
  8.     #define ShtDataPin  8  //data
  9.     #define ShtClockPin 9  //clock
  10.     SHT1x sht1x(ShtDataPin, ShtClockPin);
  11.     // system light
  12.     #define systemLightPin 2
  13.     //DSM501A DUST
  14.     #define DSMPin2_5  6
  15.     #define DSMPin1_0  7
  16.     //SD card
  17.     File myFile;
  18.     #define SD_CSPin  10
  19.     char filename[] = "result.txt";
  20.     String order= "";
  21.     //GPS
  22.     #define rxPin 0                    // RX PIN
  23.     #define txPin 1                    // TX TX

  24.     // Analog pin
  25.     const int powerInPin = A0;    // check power state for the bettery charge
  26.     const int infrRayPin = A1;    //infrared ray
  27.     const int o3Pin = A2;          //MQ131
  28.     const int co2Pin = A3;          //MQ811

  29.     // Variable
  30.     boolean inCharge = false;      //bettery charging mark
  31.     const unsigned long warmTime = 60000;     //system warmming 60000 ms
  32.     const unsigned long scanTime = 0;     //get data fre scanTime = scanTime + flashTime
  33.     const unsigned long flashTime = 250;  
  34.     unsigned long previousMillis = 0;        //前一次判斷時間點
  35.     unsigned long partMillis=0;              //到溢出時計算的時間
  36.     const unsigned long sectev = 30;           // 時間間隔(秒)
  37.     const unsigned long interval = 30000;           // 時間間隔(毫秒) = sectev * 1000
  38.     const unsigned long mintev = 30000000; // 時間間隔(微秒) =interval * 1000
  39.     //BH1750 IIC Mode
  40.     const int BH1750address = 0x23; //setting i2c address
  41.     byte buff[2];
  42.     //GPS
  43.     int byteGPS = -1;
  44.     char linea[300] = "";
  45.     char comandoGPR[7] = "$GPRMC";
  46.     int cont=0;
  47.     int bien=0;
  48.     int conta=0;
  49.     int indices[13];

  50.     void setup() {
  51.       if(!SD.begin(SD_CSPin))
  52.       {
  53.         return;
  54.       }
  55.       // read the value from the power
  56.       int powerValue = analogRead(powerInPin); // variable to store the value coming from the power
  57.       if(powerValue>1000)
  58.       {
  59.         inCharge=true;
  60.         Serial.begin(4800);  //port speed for GPS
  61.       }
  62.       else
  63.       {
  64.         //check if the log file exists and add name of items to the new file
  65.         if (!SD.exists(filename))
  66.         {
  67.           myFile = SD.open(filename, FILE_WRITE);
  68.           if (myFile)
  69.           {
  70.             myFile.print("date_UTC");
  71.             myFile.print(9,BYTE);
  72.             myFile.print("time_UTC");
  73.             myFile.print(9,BYTE);
  74.             myFile.print("lat");
  75.             myFile.print(9,BYTE);
  76.             myFile.print("lon");
  77.             myFile.print(9,BYTE);
  78.             myFile.print("temp_C");
  79.             myFile.print(9,BYTE);
  80.             myFile.print("hum_PER");
  81.             myFile.print(9,BYTE);
  82.             myFile.print("pcs_1");
  83.             myFile.print(9,BYTE);
  84.             myFile.print("pcs_2_5");
  85.             myFile.print(9,BYTE);
  86.             myFile.print("peop_tra");
  87.             myFile.print(9,BYTE);
  88.             myFile.print("O3");
  89.             myFile.print(9,BYTE);
  90.             myFile.print("CO2");
  91.             myFile.print(9,BYTE);
  92.             myFile.println("light_lx");
  93.             myFile.close();
  94.           }
  95.         }
  96.         for (int i=0;i<300;i++)
  97.         {       // Initialize a buffer for received data
  98.           linea[i]=' ';
  99.         }
  100.         pinMode(systemLightPin, OUTPUT);  
  101.         pinMode(DSMPin2_5, INPUT);
  102.         pinMode(DSMPin1_0, INPUT);
  103.         pinMode(rxPin, INPUT);
  104.         pinMode(txPin, OUTPUT);
  105.         Wire.begin();
  106.         Serial.begin(4800);  //port speed for transform
  107.         digitalWrite(systemLightPin, HIGH);   
  108.         delay(warmTime);
  109.       }
  110.     }

  111.     void loop(){
  112.       if(!inCharge)                  // work state
  113.       {
  114.         float temp_c =sht1x.readTemperatureC();
  115.         float humidity = sht1x.readHumidity();

  116.         unsigned long currentMillis;
  117.         boolean goloop=true;
  118.         partMillis=0;
  119.         unsigned long duration1_0=0;
  120.         unsigned long duration2_5=0;
  121.         long temp1_0=0;
  122.         long temp2_5=0;
  123.         unsigned long rayMark=0;        //人流量計數(shù)
  124.         double rayFreq = 0.0;        //人流量頻率

  125.         while(goloop)      //loop
  126.         {
  127.           currentMillis = micros();
  128.           if(currentMillis<previousmillis)
  129.           {
  130.             partMillis = 4294967295 -  previousMillis +1;
  131.             previousMillis = 0;  
  132.           }
  133.           if(currentMillis - previousMillis - partMillis < mintev)
  134.           {
  135.             //1.0
  136.             if(temp1_0==0)
  137.             {
  138.               temp1_0=-1;
  139.               temp1_0=pulseIn(DSMPin1_0, LOW);
  140.             }
  141.             if(temp1_0>0)
  142.             {
  143.               duration1_0 =duration1_0 + temp1_0;
  144.               temp1_0=0;
  145.             }
  146.             //2.5
  147.             if(temp2_5==0)
  148.             {
  149.               temp2_5=-1;
  150.               temp2_5=pulseIn(DSMPin2_5, LOW);
  151.             }
  152.             if(temp2_5>0)
  153.             {
  154.               duration2_5 =duration2_5 + temp2_5;
  155.               temp2_5=0;
  156.             }
  157.           }
  158.           else
  159.           {
  160.             goloop=false;
  161.             previousMillis=currentMillis;
  162.           }
  163.           //human transform
  164.           int rayState = analogRead(infrRayPin);
  165.           if(rayState>500)
  166.           {
  167.             rayMark = rayMark + 1;
  168.           }
  169.         }
  170.         double per =double(duration1_0)/double(interval);// had multiply 1000
  171.         int pcs1_0 = -1;
  172.         pcs1_0 =  per * 50.0;
  173.         per =double(duration2_5)/double(interval);// had multiply 1000
  174.         int pcs2_5 = -1;
  175.         pcs2_5 =  per * 50.0;
  176.         rayFreq = double(rayMark) /double(sectev);

  177.         // light
  178.         uint16_t lightval=0;
  179.         BH1750_Init(BH1750address);
  180.         delay(200);
  181.         if(2==BH1750_Read(BH1750address))
  182.         {
  183.           lightval=((buff[0]<<8)|buff[1])/1.2;
  184.         }

  185.         //MQ131
  186.         int O3v=analogRead(o3Pin);
  187.         float O3ppb=float(O3v) * 0.0049;    //not realy value
  188.         float O3mg_m3 = O3ppb * 48 / 22.4 / 1000;  //need ajaust
  189.         //MG811
  190.         int CO2v=analogRead(co2Pin);
  191.         float CO2ppb=float(CO2v) * 0.0049;    //not realy value
  192.       
  193.         //GPS
  194.         String datestr = "";    //date UTC (ddmmyy)
  195.         String timestr = "";    //time UTC (hhmmss.sss)
  196.         String latstr = "";    //Latitude (ddmm.mmmm)
  197.         String lonstr = "";    //Longitude (dddmm.mmmm)
  198.         boolean isGPSOK = false;
  199.         bien=0;
  200.         while(bien!=6)
  201.         {
  202.           byteGPS=Serial.read();
  203.           if(byteGPS == -1)
  204.           {
  205.             delay(100);
  206.           }
  207.           else
  208.           {
  209.             linea[conta]=byteGPS;        // If there is serial port data, it is put in the buffer
  210.             conta++;
  211.             if(byteGPS==13)
  212.             {
  213.               cont=0;
  214.               bien=0;
  215.               for (int i=1;i<7;i++)
  216.               {     // Verifies if the received command starts with $GPRMC
  217.                 if (linea[i]==comandoGPR[i-1])
  218.                 {
  219.                   bien++;
  220.                 }
  221.               }
  222.               if(bien==6)  // If yes, continue and process the data
  223.               {
  224.                 for (int i=0;i<300;i++)
  225.                 {
  226.                   if (linea[i]==',')
  227.                   {    // check for the position of the  "," separator
  228.                     indices[cont]=i;
  229.                     cont++;
  230.                   }
  231.                   if (linea[i]=='*')
  232.                   {    // ... and the "*"
  233.                     indices[12]=i;
  234.                     cont++;
  235.                   }
  236.                 }
  237.                 String dataString;
  238.                 int outindex;
  239.                 outindex=1;
  240.                 for (int j=indices[outindex];j<(indices[outindex+1]-1);j++)
  241.                 {
  242.                   if(linea[j+1]=='A')
  243.                   {
  244.                     isGPSOK = true;
  245.                   }
  246.                 }
  247.                 outindex=8;  //Date UTC (ddmmyy)
  248.                 dataString="";
  249.                 for (int j=indices[outindex];j<(indices[outindex+1]-1);j++)
  250.                 {
  251.                   dataString = dataString + linea[j+1];
  252.                 }
  253.                 datestr=dataString;
  254.                 outindex=0;  //time UTC (hhmmss.sss)
  255.                 dataString="";
  256.                 for (int j=indices[outindex];j<(indices[outindex+1]-1);j++)
  257.                 {
  258.                   dataString = dataString + linea[j+1];
  259.                 }
  260.                 timestr=dataString;
  261.                 outindex=2;  //Latitude (ddmm.mmmm)
  262.                 dataString="";
  263.                 for (int j=indices[outindex];j<(indices[outindex+1]-1);j++)
  264.                 {
  265.                   dataString = dataString + linea[j+1];
  266.                 }
  267.                 latstr=dataString;
  268.                 outindex=4;  //Longitude (dddmm.mmmm)
  269.                 dataString="";
  270.                 for (int j=indices[outindex];j<(indices[outindex+1]-1);j++)
  271.                 {
  272.                   dataString = dataString + linea[j+1];
  273.                 }
  274.                 lonstr=dataString;
  275.               }
  276.               // Reset the buffer
  277.               conta=0;                    
  278.               for (int i=0;i<300;i++)
  279.               {   
  280.                 linea[i]=' ';            
  281.               }
  282.             }
  283.           }
  284.         }

  285.         //output result
  286.         Serial.print(datestr);
  287.         Serial.print(9,BYTE);
  288.         Serial.print(timestr);
  289.         Serial.print(9,BYTE);
  290.         Serial.print(latstr);
  291.         Serial.print(9,BYTE);
  292.         Serial.print(lonstr);
  293.         Serial.print(9,BYTE);
  294.         Serial.print(temp_c);
  295.         Serial.print(9,BYTE);
  296.         Serial.print(humidity);
  297.         Serial.print(9,BYTE);
  298.         Serial.print(pcs1_0);
  299.         Serial.print(9,BYTE);
  300.         Serial.print(pcs2_5);
  301.         Serial.print(9,BYTE);
  302.         Serial.print(rayFreq);
  303.         Serial.print(9,BYTE);
  304.         Serial.print(O3ppb);
  305.         Serial.print(9,BYTE);
  306.         Serial.print(CO2ppb);
  307.         Serial.print(9,BYTE);
  308.         Serial.println(lightval,DEC);

  309.         //writer the result to SD card
  310.         myFile = SD.open(filename, FILE_WRITE);
  311.         if (myFile)
  312.         {
  313.           // to sd file
  314.           myFile.print(datestr);
  315.           myFile.print(9,BYTE);
  316.           myFile.print(timestr);
  317.           myFile.print(9,BYTE);
  318.           myFile.print(latstr);
  319.           myFile.print(9,BYTE);
  320.           myFile.print(lonstr);
  321.           myFile.print(9,BYTE);
  322.           myFile.print(temp_c);
  323.           myFile.print(9,BYTE);
  324.           myFile.print(humidity);
  325.           myFile.print(9,BYTE);
  326.           myFile.print(pcs1_0);
  327.           myFile.print(9,BYTE);
  328.           myFile.print(pcs2_5);
  329.           myFile.print(9,BYTE);
  330.           myFile.print(rayFreq);
  331.           myFile.print(9,BYTE);
  332.           myFile.print(O3ppb);
  333.           myFile.print(9,BYTE);
  334.           myFile.print(CO2ppb);
  335.           myFile.print(9,BYTE);
  336.           myFile.println(lightval,DEC);
  337.           myFile.close();

  338.           //flash the light
  339.           if(isGPSOK)
  340.           {
  341.             digitalWrite(systemLightPin, HIGH);
  342.             delay(flashTime);
  343.             digitalWrite(systemLightPin, LOW);
  344.           }
  345.           else
  346.           {
  347.             digitalWrite(systemLightPin, LOW);
  348.             delay(flashTime);
  349.             digitalWrite(systemLightPin, HIGH);
  350.           }
  351.         }
  352.         delay(scanTime);
  353.       }
  354.       else               //bettery charging and data translation
  355.       {
  356.         while(Serial.available() > 0)
  357.         {
  358.           int incomingByte = Serial.read();
  359.           if(incomingByte==10)    //order end
  360.           {
  361.             if(order == "list")
  362.             {
  363.               myFile = SD.open(filename);
  364.               if (myFile)
  365.               {
  366.                 while (myFile.available())
  367.                 {
  368.                   Serial.write(myFile.read());
  369.                 }
  370.                 myFile.close();
  371.               }
  372.               else
  373.               {
  374.                 Serial.println("open file failure.");
  375.               }
  376.             }
  377.             else if(order.length()>0)
  378.             {
  379.               Serial.println("The available command is:");
  380.               Serial.println("list");
  381.             }
  382.             //reset order
  383.             order="";
  384.           }
  385.           else
  386.           {
  387.             if(incomingByte!=13)
  388.             {
  389.               order = order + char(incomingByte);
  390.             }
  391.           }
  392.         }
  393.       }
  394.     }

  395.     int BH1750_Read(int address)
  396.     {
  397.       int i=0;
  398.       Wire.beginTransmission(address);
  399.       Wire.requestFrom(address, 2);
  400.       while(Wire.available())
  401.       {
  402.         buff[i] = Wire.receive();  // receive one byte
  403.         i++;
  404.       }
  405.       Wire.endTransmission();  
  406.       return i;
  407.     }
  408.     void BH1750_Init(int address)
  409.     {
  410.       Wire.beginTransmission(address);
  411.       Wire.send(0x10);//1lx reolution 120ms
  412.       Wire.endTransmission();
  413.     }
復(fù)制代碼







    代碼說明:
  • 傳感器需要預(yù)熱時間,在變量warmTime 中設(shè)置,這里設(shè)置為60秒
  • 儀器根據(jù)inCharge 變量判斷系統(tǒng)處于采集狀態(tài)或充電狀態(tài),在采集狀態(tài)時如插上usb可通過arduino IDE的串口監(jiān)視實現(xiàn)數(shù)據(jù)顯示;儀器通過arduino的usb口充電,在充電的同時可通過arduino IDE的串口監(jiān)視實現(xiàn)交互,如輸入list命令可列出SD卡存儲的數(shù)據(jù)
  • DSM501A灰塵傳感器有兩路輸出分別對應(yīng)不同的灰塵粒徑檢出量,檢測到灰塵是在輸出口產(chǎn)生時間不等的低脈沖,通過計算30秒內(nèi)的低脈沖率和對于關(guān)系得到灰塵粒子量(請參考DSM501A datasheet),程序中通過micros()函數(shù)提供計時,micros()每70分鐘左右會歸零,通過 4294967295 -  previousMillis +1 得出歸零前的計數(shù)加到歸零后的計數(shù)上實現(xiàn)連續(xù)計數(shù)
  • 程序通過pulseIn()返回低脈沖時間,雖然pulseIn()函數(shù)可以設(shè)置超時(默認(rèn)1秒)但并不產(chǎn)生中斷,代碼中通過輪詢pulseIn()的返回變量的值判讀pulseIn()是否完成讀取
  • 人體紅外線模塊的脈沖電平是3.3v,通過模擬讀取時設(shè)置讀數(shù)大于500為有輸出
  • 當(dāng)GPS模塊可靠定位時系統(tǒng)狀態(tài)燈常滅,采集數(shù)據(jù)時亮250ms;GPS不可靠定位時系統(tǒng)狀態(tài)燈常亮,采集數(shù)據(jù)時滅250ms,GPS上集成電池,定位可靠與非都有日期時間輸出(UTC時間,中國時區(qū) +8小時)
  • BH1750光照傳感器在太陽光直接照射的情況下有可能爆表(輸出為0),建議避免強(qiáng)光直射


關(guān)于傳感器標(biāo)定:
每個傳感器在出廠后的性能是不同的,在實際的應(yīng)用中需要進(jìn)行標(biāo)定。儀器中需要標(biāo)定的傳感器是MG811二氧化碳、MQ131臭氧和DSM501A灰塵傳感器,其它的傳感器是數(shù)字輸出,在出廠前經(jīng)過標(biāo)定。標(biāo)定方法參考:

  • MG811二氧化碳標(biāo)定可參考: 中的方法,另外二氧化碳是溫室氣體,特性穩(wěn)定,所以在全球很長時間都是均勻分布在同一水平,全球二氧化碳實時濃度見,可以參考此網(wǎng)站上的值作為標(biāo)定濃度之一,同時呼吁大家節(jié)能減排,減少溫室氣體排放
  • MQ131臭氧傳感器標(biāo)定需要在標(biāo)準(zhǔn)條件50ppb濃度臭氧下進(jìn)行,請參考datasheet中說明
  • DSM501A灰塵傳感器標(biāo)定也可參考datasheet中的說明,需要注意的是DSM501A灰塵傳感器測量粒子濃度與PM2.5、PM10和TSP(PM100)的檢測原理和概念不同,不可混淆,只可做參考
    在儀器中以上傳感器均未做標(biāo)定,MQ131、MG811的輸出值為對應(yīng)的電壓值


數(shù)據(jù)采集與展示:
固定采集:

  • 溫濕度曲線:
  • 灰塵粒子曲線:
  • 氣體濃度曲線:


移動采集:

  • 采集路線:
  • 溫度分布:
  • 濕度分布:
  • CO2分布:
  • 1微米以上粒子:


圖中紅色代表高值,藍(lán)色代表低值。


下一步工作:
MQ系列傳感器輔助電路類似,儀器只需更換傳感器探頭和標(biāo)定可實現(xiàn)其它氣體測量
由于MQ131和MG811屬于加熱型傳感器耗電量大,2800mAh的鋰電池只能連續(xù)工作3.5小時左右,同時二氧化碳和臭氧氣體不適合移動觀測,下一步打算將兩種氣體傳感器設(shè)置在固定監(jiān)測儀器上,在留出的面板位置上安裝1602液晶顯示,儀器同時實現(xiàn)便攜式GPS功能。

致謝:
儀器在制作過程中得到論壇和Arduino 與 ADK 熱心網(wǎng)友的大力幫助,他們早出晚歸,談天論地,不分主題,有問必答,暢所欲言,謝謝大家!!


風(fēng)塵檢測傳感器相關(guān)代碼:



  1.     while(goloop)      //loop
  2.     {
  3.     currentMillis = micros();
  4.     if(currentMillis<previousmillis)
  5.     {
  6.     partMillis = 4294967295 -  previousMillis +1;
  7.     previousMillis = 0;  
  8.     }
  9.     if(currentMillis - previousMillis - partMillis < mintev)
  10.     {
  11.     //1.0
  12.     if(temp1_0==0)
  13.     {
  14.     temp1_0=-1;
  15.     temp1_0=pulseIn(DSMPin1_0, LOW);
  16.     }
  17.     if(temp1_0>0)
  18.     {
  19.     duration1_0 =duration1_0 + temp1_0;
  20.     temp1_0=0;
  21.     }
  22.     //2.5
  23.     if(temp2_5==0)
  24.     {
  25.     temp2_5=-1;
  26.     temp2_5=pulseIn(DSMPin2_5, LOW);
  27.     }
  28.     if(temp2_5>0)
  29.     {
  30.     duration2_5 =duration2_5 + temp2_5;
  31.     temp2_5=0;
  32.     }
  33.     }
  34.     else
  35.     {
  36.     goloop=false;
  37.     previousMillis=currentMillis;
  38.     }
  39.     }
  40.     double per =double(duration1_0)/double(interval);// had multiply 1000
  41.     int pcs1_0 = -1;
  42.     pcs1_0 =  per * 50.0;
  43.     per =double(duration2_5)/double(interval);// had multiply 1000
  44.     int pcs2_5 = -1;
  45.     pcs2_5 =  per * 50.0;
復(fù)制代碼

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂2 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:234938 發(fā)表于 2020-5-10 12:50 | 只看該作者
感謝樓主分享,收藏了。
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: av入口| 91久久久久久久久久久 | 精品中文字幕一区二区三区 | 一级在线毛片 | 中文字幕一区二区三区精彩视频 | 精品欧美一区二区精品久久 | 国内久久精品 | 精品日韩一区二区 | 欧美vide | 国产美女在线观看 | 精品久久久久一区二区国产 | 日韩一二区 | 中文字幕a√ | 一区在线视频 | 久热精品视频 | 国产福利在线免费观看 | 国产精品入口麻豆www | 色性av | 国产免费一区二区 | 最新日韩在线 | 欧美在线a | h视频在线观看免费 | 91九色在线观看 | а天堂中文最新一区二区三区 | 男女免费在线观看视频 | 一区二区三区视频免费观看 | 久久成人免费观看 | 91成人小视频 | 久久精品一 | 毛片免费视频 | 久久久久久久亚洲精品 | 91亚洲精品国偷拍自产在线观看 | 国产精品无码久久久久 | 国产a区 | 欧美日韩亚洲视频 | 亚洲色欲色欲www | 久久草在线视频 | 欧美黄色小视频 | 天堂成人av | 91免费入口 | 一区二区三区四区视频 |