0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

ART PI重力感應(yīng)無線智能小車

RTThread物聯(lián)網(wǎng)操作系統(tǒng) ? 來源:RTThread物聯(lián)網(wǎng)操作系統(tǒng) ? 作者:RTThread物聯(lián)網(wǎng)操作 ? 2021-01-20 09:29 ? 次閱讀

雷德斯 and枕頭們,好久不見,大家是不是更優(yōu)秀了呢,哈哈,工作太忙啦,夜里肝一篇,大家久等啦,話不多說,來,干貨!

ART-PI-重力感應(yīng)無線智能小車第二彈-----OneNet+板載wifi控制電機轉(zhuǎn)動此次分享主要用到的軟硬件資源:軟件(RT-Studio平臺): 1、OneNet軟件包; 2、OneNet服務(wù)器; 3、pahomqtt軟件包 4、webclient軟件包 硬件: 1、板載wifi模塊 2、ART-PI擴展板(自設(shè)計,開源) 3、L298N電機驅(qū)動 4、4個普通IO 實現(xiàn)目標(biāo):OneNet服務(wù)器下發(fā)控制電機正轉(zhuǎn)、反轉(zhuǎn)、停止。

一、L298N簡介

此次使用的是左邊封裝的15引腳封裝

05bc42ba-59b9-11eb-8b86-12bb97331649.png

L298N是專用驅(qū)動集成電路,屬于H橋集成電路,其持續(xù)輸出電流為2A,最高電流4A,最高工作電壓46V,可以驅(qū)動感性負(fù)載,如大功率直流電機,步進電機,電磁閥等,輸入端可以與單片機直接相連接,方便單片機控制。當(dāng)驅(qū)動直流電機時,可以直接控制步進電機,并可以實現(xiàn)電機正轉(zhuǎn)與反轉(zhuǎn),實現(xiàn)此功能只需改變輸入端的邏輯電平。L298N芯片可以驅(qū)動兩個二相電機,也可以驅(qū)動一個四相電機,輸出電壓最高可達46V,可以直接通過電源來調(diào)節(jié)輸出電壓;可以直接用單片機的IO口提供控制信號。 內(nèi)部結(jié)構(gòu)框圖:有興趣的可以分析分析里面的控制邏輯,也比較簡單,不多說了。

05deb890-59b9-11eb-8b86-12bb97331649.png

引腳定義:

061b0552-59b9-11eb-8b86-12bb97331649.png

064224ca-59b9-11eb-8b86-12bb97331649.png

069843dc-59b9-11eb-8b86-12bb97331649.png

L298N可接受標(biāo)準(zhǔn)TTL邏輯電平信號VSS,VSS可接4.5~7V電壓。4腳VS接電源電壓,VS電壓范圍為VIH+2.5~46V。輸出電流可達2A,可驅(qū)動電感性負(fù)載。1腳和15腳下管的發(fā)射極分別單獨引出以便接入電流采樣電阻,形成電流傳感信號。L298可驅(qū)動2個電動機,OUT1,OUT2和OUT3,OUT4之間可分別接電動機。5,7,10,12腳接輸入控制電平,控制電機的正反轉(zhuǎn)。EnA,EnB接控制使能端,控制電機的停轉(zhuǎn)。此次設(shè)計我們驅(qū)動兩個直流電機,OUT1和OUT2控制1個,OUT3和OUT4控制1個。 以上介紹我們知道,通過5,7,10,12引腳可以控制電機的正轉(zhuǎn),反轉(zhuǎn),停止,那么怎么實現(xiàn)呢,下面是控制IO的真值表,拿其中一組作為演示,另一組一樣的邏輯,手冊中給出的是:

06b53500-59b9-11eb-8b86-12bb97331649.png

從手冊給出的說明來看,欲要電機驅(qū)動輸出,需要以下步驟來實現(xiàn):1、使能EnA,EnB引腳,可以直接接到單片機系統(tǒng)電源或者由單片機IO輸出高電平來控制; 2、Input1、Input2必須是相反的電平,即以下邏輯,至于前進還是后退,跟電機的接線有關(guān)系哈,大家可以自己測試調(diào)整。

輸入信號 電機運行方式
使能端A/B 輸入引腳1(5)/3(10) 輸入引腳2(7)/4(12)
1 1 0 前進
1 0 1 后退
1 1 1 緊急停車
1 0 0 緊急停車
0 X X 停止

二、電路設(shè)計

070553f0-59b9-11eb-8b86-12bb97331649.png

前半部分是光耦隔離芯片,用來抗干擾以及保護單片機IO,P8、P9是使能端,如果不接單片機IO控制,直接短路帽短接即可,P7是電機控制輸出端口。 與ART-PI的接口采用的是4個普通IO,伙伴們?nèi)羰琴I的L298N模塊,IO可以自選。

075b3efa-59b9-11eb-8b86-12bb97331649.png

電機:關(guān)于電機的介紹,大家可以移步到一位大佬的公眾號,介紹非常詳細(xì)啦,公眾號:嵌入式從0到1,大家可以多多關(guān)注,非常nice的一位號主。

組裝好的小車,用了2個輪子加一個萬向輪,剛好用一個L298N來驅(qū)動。

三、代碼控制實現(xiàn)

此前我們一直用的是ESP8266,現(xiàn)在我們改為使用板載的wifi模組,充分利用板載資源,沒有ART-PI板子的童鞋不要擔(dān)心,RT-Studio支持很多芯片的,大家可以使用手里現(xiàn)有的板子跟著做,一樣的,wifi部分可以使用小飛哥上個教程,使用esp8266或者其他方式,邏輯是一樣的啦。 1、新建工程,我們選擇如下的參數(shù),基于ART-PI開發(fā)板,當(dāng)然沒有板子的伙伴可以選擇基于芯片,然后選擇示例工程,wifi工程,RT-Thread團隊已經(jīng)把AP6212部分做成庫封裝在RT-Studio平臺,建立好工程之后,setting里面可以看到關(guān)于AP6212的組件已經(jīng)勾選,main函數(shù)開始增加了2個函數(shù)調(diào)用,這兩個函數(shù)是用來上電自動初始化wifi部分,如果已經(jīng)連接了wifi,下次上電就會自動搜索完成連接。編譯完成之后,download進去,來看看初步效果:

0889c7b0-59b9-11eb-8b86-12bb97331649.png

08bfcfa4-59b9-11eb-8b86-12bb97331649.png

08fa909e-59b9-11eb-8b86-12bb97331649.png

092e72a6-59b9-11eb-8b86-12bb97331649.png

控制臺輸入wifi help,可以看到關(guān)于wifi的一些命令

輸入wifi scan,掃描附近區(qū)域wifi,接下來輸入wifi join SSID password,由于小飛哥的板子之前連接過別的wifi,一直在搜索,但并沒有找到,輸入新的wifi名稱。

096b668e-59b9-11eb-8b86-12bb97331649.png

09c27898-59b9-11eb-8b86-12bb97331649.png

Wifi連接成功,現(xiàn)在重啟設(shè)備,看看自動連接效果,可以發(fā)現(xiàn),是逐個進行掃描的,成功找到當(dāng)前wifi并連接成功,開機自動連接效果測試OK。

0a08d626-59b9-11eb-8b86-12bb97331649.png

接下來是連接OneNet啦,熟悉小飛哥的應(yīng)該知道怎么做啦,第一次看小飛哥文章的麻煩移步前面的文章看看呀,不懂的,加群一起交流,群里有很多志同道合的好伙伴。 下面在我們的工程里面添加L298N控制邏輯代碼,主要是對IO的控制,也是比較簡單的,根據(jù)上面介紹的控制邏輯,讓相應(yīng)的IO輸出高低電平就可以啦,方向控制函數(shù)可以合成一個,小飛哥為了讓大家看的更簡單明了,分開寫了,要注意的是,方向控制跟你的L29N輸出接到電機的順序有關(guān),如果方向反了,修改代碼或者接線順序反一下就可以實現(xiàn)同樣的功能啦。有需要的伙伴,源碼都是開源的,可以跟小飛哥說一下,后續(xù)會上傳到github,大家可以自行下載。

IO初始化配置函數(shù):

#include

#include

#include"drv_common.h"

#include"motor_drv.h"

#defineMotorCtrl1Pin GET_PIN(B, 0)

#defineMotorCtrl2Pin GET_PIN(B, 2)

#defineMotorCtrl3Pin GET_PIN(B, 1)

#defineMotorCtrl4Pin GET_PIN(A, 11)

voidMotorCtrlPinInit()

{

rt_pin_mode(MotorCtrl1Pin, PIN_MODE_OUTPUT);

rt_pin_mode(MotorCtrl2Pin, PIN_MODE_OUTPUT);

rt_pin_mode(MotorCtrl3Pin, PIN_MODE_OUTPUT);

rt_pin_mode(MotorCtrl4Pin, PIN_MODE_OUTPUT);

rt_pin_write(MotorCtrl1Pin, PIN_LOW);

rt_pin_write(MotorCtrl2Pin, PIN_LOW);

rt_pin_write(MotorCtrl3Pin, PIN_LOW);

rt_pin_write(MotorCtrl4Pin, PIN_LOW);

}

前進:

voidMotorCtrlForward()

{

rt_pin_write(MotorCtrl1Pin, PIN_HIGH);

rt_pin_write(MotorCtrl2Pin, PIN_LOW);

rt_pin_write(MotorCtrl3Pin, PIN_HIGH);

rt_pin_write(MotorCtrl4Pin, PIN_LOW);

}

后退:

voidMotorCtrlBack()

{

rt_pin_write(MotorCtrl1Pin, PIN_LOW);

rt_pin_write(MotorCtrl2Pin, PIN_HIGH);

rt_pin_write(MotorCtrl3Pin, PIN_LOW);

rt_pin_write(MotorCtrl4Pin, PIN_HIGH);

}

右轉(zhuǎn):

voidMotorCtrlRight()

{

rt_pin_write(MotorCtrl1Pin, PIN_LOW);

rt_pin_write(MotorCtrl2Pin, PIN_HIGH);

rt_pin_write(MotorCtrl3Pin, PIN_HIGH);

rt_pin_write(MotorCtrl4Pin, PIN_LOW);

}

左轉(zhuǎn):

voidMotorCtrlLeft()

{

rt_pin_write(MotorCtrl1Pin, PIN_HIGH);

rt_pin_write(MotorCtrl2Pin, PIN_LOW);

rt_pin_write(MotorCtrl3Pin, PIN_LOW);

rt_pin_write(MotorCtrl4Pin, PIN_HIGH);

}

停止:

voidMotorCtrlStop()

{

/* rt_pin_mode(MotorCtrl1Pin, PIN_MODE_OUTPUT);

rt_pin_mode(MotorCtrl2Pin, PIN_MODE_OUTPUT);

rt_pin_mode(MotorCtrl3Pin, PIN_MODE_OUTPUT);

rt_pin_mode(MotorCtrl4Pin, PIN_MODE_OUTPUT);*/

rt_pin_write(MotorCtrl1Pin, PIN_LOW);

rt_pin_write(MotorCtrl2Pin, PIN_LOW);

rt_pin_write(MotorCtrl3Pin, PIN_LOW);

rt_pin_write(MotorCtrl4Pin, PIN_LOW);

}

接下來就是OneNet下發(fā)指令進行控制啦,這也是為后面的重力感應(yīng)遙控做鋪墊,小飛哥在之前代碼基礎(chǔ)上做了一些修改,不需要再一條條發(fā)命令接入Onenet啦,上電就可以自動連接wifi,接入Onenet服務(wù)器啦,省了不少麻煩,哈哈,無需輸入一條命令,就可以連接到Onenet服務(wù)器了。

0a27bb0e-59b9-11eb-8b86-12bb97331649.png

設(shè)備已在線

0c5b0610-59b9-11eb-8b86-12bb97331649.png

然后在Onenet端做了一個無比丑陋的控制器。拿一個舉例子,電機ON是發(fā)送控制命令,OFF發(fā)送停止命令,相信到這里,之前做過Onenet控制控制板載LED的童鞋已經(jīng)知道怎么做啦,沒錯,LED控制函數(shù)中增加下車接收命令控制即可,完整函數(shù)內(nèi)容,占篇幅,可以直接跳過,主要是給大家拷貝方便點。

0cb34c8a-59b9-11eb-8b86-12bb97331649.png

/* onenetmqttcommand response callback function */

staticvoidonenet_cmd_rsp_cb(uint8_t*recv_data, size_trecv_size, uint8_t**resp_data, size_t*resp_size)

{

charres_buf[] = { "cmdis received! "};

LOG_D("recvdata is %.*s ", recv_size, recv_data);

if(!strncmp((char*)recv_data, "led0 on", 7)) //(strstr((char*)recv_data, "led0 on"))

{

rt_pin_write(LED_PIN, 0);

rt_snprintf(res_buf,sizeof(res_buf), "led0 is on");

rt_kprintf("led0 is on ");

}

elseif(!strncmp((char*)recv_data, "led0 off", 8))//(strstr((char*)recv_data, "led0 off"))

{

rt_pin_write(LED_PIN, 1);

rt_snprintf(res_buf,sizeof(res_buf), "led0 is off");

rt_kprintf("led0 is off ");

}

else

{

//rt_kprintf("ledcmdERROR! ");

}

if(!strncmp((char*)recv_data, "led1 on", 7))//(strstr((char*)recv_data, "led1 on"))

{

//rt_pin_write(LED1_PIN, 0);

rt_snprintf(res_buf,sizeof(res_buf), "led1 is on");

rt_kprintf("led1 is on ");

}

elseif(!strncmp((char*)recv_data, "led1 off", 8))//(strstr((char*)recv_data, "led1 off"))

{

//rt_pin_write(LED1_PIN, 1);

rt_snprintf(res_buf,sizeof(res_buf), "led1 is off");

rt_kprintf("led1 is off ");

}

else

{

//rt_kprintf("ledcmdERROR! ");

}

if(!strncmp((char*)recv_data, "forward", 7))//

{

MotorCtrlForward();

rt_kprintf("forward is on ");

}

elseif(!strncmp((char*)recv_data, "back", 4))//

{

MotorCtrlBack();

}

elseif(!strncmp((char*)recv_data, "turnright", 9))//

{

MotorCtrlRight();

}

elseif(!strncmp((char*)recv_data, "turnleft", 8))//

{

MotorCtrlLeft();

}

elseif(!strncmp((char*)recv_data, "stop", 4)){

MotorCtrlStop();

}

/* user have to mallocmemory for response data */

*resp_data = (uint8_t*) ONENET_MALLOC(strlen(res_buf));

strncpy((char*)*resp_data, res_buf,strlen(res_buf));

*resp_size =strlen(res_buf);

}

實現(xiàn)效果:

0d10a3a8-59b9-11eb-8b86-12bb97331649.png

原文標(biāo)題:ART-PI-重力感應(yīng)無線智能小車第二彈-----OneNet+板載wifi控制電機轉(zhuǎn)動

文章出處:【微信公眾號:RTThread物聯(lián)網(wǎng)操作系統(tǒng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

責(zé)任編輯:haq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 集成電路
    +關(guān)注

    關(guān)注

    5365

    文章

    11159

    瀏覽量

    358337
  • 封裝
    +關(guān)注

    關(guān)注

    125

    文章

    7592

    瀏覽量

    142138
  • 智能車
    +關(guān)注

    關(guān)注

    21

    文章

    400

    瀏覽量

    76806

原文標(biāo)題:ART-PI-重力感應(yīng)無線智能小車第二彈-----OneNet+板載wifi控制電機轉(zhuǎn)動

文章出處:【微信號:RTThread,微信公眾號:RTThread物聯(lián)網(wǎng)操作系統(tǒng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    20.3-使用兩個通道進行電磁循跡 智能車競賽 電磁桿原理圖 電磁循跡小車 STM32電磁小車 電磁循跡算法

    20.3-使用兩個通道進行電磁循跡 智能車競賽 電磁桿原理圖 電磁循跡小車 智能車電磁組 STM32電磁小車 電磁循跡小車 電磁循跡算法
    的頭像 發(fā)表于 08-20 10:56 ?421次閱讀
    20.3-使用兩個通道進行電磁循跡 <b class='flag-5'>智能</b>車競賽 電磁桿原理圖 電磁循跡<b class='flag-5'>小車</b> STM32電磁<b class='flag-5'>小車</b> 電磁循跡算法

    ART-Pi Smart 體驗 RT-Thread Smart v5.1.0

    1.引言RT-ThreadSmartv5.1.0已經(jīng)正式發(fā)布。這一版本在內(nèi)核和功能上做了大量的改進與增強。我們可以在ART-PiSmart開發(fā)板盡情探索這一新版更完善更強
    的頭像 發(fā)表于 06-14 08:35 ?351次閱讀
    在 <b class='flag-5'>ART-Pi</b> Smart 體驗 RT-Thread Smart v5.1.0

    基于STM32的智能循跡小車

    初學(xué)者的智能小車
    的頭像 發(fā)表于 05-08 14:43 ?2232次閱讀
    基于STM32的<b class='flag-5'>智能</b>循跡<b class='flag-5'>小車</b>

    【Longan Pi 3H 開發(fā)板試用連載體驗】基于 Longan Pi 3H 開發(fā)板完成智能家居控制小型項目

    燈光)、對接傳感器等設(shè)備 實現(xiàn)家居設(shè)備的自動化管理,如定時開關(guān)、光線感應(yīng)等。 探索 Longan Pi 3H 開發(fā)板在智能家居領(lǐng)域的應(yīng)用潛力和性能表現(xiàn)。 后續(xù)的試用過程將在本帖更新,期待大家的關(guān)注!
    發(fā)表于 04-02 22:37

    ART pi使用easy flash寫flash失敗的原因是什么?

    ART pi使用easy flash寫flash失敗,是什么原因
    發(fā)表于 02-23 06:31

    無線充電原理是電磁感應(yīng)無線充電功能怎么開啟

    無線充電原理是電磁感應(yīng)無線充電是一項新興的充電技術(shù),其基本原理是通過電磁感應(yīng)實現(xiàn)能量傳輸。在無線充電中,存在一個發(fā)射器和一個接收器。發(fā)射器
    的頭像 發(fā)表于 02-20 15:44 ?1323次閱讀

    基于51單片機的智能小車驅(qū)動MAX7219控制點陣屏顯示小車運動狀態(tài)?

    智能小車點陣屏顯示 個人是小白,想求各位大佬幫忙!?。∮?1單片機控制小車運動,并驅(qū)動MAX7219控制點陣屏顯示小車運動狀態(tài),就是當(dāng)小車
    發(fā)表于 02-05 00:50

    ADXL313如何消除重力影響?

    想問一下ADXL313這款芯片沒有重力影響消除的方法或裝置呢?因為我們放在物體上監(jiān)測的時候不是垂直放置的,我們要放到隔水管進行監(jiān)測,傳感器會跟著隔水管一起下放,下放的時候會有一定的傾斜,而這個初始
    發(fā)表于 12-27 06:06

    ART Pi Smart基于RT-Thread Smart系統(tǒng)的LVGL移植

    ART-Pi Smart開發(fā)板為RT-Thread聯(lián)合百問科技出品,使用的是 NXP 公司的 i.MX6ULL 處理器,具備單核 ARM Cortex-A7,最高運行頻率可以達到 800MHz。
    的頭像 發(fā)表于 11-29 14:29 ?968次閱讀
    <b class='flag-5'>ART</b> <b class='flag-5'>Pi</b> Smart基于RT-Thread Smart系統(tǒng)的LVGL移植

    智能小車設(shè)計指導(dǎo)_第二版_預(yù)覽版

    電子發(fā)燒友網(wǎng)站提供《智能小車設(shè)計指導(dǎo)_第二版_預(yù)覽版.pdf》資料免費下載
    發(fā)表于 11-03 14:15 ?3次下載
    <b class='flag-5'>智能</b><b class='flag-5'>小車</b>設(shè)計指導(dǎo)_第二版_預(yù)覽版

    移動設(shè)備中的重力感應(yīng)驅(qū)動程序開發(fā)

    電子發(fā)燒友網(wǎng)站提供《移動設(shè)備中的重力感應(yīng)驅(qū)動程序開發(fā).pdf》資料免費下載
    發(fā)表于 10-30 11:23 ?0次下載
    移動設(shè)備中的<b class='flag-5'>重力</b><b class='flag-5'>感應(yīng)</b>驅(qū)動程序開發(fā)

    請問智能小車如何在一個空地上定位呢?

    請問智能小車如何在一個空地上定位呢?現(xiàn)在在空地上畫上了黑線來尋跡,但是不夠靈活,如何讓小車隨意去一個坐標(biāo)呢?
    發(fā)表于 10-25 06:32

    基于stm32的智能小車走直線

    求助各位大佬,智能小車走直線用pid 控制的時候,是否需要其他傳感器輔助,還是說直接用軟件實現(xiàn)就好,有沒有源代碼,想?yún)⒖枷拢x謝
    發(fā)表于 10-14 08:29

    智能循跡小車光電探頭原理圖和PCB

    智能循跡小車光電探頭的原理圖和PCB
    發(fā)表于 09-26 06:31

    智能小車DIY攻略

    本文是為正準(zhǔn)備 DIY 一輛智能小車或已在進行中的學(xué)生、玩家們提供一些綜合、客觀的信息,作為其方案選擇、取舍的參考。系個人所見,歡迎交流、指正!
    發(fā)表于 09-26 06:22