一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

基于Arduino UNO和L298N的避障小車DIY制作

 共同成長(zhǎng)888 2021-11-12

  一、 壁障小車的制作

1、 制作避障小車的準(zhǔn)備工作

硬件:Arduino UNO、L298N驅(qū)動(dòng)模塊、超聲波模塊、小車底盤、舵機(jī)模塊、一塊面包板、一些杜邦線。

軟件: Arduino UNO的程序下載軟件

下面來一張安裝好的的圖

2、舵機(jī)模塊的解析認(rèn)識(shí)

本次用的是簡(jiǎn)單實(shí)用的9克小舵機(jī)。

它的扭力不是很大,但是對(duì)于咱們想用作掃描超聲測(cè)距探頭來說足夠了。一般舵機(jī)的旋轉(zhuǎn)角度范圍都是0-180度旋轉(zhuǎn)的,也有一種數(shù)字電機(jī)可以在電機(jī)和舵機(jī)這兩種狀態(tài)下切換,既可以控制精確的旋轉(zhuǎn)角度也可以連續(xù)旋轉(zhuǎn)作為電機(jī)使用。舵機(jī)轉(zhuǎn)動(dòng)的角度是由控制器的脈沖寬度決定的,假如舵機(jī)處在中間位置(90度),這時(shí)的脈沖寬度設(shè)定為1.5ms那么我們想讓舵機(jī)轉(zhuǎn)動(dòng)到0度的時(shí)候可以給他1ms的脈沖,如果想讓它轉(zhuǎn)動(dòng)到180度的時(shí)候可以給2ms的脈沖,這就是舵機(jī)角度控制的基本原理了。

3、超聲波模塊的解析認(rèn)識(shí)

本次用的超聲波模塊如圖所示

模塊工作原理:

1、采用IO觸發(fā)測(cè)距,給至少10us的高電平信號(hào);

2、模塊自動(dòng)發(fā)送8個(gè)40KHz的方波,自動(dòng)檢測(cè)是否有信號(hào)返回;

3、有信號(hào)返回,通過IO輸出一高電平,高電平持續(xù)的時(shí)間就是超聲波從發(fā)射到返回的時(shí)間.測(cè)試距離=(高電平時(shí)間*聲速(340m/s))/2;

4、L298N模塊的解析認(rèn)識(shí)

本次用的L298N模塊如圖所示

1.驅(qū)動(dòng)芯片:L298N雙H橋直流電機(jī)驅(qū)動(dòng)芯片

2.驅(qū)動(dòng)部分端子供電范圍Vs:+5V~+35V ; 如需要板內(nèi)取電,則供電范圍Vs:+7V~+35V

3.驅(qū)動(dòng)部分峰值電流Io:2A

4.邏輯部分工作電流范圍:0~36mA

6.控制信號(hào)輸入電壓范圍(IN1 IN2 IN3 IN4):

低電平:-0.3V≤Vin≤1.5V

高電平:2.3V≤Vin≤Vss

7.使能信號(hào)輸入電壓范圍(ENA ENB):

低電平:-0.3≤Vin≤1.5V(控制信號(hào)無效)

高電平:2.3V≤Vin≤Vss(控制信號(hào)有效)

8.最大功耗:20W(溫度T=75℃時(shí))

9.存儲(chǔ)溫度:-25℃~+130℃

10.驅(qū)動(dòng)板尺寸:58mm*40mm

12.其他擴(kuò)展:控制方向指示燈、邏輯部分板內(nèi)取電接口。

L298N可接受標(biāo)準(zhǔn)TTL邏輯電平信號(hào)VSS,VSS可接4.5~7 V電壓。4腳VS接電源電壓,VS電壓范圍VIH為+2.5~46 V。輸出電流可達(dá)2.5 A,可驅(qū)動(dòng)電感性負(fù)載。L298可驅(qū)動(dòng)2個(gè)直流電機(jī),OUT1,OUT2和OUT3,OUT4之間可分別接直流電機(jī)。

電機(jī)轉(zhuǎn)動(dòng)狀態(tài)編碼:

4、 面包板的解析認(rèn)識(shí)

在具體使用的時(shí)候,通常是兩窄一寬同時(shí)使用,兩個(gè)窄條的第一行一般和地線連接,第二行和電源相連。由于集成塊電源一般在上面,接地在下面,如此布局有助于將集成塊的電源腳和上面第二行窄條相連,接地腳和下面窄條的第一行相連,減少連線長(zhǎng)度和跨接線的數(shù)量。中間寬條用于連接電路,由于凹槽上下是不連通的,所以集成塊一般跨插在凹槽上。中間寬條一行5個(gè),串聯(lián)到一起。插入面包板上孔內(nèi)引腳或?qū)Ь€銅芯直徑為0.4~0.6mm,即比大頭針的直徑略微細(xì)一點(diǎn)。元器件引腳或?qū)Ь€頭要沿面包板的板面垂直方向插入方孔,應(yīng)能感覺到有輕微、均勻的摩擦阻力,在面包板倒置時(shí),元器件應(yīng)能被簧片夾住而不脫落。面包板應(yīng)該在通風(fēng)、干燥處存放,特別要避免被電池漏出的電解液所腐蝕。要保持面包板清潔,焊接過的元器件不要插在面包板上。

6、總連接圖的解析

(1)Arduino與面包板接線說明

由于arduino UNO的引腳太少,所以需要把電源還有GND引出來,所以需要與面包板配合使用。Arduino上的5V接到面包板正極,arduino上的GND接到面包板上的負(fù)極。

(2)Arduino與L298N電機(jī)驅(qū)動(dòng)模塊接線說明

I1 I2 I3 I4:電機(jī)控制輸入端,直接接單片機(jī)的IO口

OUT1 OUT2 OUT3 OUT4:電機(jī)接線端子。

SGND:接板子的GND

VIN:電機(jī)電源輸入端,電壓范圍+5V~+35v.

+5V:+5V電源輸入/輸出端。利用板子外面的電源給L298N芯片供電時(shí),可以芯片電源的輸入端口。板內(nèi)取電的時(shí)候也可以作為+5V電源引出腳。Out1和out2接直流電機(jī)的兩個(gè)引腳,Out3和out4接另一個(gè)直流電機(jī)的兩個(gè)引腳,vin接面包板上正極,SGND接面包板上的負(fù)極,L289N驅(qū)動(dòng)板的I1,I2接arduino上的6,9兩個(gè)引腳。L289N驅(qū)動(dòng)板的I3,I4接arduino上的10、11兩個(gè)引腳,L289N驅(qū)動(dòng)板的5V接面包板上正極, L289N驅(qū)動(dòng)板的GND接面包板上的負(fù)極。

(3)Arduino與超聲波模塊接線說明

超聲波上的VCC接面包板上的正極,GND接面包板上的負(fù)極,Echo接arduino板子上的模擬口A0,Trig接arduino上的模擬口A1.

(4)Arduino與舵機(jī)模塊接線說明

舵機(jī)上的紅線接面包板的正極,舵機(jī)上的棕線接面包板的負(fù)極,面包板上的橙線接arduino上的數(shù)字引腳5。

程序代碼:

#include <Servo.h>

int pinLB=6;

int pinLF=9;

int pinRB=10;

int pinRF=11;

int inputPin = A0;

int outputPin =A1;

int Fspeedd = 0;

int Rspeedd = 0;

int Lspeedd = 0;

int direcTIonn = 0;

Servo myservo;

int delay_TIme = 250;

int Fgo = 8;

int Rgo = 6;

int Lgo = 4;

int Bgo = 2;

void setup()

{

Serial.begin(9600);

pinMode(pinLB,OUTPUT);

pinMode(pinLF,OUTPUT);

pinMode(pinRB,OUTPUT);

pinMode(pinRF,OUTPUT);

pinMode(inputPin, INPUT);

pinMode(outputPin, OUTPUT);

myservo.attach(5);

}

void advance(int a)

{

digitalWrite(pinRB,LOW);

digitalWrite(pinRF,HIGH);

digitalWrite(pinLB,LOW);

digitalWrite(pinLF,HIGH);

delay(a * 100);

}

void right(int b)

{

digitalWrite(pinRB,LOW);

digitalWrite(pinRF,HIGH);

digitalWrite(pinLB,HIGH);

digitalWrite(pinLF,HIGH);

delay(b * 100);

}

void left(int c)

{

digitalWrite(pinRB,HIGH);

digitalWrite(pinRF,HIGH);

digitalWrite(pinLB,LOW);

digitalWrite(pinLF,HIGH);

delay(c * 100);

}

void turnR(int d)

{

digitalWrite(pinRB,LOW);

digitalWrite(pinRF,HIGH);

digitalWrite(pinLB,HIGH);

digitalWrite(pinLF,LOW);

delay(d * 100);

}

void turnL(int e)

{

digitalWrite(pinRB,HIGH);

digitalWrite(pinRF,LOW);

digitalWrite(pinLB,LOW);

digitalWrite(pinLF,HIGH);

delay(e * 100);

}

void stopp(int f)

{

digitalWrite(pinRB,HIGH);

digitalWrite(pinRF,HIGH);

digitalWrite(pinLB,HIGH);

digitalWrite(pinLF,HIGH);

delay(f * 100);

}

void back(int g)

{

digitalWrite(pinRB,HIGH);

digitalWrite(pinRF,LOW);

digitalWrite(pinLB,HIGH);

digitalWrite(pinLF,LOW);

delay(g * 100);

}

void detecTIon()

{

int delay_TIme = 250;

ask_pin_F();

if(Fspeedd < 10)

{

stopp(1);

back(2);

}

if(Fspeedd < 25)

{

stopp(1);

ask_pin_L();

delay(delay_time);

ask_pin_R();

delay(delay_time);

if(Lspeedd > Rspeedd)

{

directionn = Rgo;

}

if(Lspeedd <= Rspeedd)

{

directionn = Lgo;

}

if (Lspeedd < 10 && Rspeedd < 10)

{

directionn = Bgo;

}

}

else

{

directionn = Fgo;

}

}

void ask_pin_F()

{

myservo.write(90);

digitalWrite(outputPin, LOW);

delayMicroseconds(2);

digitalWrite(outputPin, HIGH);

delayMicroseconds(10);

digitalWrite(outputPin, LOW);

float Fdistance = pulseIn(inputPin, HIGH);

Fdistance= Fdistance/5.8/10;

Serial.print("F distance:");

Serial.println(Fdistance);

Fspeedd = Fdistance;

}

void ask_pin_L()

{

myservo.write(5);

delay(delay_time);

digitalWrite(outputPin, LOW);

delayMicroseconds(2);

digitalWrite(outputPin, HIGH);

delayMicroseconds(10);

digitalWrite(outputPin, LOW);

float Ldistance = pulseIn(inputPin, HIGH);

Ldistance= Ldistance/5.8/10;

Serial.print("L distance:");

Serial.println(Ldistance);

Lspeedd = Ldistance;

}

void ask_pin_R()

{

myservo.write(177);

delay(delay_time);

digitalWrite(outputPin, LOW);

delayMicroseconds(2);

digitalWrite(outputPin, HIGH);

delayMicroseconds(10);

digitalWrite(outputPin, LOW);

float Rdistance = pulseIn(inputPin, HIGH);

Rdistance= Rdistance/5.8/10;

Serial.print("R distance:");

Serial.println(Rdistance);

Rspeedd = Rdistance;

}

void loop()

{

myservo.write(90);

detection();

if(directionn == 2)

{

back(8);

turnL(2);

Serial.print(" Reverse ");

}

if(directionn == 6)

{

back(1);

turnR(6);

Serial.print(" Right ");

}

if(directionn == 4)

{

back(1);

turnL(6);

Serial.print(" Left ");

}

if(directionn == 8)

{

advance(1);

Serial.print(" Advance ");

Serial.print(" ");

}

}

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    日本成人三级在线播放| 精品久久少妇激情视频| 日韩中文无线码在线视频| 热久久这里只有精品视频| 国产传媒免费观看视频| 国产成人精品国产亚洲欧洲| 日本熟女中文字幕一区| 久久精品少妇内射毛片| 1024你懂的在线视频| 91偷拍视频久久精品| 久久亚洲精品成人国产| 日韩成人h视频在线观看| 日韩女优精品一区二区三区| 日韩无套内射免费精品| 婷婷激情四射在线观看视频| 欧美精品女同一区二区| 国产精品久久女同磨豆腐| 国产亚洲精品香蕉视频播放| 激情内射日本一区二区三区| 亚洲午夜av一区二区| 中国美女偷拍福利视频| 国产精品欧美一级免费| 男女午夜福利院在线观看 | 亚洲欧洲一区二区综合精品| 一级片二级片欧美日韩| 亚洲精品福利视频在线观看| 亚洲一区在线观看蜜桃| 视频在线观看色一区二区| 色婷婷丁香激情五月天| 亚洲品质一区二区三区| 超薄丝袜足一区二区三区| 日本精品免费在线观看| 正在播放国产又粗又长| 中文字幕久热精品视频在线| 最近中文字幕高清中文字幕无| 欧美日韩乱码一区二区三区| 日韩视频在线观看成人| 东北女人的逼操的舒服吗 | 久久综合亚洲精品蜜桃| 国产成人国产精品国产三级| 欧美一级内射一色桃子|