日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

毕业设计 单片机超声波雷达系统 - 嵌入式

發布時間:2024/1/1 windows 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 毕业设计 单片机超声波雷达系统 - 嵌入式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 1 簡介
  • 2 如何設計
    • 軟件部分
    • 硬件部分
    • 調試
  • 3 實現效果
  • 4 設計原理
  • 5 部分實現代碼
  • 6 最后


1 簡介

Hi,大家好,學長今天向大家介紹一個超級炫酷的單片機項目,非常適合用于畢設

基于單片機的超聲波雷達設計

大家可用于 課程設計 或 畢業設計

2 如何設計

軟件部分

1、繪制雷達表盤
2、增加掃描線
3、實現拖影效果
4、實現目標掃描點顯示(漸出效果)

硬件部分

1、準備器材(arduino UNO、360度舵機、超聲波傳感器、擴展板)
2、雷達平臺

調試

1、串口通訊接受數據
2、掃描點的顯示函數改造

3 實現效果

4 設計原理

超聲波檢測原理

線電波(微波)從雷達發射到自由空間,其中一些波被反射物體攔截,并從不同的方向上進行反射。這些波中一些波會引回雷達,被雷達接受并且放大。如果這些波在其原點再次被接收,則意味著物體在傳播方向上。

現代雷達系統非常先進,并用于高度多樣化的應用中,例如空中交通管制,防空系統,雷達天文學,反導系統,外層空間監視系統等等。

超聲波傳感器:

超聲波傳感器:用于測量目標或物體到傳感器的距離,它通過發射超聲波來檢測物體并將反射波轉換為電信號。這些聲波的傳播速度快于人類可以聽到的聲音的速度。

發送器:使用壓電晶體發出聲音
接收器:接收從目標傳播回來的聲音
計算公式:D =?T x C(D =距離,T =時間,C = 343米/秒)

超聲波傳感器主要用于汽車自動停車技術和防撞安全系統中。此外,還用于機器人障礙物檢測系統,制造技術等。

伺服電機:

伺服馬達:一個簡單的DC馬達,它可以伺服機器的控制下完成特定的角度旋轉。且該電機只會旋轉特定的程度,然后停止。伺服電機是一種閉環機構,它使用位置反饋來控制速度和位置。

該閉環系統包括:控制電路、伺服電動機、軸、電位計、驅動齒輪、放大器、編碼器/分解器。

5 部分實現代碼

部分代碼

// 包含Servo庫 #include <Servo.h>. // 定義超聲波傳感器的Tirg和回波引腳 const int trigPin = 10; const int echoPin = 11; //持續時間和距離的變量 long duration; int distance; Servo myServo; // 創建用于控制伺服電機的伺服對象 void setup() {pinMode(trigPin, OUTPUT); // 將trigPin設置為輸出pinMode(echoPin, INPUT); //將echoPin設置為輸入Serial.begin(9600);myServo.attach(12); // 定義伺服電機連接在哪個銷上 } void loop() {// 將伺服電機從15度旋轉到165度for(int i=15;i<=165;i++){ myServo.write(i);delay(30);distance = calculateDistance();// 調用一個函數來計算超聲波傳感器為每度測量的距離Serial.print(i); // 將當前度數發送到串行端口Serial.print(","); // 在處理IDE中稍后需要的上一個值旁邊發送加法字符以進行索引Serial.print(distance); // 將距離值發送到串行端口Serial.print("."); // 在處理IDE中稍后需要的上一個值旁邊發送加法字符以進行索引}// 從165度到15度重復前面的行for(int i=165;i>15;i--){ myServo.write(i);delay(30);distance = calculateDistance();Serial.print(i);Serial.print(",");Serial.print(distance);Serial.print(".");} } // 用于計算超聲波傳感器測量的距離的函數 int calculateDistance(){ digitalWrite(trigPin, LOW); delayMicroseconds(2);// 將trigPin設置為高狀態10微秒digitalWrite(trigPin, HIGH); delayMicroseconds(10);digitalWrite(trigPin, LOW);duration = pulseIn(echoPin, HIGH); // 讀取echoPin,以微秒為單位返回聲波傳播時間distance= duration*0.034/2;return distance; }processing代碼: import processing.serial.*; // 導入用于串行通信的庫 import java.awt.event.KeyEvent; // 導入用于從串行端口讀取數據的庫 import java.io.IOException; Serial myPort; // defines Object Serial // 化解變量 String angle=""; String distance=""; String data=""; String noObject; float pixsDistance; int iAngle, iDistance; int index1=0; int index2=0; PFont orcFont; void setup() {size (1200, 700); // ***將此更改為您的屏幕分辨率***smooth();myPort = new Serial(this,"COM5", 9600); // 啟動串行通信myPort.bufferUntil('.'); // 從串行端口讀取數據,直到字符“.”。實際上它讀到了:角度,距離。 } void draw() {fill(98,245,31);// 模擬運動模糊和運動線的緩慢衰減noStroke();fill(0,4); rect(0, 0, width, height-height*0.065); fill(98,245,31); // green color//調用繪制雷達的函數drawRadar(); drawLine();drawObject();drawText(); } void serialEvent (Serial myPort) { // 開始從串行端口讀取數據//從串行端口讀取到字符“.”的數據,并將其放入字符串變量“data”中。data = myPort.readStringUntil('.');data = data.substring(0,data.length()-1);index1 = data.indexOf(","); // 找到字符','并將其放入變量“index1”angle= data.substring(0, index1); // 讀取從位置“0”到變量index1位置的數據,或者這是Arduino板發送到串行端口的角度值distance= data.substring(index1+1, data.length()); // 讀取從位置“index1”到距離值的數據pr的末尾的數據// 將字符串變量轉換為整數iAngle = int(angle);iDistance = int(distance); } void drawRadar() {pushMatrix();translate(width/2,height-height*0.074); // 將起始坐標移動到新位置noFill();strokeWeight(2);stroke(98,245,31);// 繪制弧線arc(0,0,(width-width*0.0625),(width-width*0.0625),PI,TWO_PI);arc(0,0,(width-width*0.27),(width-width*0.27),PI,TWO_PI);arc(0,0,(width-width*0.479),(width-width*0.479),PI,TWO_PI);arc(0,0,(width-width*0.687),(width-width*0.687),PI,TWO_PI);// 繪制角線line(-width/2,0,width/2,0);line(0,0,(-width/2)*cos(radians(30)),(-width/2)*sin(radians(30)));line(0,0,(-width/2)*cos(radians(60)),(-width/2)*sin(radians(60)));line(0,0,(-width/2)*cos(radians(90)),(-width/2)*sin(radians(90)));line(0,0,(-width/2)*cos(radians(120)),(-width/2)*sin(radians(120)));line(0,0,(-width/2)*cos(radians(150)),(-width/2)*sin(radians(150)));line((-width/2)*cos(radians(30)),0,width/2,0);popMatrix(); } void drawObject() {pushMatrix();translate(width/2,height-height*0.074); // 將起始坐標移動到新位置strokeWeight(9);stroke(255,10,10); // red colorpixsDistance = iDistance*((height-height*0.1666)*0.025); // 覆蓋從厘米到像素的傳感器距離// 將范圍限制為40厘米if(iDistance<40){// 根據角度和距離繪制對象line(pixsDistance*cos(radians(iAngle)),-pixsDistance*sin(radians(iAngle)),(width-width*0.505)*cos(radians(iAngle)),-(width-width*0.505)*sin(radians(iAngle)));}popMatrix(); } void drawLine() {pushMatrix();strokeWeight(9);stroke(30,250,60);translate(width/2,height-height*0.074); // 將起始坐標移動到新位置line(0,0,(height-height*0.12)*cos(radians(iAngle)),-(height-height*0.12)*sin(radians(iAngle))); // 根據角度畫線popMatrix(); } void drawText() { //在屏幕上繪制文本pushMatrix();if(iDistance>40) {noObject = "Out of Range";}else {noObject = "In Range";}fill(0,0,0);noStroke();rect(0, height-height*0.0648, width, height);fill(98,245,31);textSize(25);text("10cm",width-width*0.3854,height-height*0.0833);text("20cm",width-width*0.281,height-height*0.0833);text("30cm",width-width*0.177,height-height*0.0833);text("40cm",width-width*0.0729,height-height*0.0833);textSize(40);text("Robu.in", width-width*0.875, height-height*0.0277);text("Angle: " + iAngle +" °", width-width*0.48, height-height*0.0277);text("Distance: ", width-width*0.26, height-height*0.0277);if(iDistance<40) {text(" " + iDistance +" cm", width-width*0.225, height-height*0.0277);}textSize(25);fill(98,245,60);translate((width-width*0.4994)+width/2*cos(radians(30)),(height-height*0.0907)-width/2*sin(radians(30)));rotate(-radians(-60));text("30°",0,0);resetMatrix();translate((width-width*0.503)+width/2*cos(radians(60)),(height-height*0.0888)-width/2*sin(radians(60)));rotate(-radians(-30));text("60°",0,0);resetMatrix();translate((width-width*0.507)+width/2*cos(radians(90)),(height-height*0.0833)-width/2*sin(radians(90)));rotate(radians(0));text("90°",0,0);resetMatrix();translate(width-width*0.513+width/2*cos(radians(120)),(height-height*0.07129)-width/2*sin(radians(120)));rotate(radians(-30));text("120°",0,0);resetMatrix();translate((width-width*0.5104)+width/2*cos(radians(150)),(height-height*0.0574)-width/2*sin(radians(150)));rotate(radians(-60));text("150°",0,0);popMatrix(); }

6 最后

總結

以上是生活随笔為你收集整理的毕业设计 单片机超声波雷达系统 - 嵌入式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。