色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于STM32的鐵路自動圍欄系統設計

DS小龍哥-嵌入式技術 ? 來源:DS小龍哥-嵌入式技術 ? 作者:DS小龍哥-嵌入式技 ? 2023-05-17 16:26 ? 次閱讀

一、項目背景

隨著城市規模的不斷擴大和交通運輸方式的日益發展,鐵路與公路的交叉口已經成為常見的場景。然而,這些交叉口往往存在一定的安全隱患,因為有時不易發現列車行進的情況,導致公路上的車輛或行人可能會無意中闖入鐵路區域,從而引發重大交通事故。

為了解決這個問題,當前開發了一款基于STM32的鐵路自動圍欄系統。該系統采用了STM32F103RCT6作為主控芯片,并使用步進電機來控制鐵路圍欄的開啟和閉合。同時,系統還配備了紅外感應器,以便能夠及時監測到列車的通過情況。

當系統監測到有列車即將通過鐵路交叉口時,公路信號燈會立刻變為紅燈,蜂鳴器也會發出警報聲音,以提醒行人和車輛注意安全。同時,鐵路兩側的圍欄也會自動關閉,在列車通過后再次打開。這樣,就能有效地防止公路車輛和行人誤闖鐵路區域,保障了路人的安全。

image-20230517104342760

二、系統設計

2.1 硬件部分

STM32F103RCT6主鐵路自動圍欄系統的硬件部分主要包括:STM32F103RCT6主控芯片、步進電機、紅外感應器、信號燈、蜂鳴器。 【1】STM32F103RCT6主控芯片是整個系統的核心,負責控制圍欄的開啟和閉合、監測紅外感應器的狀態、控制信號燈的變化以及控制蜂鳴器的報警聲音。

【2】步進電機是用來控制鐵路圍欄的開啟和閉合的設備,其動力來源為驅動芯片ULN2003。

【3】紅外感應器是用來監測列車的通過情況,當感應到列車時輸出高電平信號,否則輸出低電平信號。

【4】信號燈則用來提示道路行人和車輛當前狀態,紅燈表示停止,綠燈表示通行。

【5】蜂鳴器則是用來發出報警聲音,提醒行人和車輛注意安全。

2.2 軟件部分

程序主要分為四部分:系統初始化、紅外感應器檢測、鐵路圍欄控制和信號燈控制。

【1】系統初始化主要是對硬件進行初始化,包括設置STM32的時鐘、GPIO口的初始化等。

【2】紅外感應器檢測部分則是對紅外感應器進行監測,當感應到列車時輸出高電平信號,程序通過讀取該信號實現對鐵路圍欄的控制和信號燈的變化。

【3】鐵路圍欄控制部分主要是通過對步進電機的控制來實現圍欄的開啟和閉合。

【4】信號燈控制部分則是通過對GPIO口的控制來實現信號燈的變化,當感應到列車時,將信號燈變為紅色,否則為綠色。

三、核心代碼實現

3.1 28BYJ48步進電機代碼

以下是使用STM32F103RCT6驅動28BYJ-48步進電機實現正反轉控制并封裝成子函數調用的完整代碼實現過程。

首先,需要定義相關引腳和變量:

#include "stm32f10x.h"
?
#define IN1_PIN GPIO_Pin_0
#define IN2_PIN GPIO_Pin_1
#define IN3_PIN GPIO_Pin_2
#define IN4_PIN GPIO_Pin_3
?
GPIO_InitTypeDef GPIO_InitStructure;
?
uint8_t step = 0;

然后,編寫初始化GPIO的代碼:

void init_GPIO(void)
{
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
?
  GPIO_InitStructure.GPIO_Pin = IN1_PIN | IN2_PIN | IN3_PIN | IN4_PIN;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
}

接著,編寫正轉和反轉函數的代碼:

void forward(void)
{
  switch(step)
   {
    case 0:
      GPIO_SetBits(GPIOA, IN1_PIN);
      GPIO_ResetBits(GPIOA, IN2_PIN | IN3_PIN | IN4_PIN);
      break;
    case 1:
      GPIO_SetBits(GPIOA, IN1_PIN | IN2_PIN);
      GPIO_ResetBits(GPIOA, IN3_PIN | IN4_PIN);
      break;
    case 2:
      GPIO_SetBits(GPIOA, IN2_PIN);
      GPIO_ResetBits(GPIOA, IN1_PIN | IN3_PIN | IN4_PIN);
      break;
    case 3:
      GPIO_SetBits(GPIOA, IN3_PIN | IN2_PIN);
      GPIO_ResetBits(GPIOA, IN1_PIN | IN4_PIN);
      break;
    case 4:
      GPIO_SetBits(GPIOA, IN3_PIN);
      GPIO_ResetBits(GPIOA, IN1_PIN | IN2_PIN | IN4_PIN);
      break;
    case 5:
      GPIO_SetBits(GPIOA, IN4_PIN | IN3_PIN);
      GPIO_ResetBits(GPIOA, IN1_PIN | IN2_PIN);
      break;
    case 6:
      GPIO_SetBits(GPIOA, IN4_PIN);
      GPIO_ResetBits(GPIOA, IN1_PIN | IN2_PIN | IN3_PIN);
      break;
    case 7:
      GPIO_SetBits(GPIOA, IN1_PIN | IN4_PIN);
      GPIO_ResetBits(GPIOA, IN2_PIN | IN3_PIN);
      break;
   }
  step++;
  if(step == 8)
   {
    step = 0;
   }
}
?
void backward(void)
{
  switch(step)
   {
    case 0:
      GPIO_SetBits(GPIOA, IN1_PIN | IN4_PIN);
      GPIO_ResetBits(GPIOA, IN2_PIN | IN3_PIN);
      break;
    case 1:
      GPIO_SetBits(GPIOA, IN4_PIN);
      GPIO_ResetBits(GPIOA, IN1_PIN | IN2_PIN | IN3_PIN);
      break;
    case 2:
      GPIO_SetBits(GPIOA, IN3_PIN | IN4_PIN);
      GPIO_ResetBits(GPIOA, IN1_PIN | IN2_PIN);
      break;
    case 3:
      GPIO_SetBits(GPIOA, IN3_PIN);
      GPIO_ResetBits(GPIOA, IN1_PIN | IN2_PIN | IN4_PIN);
      break;
    case 4:
      GPIO_SetBits(GPIOA, IN2_PIN | IN3_PIN);
      GPIO_ResetBits(GPIOA, IN1_PIN | IN4_PIN);
      break;
    case 5:
      GPIO_SetBits(GPIOA, IN2_PIN);
      GPIO_ResetBits(GPIOA, IN1_PIN | IN3_PIN | IN4_PIN);
      break;
    case 6:
      GPIO_SetBits(GPIOA, IN1_PIN | IN2_PIN);
      GPIO_ResetBits(GPIOA, IN3_PIN | IN4_PIN);
      break;
    case 7:
      GPIO_SetBits(GPIOA, IN1_PIN);
      GPIO_ResetBits(GPIOA, IN2_PIN | IN3_PIN | IN4_PIN);
      break;
   }
  step--;
  if(step == -1)
   {
    step = 7;
   }
}

最后,可以封裝正轉和反轉函數成子函數:

void rotate_motor(int steps, int direction)
{
  int i = 0;
  for(i = 0; i < steps; i++)
? ?  {
? ? ? ? ?if(direction == 0)
? ? ? ?  {
? ? ? ? ? ? ?forward();
? ? ? ?  }
? ? ? ? ?else if(direction == 1)
? ?  {
? ? ? ? ?backward();
? ?  }
?}
??
?void motor_stop(void)
?{
?    GPIO_ResetBits(GPIOA, IN1_PIN | IN2_PIN | IN3_PIN | IN4_PIN);
?}

最后,可以在主函數中使用這些封裝好的子函數:

int main(void)
{
  init_GPIO();
?
  // 正轉200步
  rotate_motor(200, 0);
?
  // 反轉100步
  rotate_motor(100, 1);
?
  // 停止電機
  motor_stop();
?
  while (1);
}

3.2 蜂鳴器報警代碼

#include "stm32f10x.h"
#define BUZZER_GPIO_PIN GPIO_Pin_7 
#define BUZZER_GPIO_PORT GPIOC
?
void buzzer_init(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
?
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
  GPIO_InitStructure.GPIO_Pin = BUZZER_GPIO_PIN;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // 推挽輸出模式
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(BUZZER_GPIO_PORT, &GPIO_InitStructure);
}
?
void buzzer_on(void)
{
  GPIO_SetBits(BUZZER_GPIO_PORT, BUZZER_GPIO_PIN); // Buzzer on
}
?
void buzzer_off(void)
{
  GPIO_ResetBits(BUZZER_GPIO_PORT, BUZZER_GPIO_PIN); // Buzzer off
}

3.3 紅外感應器代碼

#include "stm32f10x.h"
#define IR_GPIO_PIN GPIO_Pin_1 
#define IR_GPIO_PORT GPIOA
?
void ir_init(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
  EXTI_InitTypeDef EXTI_InitStructure;
  NVIC_InitTypeDef NVIC_InitStructure;
?
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
  GPIO_InitStructure.GPIO_Pin = IR_GPIO_PIN;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; // 下拉輸入模式
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(IR_GPIO_PORT, &GPIO_InitStructure);
?
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
  GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource1);
?
  EXTI_InitStructure.EXTI_Line = EXTI_Line1; // 對應中斷線 EXTI1
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling; // 上升沿和下降沿觸發
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(&EXTI_InitStructure);
?
  NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQn; // 中斷向量
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02; // 搶占優先級2
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x03; // 響應優先級3
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
}
?
void EXTI1_IRQHandler(void)
{
  if (EXTI_GetITStatus(EXTI_Line1) != RESET)
   {
    // Do something when IR sensor detects the train
    EXTI_ClearITPendingBit(EXTI_Line1);
   }
}

3.4 信號燈控制代碼

#include "stm32f10x.h"
#define LED_GREEN_GPIO_PIN GPIO_Pin_6 
#define LED_GREEN_GPIO_PORT GPIOB
#define LED_RED_GPIO_PIN GPIO_Pin_7 
#define LED_RED_GPIO_PORT GPIOB
?
void led_init(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
?
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
  GPIO_InitStructure.GPIO_Pin = LED_GREEN_GPIO_PIN | LED_RED_GPIO_PIN;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // 推挽輸出模式
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOB, &GPIO_InitStructure);
}
?
void led_green_on(void)
{
  GPIO_SetBits(LED_GREEN_GPIO_PORT, LED_GREEN_GPIO_PIN); // Green LED on
}
?
void led_green_off(void)
{
  GPIO_ResetBits(LED_GREEN_GPIO_PORT, LED_GREEN_GPIO_PIN); // Green LED off
}
?
void led_red_on(void)
{
  GPIO_SetBits(LED_RED_GPIO_PORT, LED_RED_GPIO_PIN); // Red LED on
}
?
void led_red_off(void)
{
  GPIO_ResetBits(LED_RED_GPIO_PORT, LED_RED_GPIO_PIN); // Red LED off
}

四、總結

當前設計的這種基于STM32的鐵路自動圍欄系統,通過對鐵路交叉口進行有效的監測和控制,實現了對過往車輛和行人的有效防護。該系統采用STM32F103RCT6作為主控芯片,使用步進電機控制鐵路圍欄的開啟和閉合,使用紅外感應器來監測列車的通過情況。在公路與鐵路的交叉路口,若在遠處感應到有列車即將通過,則公路信號燈變為紅燈,蜂鳴器報警,鐵路兩側圍欄自動閉合;直至感應到列車徹底離開,公路信號燈變為綠燈,蜂鳴器關閉,圍欄打開。系統具有結構簡單、性能可靠等優點,在實際應用中取得了良好的效果。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 芯片
    +關注

    關注

    455

    文章

    50714

    瀏覽量

    423142
  • STM32
    +關注

    關注

    2270

    文章

    10895

    瀏覽量

    355740
  • 步進電機
    +關注

    關注

    150

    文章

    3109

    瀏覽量

    147443
  • 鐵路
    +關注

    關注

    1

    文章

    67

    瀏覽量

    17887
  • 單片機
    +關注

    關注

    0

    文章

    214

    瀏覽量

    16658
收藏 人收藏

    評論

    相關推薦

    煤礦人員定位系統——基于UWB技術帶電子圍欄功能

    要求掘進面等位置必須要配套電子圍欄功能,包括但不限于激光雷達、UWB、視頻分析等方式,后續貴州等省份也都在陸續跟進,這就對人員定位系統提出了更高的要求。  深圳市硅傳科技有限公司研發的UWB人員定位
    發表于 06-27 15:11

    鐵路通信資源管理系統

    摘要:提出并研究了一種以專業的圖形化設計管理軟件VisualNet為平臺,無需編程和二次開發,進行鐵路通信資源管理系統的構建過程。介紹了鐵路通信設備圖庫的建庫方法、設計過程,以及怎樣利用該系統
    發表于 12-13 14:44

    機器視覺與鐵路安全的未來-如何減少列車事故

    視覺技術為鐵路自動監測系統提供了一種可能,系統通過使用多種成像技術可以記錄和報告列車、鐵軌和基礎設施的狀況,如圖1所示。通過檢查鐵軌、機車和車輛的缺陷可以提高
    發表于 12-01 16:38

    SKYLAB助力共享單車搭建電子圍欄系統

    劃定一個區域,系統后臺會檢測單車用戶是否將單車停放在該區域內,從而對單車停放實現統一管理。 電子圍欄是否實用的關鍵點就在于對停車區域識別的精準度上。以目前的OFO小黃車為例,它采用的就是北斗導航提出
    發表于 07-27 11:55

    電子圍欄有什么功能?

    電子圍欄按其在現場的安裝位置,分為獨立式,附屬式和墻頂式三種基本安裝形式。獨立式電子圍欄,直接架設在地面上。其高度約2米左右,一般安裝10-12根線纜??紤]到設備和人身安全,要求在獨立式電 子圍欄的一側或兩側,安裝不低于1.2m
    發表于 10-11 09:01

    嵌入式系統鐵路道口報警系統中有哪些應用?

    系統是一種工業控制領域用途廣泛的系統軟件,有著大家熟悉和友好的用戶界面、統一的編程界面、強大的通訊功能而成為道口自動報警系統改型中首選的操作系統
    發表于 11-05 07:00

    綜合自動化技術在鐵路變配電所的應用

    鑒于綜合自動化技術在鐵路變配電所的應用,對提高貫通(自閉) 線供電的可靠性,保障鐵路遠輸安全起到了關鍵的作用,因此結合以往設計的工程項目,簡單闡述鐵路變配電所綜合
    發表于 10-20 09:15 ?12次下載
    綜合<b class='flag-5'>自動</b>化技術在<b class='flag-5'>鐵路</b>變配電所的應用

    關于脈沖電子圍欄在周界報警系統中的技術應用

    電子圍欄以往的案例中,廣泛用于小區及工業領域,以及學校等場地。電子圍欄是先進的周界防盜報警系統,它由電子圍欄主機和前端探測圍欄組成。電子
    發表于 08-12 15:30 ?910次閱讀

    脈沖電子圍欄對人體有沒有傷害,如何區別電子圍欄和電網

    電子圍欄不等于傳統電網,脈沖電子圍欄并不是電網。 電子圍欄:目前最先進的周界防盜報警系統就是脈沖電子圍欄,
    發表于 08-12 15:38 ?5479次閱讀

    淺談脈沖電子圍欄系統的組成及功能

    AILIFU艾禮富脈沖電子圍欄系統組成主要由電子圍欄主機、前端配件(終端桿、中間承力桿、終端桿絕緣子、承力桿絕子、高壓避雷器、高壓線、合金線、圍欄警示牌、線線連接器、萬向底座、避雷器支
    發表于 04-01 11:41 ?1459次閱讀

    脈沖電子圍欄的設計與安裝

    脈沖電子圍欄基本原理就是發出高壓脈沖,由脈沖發生器(主機)和前端圍欄組成的智能型周界系統。具有防盜、報警等高安全等級的周界防范功能?,F代公共安全用 電子圍欄經過演變和改進,成為一種新型
    發表于 06-30 13:52 ?1019次閱讀

    鐵路交通自動控制系統開源

    電子發燒友網站提供《鐵路交通自動控制系統開源.zip》資料免費下載
    發表于 01-31 14:06 ?0次下載
    <b class='flag-5'>鐵路</b>交通<b class='flag-5'>自動控制系統</b>開源

    鐵路10kV變配電所綜合自動系統的應用

    摘要: 目前,在先進技術手段的推動下,國內鐵路10kV變配電系統自動化程度逐漸提升,進一步增強了鐵路的管理運營效深本文將對鐵路供電
    的頭像 發表于 04-01 13:24 ?669次閱讀
    <b class='flag-5'>鐵路</b>10kV變配電所綜合<b class='flag-5'>自動</b>化<b class='flag-5'>系統</b>的應用

    變配電所綜合自動系統鐵路上有什么應用

    z張欣 安科瑞電氣股份有限公司 上海嘉定 201801 摘要:目前,在先進技術手段的推動下,國內鐵路10kV變配電系統自動化程度逐漸提升,進一步增強了鐵路的管理運營效深本文將對
    的頭像 發表于 04-03 15:09 ?468次閱讀
    變配電所綜合<b class='flag-5'>自動</b>化<b class='flag-5'>系統</b>在<b class='flag-5'>鐵路</b>上有什么應用

    車輛電子圍欄系統:守護愛車安全的智能新防線

    在日新月異的科技時代,汽車已不再僅僅是代步工具,它們正逐步融入智能化、網絡化的浪潮之中。其中,車輛電子圍欄系統作為一項創新的安全技術,正悄然成為車主們守護愛車安全的新寵。下面我們看看深圳滄穹科技給
    的頭像 發表于 08-20 11:06 ?456次閱讀
    車輛電子<b class='flag-5'>圍欄</b><b class='flag-5'>系統</b>:守護愛車安全的智能新防線
    主站蜘蛛池模板: 蜜桃久久久亚洲精品成人| 国产精品视频免费视频| writeas雷狮直播| www.绿巨人| 国产精品一区二区在线观看| 国产亚洲视频中文字幕| 久久黄色录像| 免费精品一区二区三区在线观看 | 草莓国产视频免费观看| 国产97碰免费视频| 国产在线观看成人| 美国caopo超碰在线视频| 日本乱子伦一区二区三区| 午夜aaaa| 孕妇bbwbbwbbwbbw超清| ppypp日本欧美一区二区| 国产精品亚洲精品久久品| 久久精品热播在线看| 碰超成人在线公开免费视频| 无人区乱码1区2区3区网站| 印度最猛性ⅹxxxxx| S货SAO死你BL大点声叫BL| 国产人妻人伦精品无码.麻豆| 久久频这里精品99香蕉久网址| 强奷漂亮女老板在线播放| 亚洲国产综合人成综合网站00| 中文字幕在线观看亚洲日韩| 岛国大片在线播放高清| 久久国产精品福利影集| 日韩在线视频www色| 又亲又揉摸下面视频免费看| 变形金刚7免费观看完整| 精品含羞草免费视频观看| 欧美伊人久久大香线蕉综合69| 亚洲AV蜜桃永久无码精品无码网| 中文字幕在线久热精品| 国产精品乱码一区二区三| 美女伸开两腿让我爽| 亚洲 欧美 中文字幕 在线| 91欧美秘密入口| 国产在线精彩视频|