找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
樓主: eagler8
打印 上一主題 下一主題
收起左側(cè)

【Arduino】108種傳感器模塊系列實(shí)驗(yàn)(資料+代碼+圖形+仿真)

  [復(fù)制鏈接]
1041#
ID:513258 發(fā)表于 2019-7-13 19:00 | 只看該作者

謝謝您的鼓勵
回復(fù)

使用道具 舉報(bào)

1042#
ID:513258 發(fā)表于 2019-7-13 19:45 | 只看該作者

回復(fù)

使用道具 舉報(bào)

1043#
ID:513258 發(fā)表于 2019-7-13 20:26 | 只看該作者

回復(fù)

使用道具 舉報(bào)

1044#
ID:513258 發(fā)表于 2019-7-14 06:57 | 只看該作者
使用高電平觸發(fā)
超聲波測距模塊:
VCC -> 5V
GND -> GND
Trig (控制端)-> 2
Echo (接收端)-> 3
注: TRIP引腳是內(nèi)部上拉10K的電阻,用單片機(jī)的IO口拉低TRIP引腳,然后給一個(gè)10us以上的脈沖信號。模塊應(yīng)先插好在電路板上再通電,避免產(chǎn)生高電平的誤動作,如果產(chǎn)生了,重新通電方可解決。




回復(fù)

使用道具 舉報(bào)

1045#
ID:513258 發(fā)表于 2019-7-14 07:05 | 只看該作者

回復(fù)

使用道具 舉報(bào)

1046#
ID:513258 發(fā)表于 2019-7-14 07:08 | 只看該作者

回復(fù)

使用道具 舉報(bào)

1047#
ID:513258 發(fā)表于 2019-7-14 07:32 | 只看該作者
  1. /*
  2. 【Arduino】66種傳感器模塊系列實(shí)驗(yàn)(58)
  3. 實(shí)驗(yàn)五十八: HC-SR04超聲波測距傳感器模塊(通用款)

  4. Echo接Digital 3口,接收距離信號
  5. Trig接Arduino板的Digital 2口,觸發(fā)測距
  6. 上電后預(yù)熱穩(wěn)定大約需要60秒鐘
  7. */

  8. float      distance;
  9. const int  echo=3;                          //echO接D3腳
  10. const int  trig=2;                          //echO接D2腳
  11. void setup()
  12. {
  13.   Serial.begin(9600);                       //波特率9600
  14.   pinMode(echo,INPUT);                       //設(shè)置echo為輸入腳
  15.   pinMode(trig,OUTPUT);                      //設(shè)置trig為輸出腳
  16.   Serial.println("HC-SR04-2019.7.14測距開始:");
  17. }
  18. void loop()
  19. {
  20. digitalWrite(trig,LOW);
  21. delayMicroseconds(20);
  22. digitalWrite(trig,HIGH);
  23. delayMicroseconds(20);
  24. digitalWrite(trig,LOW);                     //發(fā)一個(gè)20US的高脈沖去觸發(fā)Trig

  25. distance  = pulseIn(echo,HIGH);             //計(jì)數(shù)接收高電平時(shí)間
  26. distance  = distance*340/2/10000;           //計(jì)算距離 1:聲速:340M/S  2:實(shí)際距離1/2聲速距離 3:計(jì)數(shù)時(shí)鐘為1US
  27. Serial.print("距離: ");
  28. Serial.print(distance);
  29. Serial.println("cm");
  30. delay(20);                                   //單次測離完成后加20mS的延時(shí)再進(jìn)行下次測量。防止近距離測量時(shí),測量到上次余波,導(dǎo)致測量不準(zhǔn)確。
  31. delay(500);                                  //500mS測量一次
  32. }
復(fù)制代碼


回復(fù)

使用道具 舉報(bào)

1048#
ID:513258 發(fā)表于 2019-7-14 07:34 | 只看該作者

回復(fù)

使用道具 舉報(bào)

1049#
ID:513258 發(fā)表于 2019-7-14 07:47 | 只看該作者

回復(fù)

使用道具 舉報(bào)

1050#
ID:513258 發(fā)表于 2019-7-14 07:58 | 只看該作者
  1. /*
  2. 【Arduino】66種傳感器模塊系列實(shí)驗(yàn)(58)
  3. 實(shí)驗(yàn)五十八: HC-SR04超聲波測距傳感器模塊(通用款)

  4. 程序之二,闕值50厘米控制板載LED
  5. Echo接Digital 3口,接收距離信號
  6. Trig接Arduino板的Digital 2口,觸發(fā)測距
  7. 上電后預(yù)熱穩(wěn)定大約需要60秒鐘
  8. HC-SR04為簡單通用款,沒有溫度補(bǔ)償,實(shí)測200CM段誤差約3CM
  9. */

  10. int inputPin=3; // 定義超聲波信號接收接口
  11. int outputPin=2; // 定義超聲波信號發(fā)出接口
  12. int ledpin=13;
  13. void setup()
  14. {
  15. Serial.begin(9600);
  16. pinMode(ledpin,OUTPUT);
  17. pinMode(inputPin, INPUT);
  18. pinMode(outputPin, OUTPUT);
  19. }
  20. void loop()

  21. {
  22. digitalWrite(outputPin, LOW); // 使發(fā)出發(fā)出超聲波信號接口低電平2μs
  23. delayMicroseconds(2);
  24. digitalWrite(outputPin, HIGH); // 使發(fā)出發(fā)出超聲波信號接口高電平10μs,這里是至少10μs
  25. delayMicroseconds(10);
  26. digitalWrite(outputPin, LOW); // 保持發(fā)出超聲波信號接口低電平
  27. int distance = pulseIn(inputPin, HIGH); // 讀出脈沖時(shí)間
  28. distance= distance/58; // 將脈沖時(shí)間轉(zhuǎn)化為距離(單位:厘米)
  29. Serial.println(distance); //輸出距離值
  30. delay(50);
  31. if (distance >=50)
  32. {//如果距離大于50厘米小燈亮起
  33. digitalWrite(ledpin,LOW);
  34. }//如果距離小于50厘米小燈熄滅
  35. else
  36. digitalWrite(ledpin,HIGH);
  37. }
復(fù)制代碼


回復(fù)

使用道具 舉報(bào)

1051#
ID:513258 發(fā)表于 2019-7-14 08:02 | 只看該作者

回復(fù)

使用道具 舉報(bào)

1052#
ID:513258 發(fā)表于 2019-7-14 08:11 | 只看該作者
測量一本書的距離變化波形



回復(fù)

使用道具 舉報(bào)

1053#
ID:513258 發(fā)表于 2019-7-14 08:30 | 只看該作者
  1. /*
  2. 【Arduino】66種傳感器模塊系列實(shí)驗(yàn)(58)
  3. 實(shí)驗(yàn)五十八: HC-SR04超聲波測距傳感器模塊(通用款)

  4. 程序之三,串口輸出等待時(shí)間的原始數(shù)據(jù)
  5. Echo接Digital 3口,接收距離信號
  6. Trig接Arduino板的Digital 2口,觸發(fā)測距
  7. 上電后預(yù)熱穩(wěn)定大約需要60秒鐘
  8. HC-SR04為簡單通用款,沒有溫度補(bǔ)償,實(shí)測200CM段誤差約3CM
  9. */

  10. #define Trig 2
  11. #define Echo 3

  12. float cm; //距離變量
  13. float temp;

  14. void setup() {
  15.   Serial.begin(9600);
  16.   pinMode(Trig, OUTPUT);
  17.   pinMode(Echo, INPUT);
  18. }

  19. void loop() {
  20.   //給Trig發(fā)送一個(gè)低高低的短時(shí)間脈沖,觸發(fā)測距
  21.   digitalWrite(Trig, LOW); //給Trig發(fā)送一個(gè)低電平
  22.   delayMicroseconds(2);    //等待 2微妙
  23.   digitalWrite(Trig,HIGH); //給Trig發(fā)送一個(gè)高電平
  24.   delayMicroseconds(10);    //等待 10微妙
  25.   digitalWrite(Trig, LOW); //給Trig發(fā)送一個(gè)低電平
  26.   
  27.   temp = float(pulseIn(Echo, HIGH)); //存儲回波等待時(shí)間,
  28.   //pulseIn函數(shù)會等待引腳變?yōu)镠IGH,開始計(jì)算時(shí)間,再等待變?yōu)長OW并停止計(jì)時(shí)
  29.   //返回脈沖的長度
  30.   
  31.   //聲速是:340m/1s 換算成 34000cm / 1000000μs => 34 / 1000
  32.   //因?yàn)榘l(fā)送到接收,實(shí)際是相同距離走了2回,所以要除以2
  33.   //距離(厘米)  =  (回波時(shí)間 * (34 / 1000)) / 2
  34.   //簡化后的計(jì)算公式為 (回波時(shí)間 * 17)/ 1000
  35.   
  36.   cm = (temp * 17 )/1000; //把回波時(shí)間換算成cm

  37.   Serial.print("Echo =");
  38.   Serial.print(temp);//串口輸出等待時(shí)間的原始數(shù)據(jù)
  39.   Serial.print(" | | Distance = ");
  40.   Serial.print(cm);//串口輸出距離換算成cm的結(jié)果
  41.   Serial.println("cm");
  42.   delay(500);
  43. }
復(fù)制代碼


回復(fù)

使用道具 舉報(bào)

1054#
ID:513258 發(fā)表于 2019-7-14 08:33 | 只看該作者

回復(fù)

使用道具 舉報(bào)

1055#
ID:513258 發(fā)表于 2019-7-14 08:51 | 只看該作者

回復(fù)

使用道具 舉報(bào)

1056#
ID:513258 發(fā)表于 2019-7-14 08:52 | 只看該作者

回復(fù)

使用道具 舉報(bào)

1057#
ID:513258 發(fā)表于 2019-7-14 09:14 | 只看該作者

回復(fù)

使用道具 舉報(bào)

1058#
ID:513258 發(fā)表于 2019-7-14 09:46 | 只看該作者

回復(fù)

使用道具 舉報(bào)

1059#
ID:513258 發(fā)表于 2019-7-14 09:50 | 只看該作者

回復(fù)

使用道具 舉報(bào)

1060#
ID:513258 發(fā)表于 2019-7-14 10:21 | 只看該作者
本帖最后由 eagler8 于 2019-7-14 14:23 編輯

網(wǎng)上搜索了一下,超聲波模塊的型號還不少,比如還有HY-SRF05(五針高精度);US-025和US-026(蘇州順憬志聯(lián)CS100芯片,距離6米穩(wěn)定性好些);US-100(同時(shí)具有GPIO,串口等多種通信方式,內(nèi)帶看門狗,工作穩(wěn)定可靠);RCWL-1601(寬電壓,對棉質(zhì)及不規(guī)則物體探測精度高于SR-04);RCWL-1603(含有UART,PWM,GPIO及UART AUTO OUT等多種接口模式,專業(yè)MCP9700溫度補(bǔ)償);US-015(目前市場上分辨率最高,重復(fù)測量一致性最好的超聲波測距模塊)等,以后待手頭有實(shí)物了再做實(shí)驗(yàn)。



回復(fù)

使用道具 舉報(bào)

1061#
ID:513258 發(fā)表于 2019-7-14 10:39 | 只看該作者
實(shí)驗(yàn)五十九: RS232轉(zhuǎn)TTL2代串口模塊刷機(jī)板(MAX3232芯片)

MAX3232
采用專有低壓差發(fā)送器輸出級,利用雙電荷泵在3.0V至5.5V電源供電時(shí)能夠?qū)崿F(xiàn)真正的RS-232性能,器件僅需四個(gè)0.1uF的外部小尺寸電荷泵電容。max3232確保在120kbps數(shù)據(jù)速率,同時(shí)保持RS-232輸出電平。max3232具有二路接收器和二路驅(qū)動器,提供1uA關(guān)斷模式,有效降低功效并延遲便攜式產(chǎn)品的電池使用壽命。關(guān)斷模式下,接收器保持有效狀態(tài),對外部設(shè)備進(jìn)行監(jiān)測,僅消耗1uA電源電流,max3232的引腳、封裝和功能分別與工業(yè)標(biāo)準(zhǔn)MAX242和MAX232兼容。即使工作在高數(shù)據(jù)速率下,max3232仍然能保持RS-232標(biāo)準(zhǔn)要求的正負(fù)5.0V最小發(fā)送器輸出電壓。




回復(fù)

使用道具 舉報(bào)

1062#
ID:513258 發(fā)表于 2019-7-14 10:45 | 只看該作者

回復(fù)

使用道具 舉報(bào)

1063#
ID:513258 發(fā)表于 2019-7-15 11:39 | 只看該作者
max3232是MAXIM公司生產(chǎn)的一款 232通訊的芯片,他可以將單片機(jī)的邏輯信號的電平轉(zhuǎn)成RS232的電平。因?yàn)镽S232是用,正負(fù)電平來表示0和1的信號,所以MAX3232要產(chǎn)生相應(yīng)的正負(fù)電壓。在使用MAX3232時(shí),先確定一下系統(tǒng)接供的電壓,因?yàn)榇诵酒,對不同的工作電壓,要給不同的電容來產(chǎn)生電壓。通電后,先檢測一下2腳是否有+5.4V以上的電壓,6腳有-5.4V以上的電壓,16腳是否有電壓, 如沒有則要檢查相應(yīng)的電容。注意在16腳一定要有電容,要不然就可能不能產(chǎn)生相應(yīng)的電壓。


回復(fù)

使用道具 舉報(bào)

1064#
ID:513258 發(fā)表于 2019-7-15 11:58 | 只看該作者

回復(fù)

使用道具 舉報(bào)

1065#
ID:513258 發(fā)表于 2019-7-15 12:12 | 只看該作者
RS232轉(zhuǎn)TTL2代串口模塊刷機(jī)板(MAX3232芯片)



回復(fù)

使用道具 舉報(bào)

1066#
ID:513258 發(fā)表于 2019-7-15 12:35 | 只看該作者




回復(fù)

使用道具 舉報(bào)

1067#
ID:513258 發(fā)表于 2019-7-15 12:53 | 只看該作者
管腳功能
1 、DCD( Data Carrier Detect) :載波檢測。主要用于Modem通知計(jì)算機(jī)其處于在線狀態(tài),即Modem檢測到撥號音,處于在線狀態(tài)。
2 、RXD(Receive(rx) Data):此引腳用于接收外部設(shè)備送來的數(shù)據(jù);在你使用Modem時(shí),你會發(fā)現(xiàn)RXD指示燈在閃爍,說明RXD引腳上有數(shù)據(jù)進(jìn)入(電腦的2接MAX232的RS232端TOUT(如PIN7))。
3 、TXD(Transmit(tx)  Data):此引腳將計(jì)算機(jī)的數(shù)據(jù)發(fā)送給外部設(shè)備;在你使用Modem時(shí),你會發(fā)現(xiàn)TXD指示燈在閃爍,說明計(jì)算機(jī)正在通過TXD引腳發(fā)送數(shù)據(jù)。
4 、DTR( Data Terminal Ready ):數(shù)據(jù)終端就緒;當(dāng)此引腳高電平時(shí),通知Modem可以進(jìn)行數(shù)據(jù)傳輸,計(jì)算機(jī)已經(jīng)準(zhǔn)備好。
5 、GND(Ground):邏輯地。
6 、DSR(data set ready):數(shù)據(jù)設(shè)置就緒;此引腳高電平時(shí),通知計(jì)算機(jī)Modem已經(jīng)準(zhǔn)備好,可以進(jìn)行數(shù)據(jù)通訊了。
7 、RTS(Request To Send):請求發(fā)送;此腳由計(jì)算機(jī)來控制,用以通知Modem馬上傳送數(shù)據(jù)至計(jì)算機(jī);否則,Modem將收到的數(shù)據(jù)暫時(shí)放入緩沖區(qū)中。
8 、CTS(Clear to send): 清除發(fā)送;此腳由Modem控制,用以通知計(jì)算機(jī)將欲傳的數(shù)據(jù)送至Modem。
9 、RI ( Ring Indicator): Modem通知計(jì)算機(jī)有呼叫進(jìn)來,是否接聽呼叫由計(jì)算機(jī)決定。

要想實(shí)現(xiàn)串口間通信,至少需要三個(gè)引腳,即:RXD,TXD,GND,RXD與其他串口線TXD相連,TXD與RXD相連,GND與GND相連,這樣就實(shí)現(xiàn)了串口間通信。該通信是全雙工的,即可以同時(shí)發(fā)送/接收數(shù)據(jù),雖然說是串行的,但是因?yàn)榘l(fā)送/接收不是用的一個(gè)通道,所以可以實(shí)現(xiàn)全雙工。




回復(fù)

使用道具 舉報(bào)

1068#
ID:513258 發(fā)表于 2019-7-15 13:03 | 只看該作者
DB9與MAX3232的連接



回復(fù)

使用道具 舉報(bào)

1069#
ID:513258 發(fā)表于 2019-7-15 14:09 | 只看該作者



回復(fù)

使用道具 舉報(bào)

1070#
ID:513258 發(fā)表于 2019-7-15 14:17 | 只看該作者
模塊電原理圖


回復(fù)

使用道具 舉報(bào)

1071#
ID:513258 發(fā)表于 2019-7-15 14:18 | 只看該作者
模塊電原理圖



回復(fù)

使用道具 舉報(bào)

1072#
ID:513258 發(fā)表于 2019-7-15 14:41 | 只看該作者



回復(fù)

使用道具 舉報(bào)

1073#
ID:513258 發(fā)表于 2019-7-15 16:24 | 只看該作者
  1. /*
  2. 【Arduino】66種傳感器模塊系列實(shí)驗(yàn)(59)
  3. 實(shí)驗(yàn)五十九: RS232轉(zhuǎn)TTL2代串口模塊刷機(jī)板(MAX3232芯片)
  4. 程序之一,讀取緩存中的串口數(shù)據(jù)
  5. 注意這里的接線方法,軟串口RX接RS232轉(zhuǎn)接板的RX口,
  6. TX接RS232轉(zhuǎn)接板的TX口
  7. */

  8. #include <SoftwareSerial.h>
  9. SoftwareSerial DLSerial(6, 7); // 軟串口 RX(D6), TX(D7)
  10. void setup() {
  11. DLSerial.begin(9600); //設(shè)備波特率9600
  12. }

  13. void loop() {   
  14. DLSerial.write(1); //發(fā)送字節(jié)數(shù)據(jù)
  15. DLSerial.write(3);
  16. delay(500);
  17. while (DLSerial.available()>0) //如果緩存中有接收到的數(shù)據(jù)
  18. {
  19.     DLSerial.read(); //讀取緩存中的串口數(shù)據(jù)
  20.     delay(2);
  21. }
  22. delay(500);
  23. }
復(fù)制代碼


回復(fù)

使用道具 舉報(bào)

1074#
ID:513258 發(fā)表于 2019-7-15 16:28 | 只看該作者

回復(fù)

使用道具 舉報(bào)

1075#
ID:513258 發(fā)表于 2019-7-15 16:35 | 只看該作者

回復(fù)

使用道具 舉報(bào)

1076#
ID:288607 發(fā)表于 2019-7-15 16:46 | 只看該作者
有沒得文檔的
回復(fù)

使用道具 舉報(bào)

1077#
ID:513258 發(fā)表于 2019-7-15 17:02 | 只看該作者
  1. /*
  2. 【Arduino】66種傳感器模塊系列實(shí)驗(yàn)(59)
  3. 實(shí)驗(yàn)五十九: RS232轉(zhuǎn)TTL2代串口模塊刷機(jī)板(MAX3232芯片)
  4. 程序之二,接收串口數(shù)據(jù)
  5. rx = 6
  6. tx = 7
  7. */

  8. #include <ctype.h>

  9. #define bit9600Delay 100  
  10. #define halfBit9600Delay 50
  11. #define bit4800Delay 188
  12. #define halfBit4800Delay 94

  13. byte rx = 6;
  14. byte tx = 7;
  15. byte SWval;

  16. void setup() {
  17.   pinMode(rx,INPUT);
  18.   pinMode(tx,OUTPUT);
  19.   digitalWrite(tx,HIGH);
  20.   delay(2);
  21.   digitalWrite(13,HIGH);
  22.   SWprint('o');  
  23.   SWprint('k');
  24.   SWprint(10);
  25. }

  26. void SWprint(int data)
  27. {
  28.   byte mask;

  29.   digitalWrite(tx,LOW);
  30.   delayMicroseconds(bit9600Delay);
  31.   for (mask = 0x01; mask>0; mask <<= 1) {
  32.     if (data & mask){
  33.      digitalWrite(tx,HIGH);
  34.     }
  35.     else{
  36.      digitalWrite(tx,LOW);
  37.     }
  38.     delayMicroseconds(bit9600Delay);
  39.   }
  40.   
  41.   digitalWrite(tx, HIGH);
  42.   delayMicroseconds(bit9600Delay);
  43. }

  44. int SWread()
  45. {
  46.   byte val = 0;
  47.   while (digitalRead(rx));

  48.   if (digitalRead(rx) == LOW) {
  49.     delayMicroseconds(halfBit9600Delay);
  50.     for (int offset = 0; offset < 8; offset++) {
  51.      delayMicroseconds(bit9600Delay);
  52.      val |= digitalRead(rx) << offset;
  53.     }
  54.    
  55.     delayMicroseconds(bit9600Delay);
  56.     delayMicroseconds(bit9600Delay);
  57.     return val;
  58.   }
  59. }

  60. void loop()
  61. {
  62.     SWval = SWread();
  63.     SWprint(toupper(SWval));
  64. }
復(fù)制代碼


回復(fù)

使用道具 舉報(bào)

1078#
ID:513258 發(fā)表于 2019-7-15 17:05 | 只看該作者

回復(fù)

使用道具 舉報(bào)

1079#
ID:513258 發(fā)表于 2019-7-15 17:36 | 只看該作者

回復(fù)

使用道具 舉報(bào)

1080#
ID:513258 發(fā)表于 2019-7-15 17:39 | 只看該作者

回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表