Arduino 项目笔记 |一种动车到站提醒装置(Mifare RFID-RC522模组实验&语音播放模块)

背景介绍
  • 交通工具多样化的今天,铁路逐渐成为绿色、环保的出行方式的首选。作为大众化的交通工具,铁路在运输体系中居于骨干地位,坐火车是最安全、舒适、实惠的出行方式之一。然后在长途旅行过程中,一方面不少乘客会因为担心坐过站造成不敢放松休息,使旅途产生疲倦;另一方面,一些乘客由于休息没有注意列车到站,导致坐过站,在经济和心理上造成了负担。当前列车的提醒仅仅停留在安排专门的乘务人员到站没站提醒,乘务员不知道那些乘客需要到站下车,一些睡着的乘客有部分没有听到声音错过正确的下站时间。
作品介绍
  • 本作品所要解决的问题是提供一种列车到站提醒装置,通过座椅振动来提醒乘客即将到站。为解决上述问题,一种动车到站提醒装置包括:身份证识别模块、列车座椅、语音播报模块、振动电机。在座椅扶手右侧设有身份证识别组件,控制中心与列车乘客信息系统连接可精准读取乘客购票信息;列车座椅,在座椅内设有振动电机;座椅内还设有控制器和语音播报模块,控制器的输出端与振动电机连接,由控制器控制振动电机的启停。
成品展示在这里插入图片描述

在这里插入图片描述
在这里插入图片描述


#语音播放模块 MP3 提示器 触发一次播报一次 播报器 兼容 Arduino-微盛恒创#

在这里插入图片描述
#语音播报模块测试#

第一步:用文字转语音软件.exe 生成001.MP3格式文件,语音合成软件获取:

链接:https://pan.baidu.com/s/1lrcM4YlJFi0wrWqtkXznQA
提取码:y1be

001上车时:

欢迎您乘坐“和谐号”动车组列车,我们全体乘务人员向您问好,本次列车为您提供自助式旅行服务,请参阅《服务指南》或咨询乘务人员。为了保持设备设施功能良好,请您在使用时多加爱护。本次列车全列禁烟,如有违反者,乘警将依据《铁路安全管理条例》进行处罚。车厢内涂有红色标记的安全设施是紧急情况下使用的,请不要随意碰触,以免影响列车运行。前方到站:**站。

002前方到站:

1、女士们先生们,扬子江药业集团提醒您,列车前方停车站是:西安北站。
2、列车前方到站是:常州站。请下车的旅客提前整理好行李,避免错拿或遗忘在列车上。双门车厢的旅客,请在本车厢前部车门下车;单门车厢的旅客,请在本车厢先下,后上。“美的中央空调”号品牌列车祝您旅途愉快。

003到站时:

各位旅客列车已经到达**站,请拿好您的行李和贵重物品,从列车前进方向右侧车门下车,下车时请注意列车与站台之间的间隙。

第二步:将001.MP3文件拷贝至TF卡中,新建文件夹【01】-> 001.MP3

第三步:模块与喇叭接线(正极—焊盘为方形)

第四步:给模块单独上电:5V 1A(注意:USB供电模块不工作,相当于U盘)

第五步:语音测试 :模块引脚 A1与GND短接触发001.MP3播放

第六步:语音模块与Arduno Nano接线

A1————————D3(低电平触发)
A2————————D4
A3————————D
5V————————5V
GND——————GND

震动马达 与 Arduno Nano接线:

VCC ——3.3V
GND ——GND
Motor——D5(高电平触发)
LED—— (可不接)

在这里插入图片描述


#Mifare RFID-RC522模组实验#

第一步:MFRC522模块与Arduino Nano接线

3.3V———————————>3.3V
GND———————————>GND

RST/Reset ——RST----------> D9

SPI SS ——— SDA(SS) ------> D10
SPI MOSI —— MOSI --------- > D11
SPI MISO —— MISO-----------> D12
SPI SCK ——— SCK -------------> D13

在这里插入图片描述
第二步:添加库文件【项目】- 【加载库】 - 【管理库】输入 mfrc522
#include <SPI.h>
#include <MFRC522.h>

第三步:获取cardID 示例程序,【文件】 - 【示例】 - 【MFRC22】 - 【DumpInfo】

Card UID: F9 9E 20 BD
在这里插入图片描述
在这里插入图片描述

第四步:测试

//Viral Science
//RFID
#include <SPI.h>
#include <MFRC522.h>
#include <Servo.h>
 
#define SS_PIN 10
#define RST_PIN 9
#define LED_G 4 //define green LED pin
#define LED_R 5 //define red LED
#define BUZZER 2 //buzzer pin
MFRC522 mfrc522(SS_PIN, RST_PIN);   // Create MFRC522 instance.
Servo myServo; //define servo name
 
void setup() 
{
  Serial.begin(9600);   // Initiate a serial communication
  SPI.begin();      // Initiate  SPI bus
  mfrc522.PCD_Init();   // Initiate MFRC522
  myServo.attach(3); //servo pin
  myServo.write(0); //servo start position
  pinMode(LED_G, OUTPUT);
  pinMode(LED_R, OUTPUT);
  pinMode(BUZZER, OUTPUT);
  noTone(BUZZER);
  Serial.println("Put your card to the reader...");
  Serial.println();

}
void loop() 
{
  // Look for new cards
  if ( ! mfrc522.PICC_IsNewCardPresent()) 
  {
    return;
  }
  // Select one of the cards
  if ( ! mfrc522.PICC_ReadCardSerial()) 
  {
    return;
  }
  //Show UID on serial monitor
  Serial.print("UID tag :");
  String content= "";
  byte letter;
  for (byte i = 0; i < mfrc522.uid.size; i++) 
  {
     Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
     Serial.print(mfrc522.uid.uidByte[i], HEX);
     content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
     content.concat(String(mfrc522.uid.uidByte[i], HEX));
  }
  Serial.println();
  Serial.print("Message : ");
  content.toUpperCase();
  if (content.substring(1) == "83 23 38 BB") //change here the UID of the card/cards that you want to give access
  {
    Serial.println("Authorized access");
    Serial.println();
    delay(500);
    digitalWrite(LED_G, HIGH);
    tone(BUZZER, 500);
    delay(300);
    noTone(BUZZER);
    myServo.write(180);
    delay(5000);
    myServo.write(0);
    digitalWrite(LED_G, LOW);
  }
 
 else   {
    Serial.println(" Access denied");
    digitalWrite(LED_R, HIGH);
    tone(BUZZER, 300);
    delay(1000);
    digitalWrite(LED_R, LOW);
    noTone(BUZZER);
  }
} 

第五步:修改代码

//Viral Science
//RFID
#include <SPI.h>
#include <MFRC522.h>
 
#define SS_PIN 10
#define RST_PIN 9

#define LED_G 4 //define green LED pin
#define LED_R 5 //define red LED
#define BUZZER 2 //buzzer pin

MFRC522 mfrc522(SS_PIN, RST_PIN);   // Create MFRC522 instance.
 
void setup() 
{
  Serial.begin(9600);   // Initiate a serial communication
  SPI.begin();      // Initiate  SPI bus
  mfrc522.PCD_Init();   // Initiate MFRC522
  
  pinMode(LED_G, OUTPUT);
  pinMode(LED_R, OUTPUT);
  pinMode(BUZZER, OUTPUT);
  digitalWrite(BUZZER, HIGH);
    
  Serial.println("Put your card to the reader...");
  Serial.println();

}
void loop() 
{
  // Look for new cards
  if ( ! mfrc522.PICC_IsNewCardPresent()) 
  {
    return;
  }
  // Select one of the cards
  if ( ! mfrc522.PICC_ReadCardSerial()) 
  {
    return;
  }
  
  //Show UID on serial monitor
  Serial.print("UID tag :");
  String content= "";
  byte letter;
  for (byte i = 0; i < mfrc522.uid.size; i++) 
  {
     Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
     Serial.print(mfrc522.uid.uidByte[i], HEX);
     content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
     content.concat(String(mfrc522.uid.uidByte[i], HEX));
  }
  Serial.println();
  Serial.print("Message : ");
  content.toUpperCase();

  
  if (content.substring(1) == "F9 9E 20 BD") //change here the UID of the card/cards that you want to give access
  {
    Serial.println("Authorized access");
    Serial.println();
    delay(500);
    
    digitalWrite(BUZZER, LOW);//D2引脚触发语音播报模块001.MP3
    delay(500);
        
    digitalWrite(BUZZER, HIGH);
  }
 
 else   {
    Serial.println(" Access denied");
    digitalWrite(BUZZER, HIGH);
    digitalWrite(LED_R, HIGH);
    delay(1000);
    
    digitalWrite(LED_R, LOW);
    }
} 

测试3

//Viral Science
//RFID
#include <SPI.h>
#include <MFRC522.h>
 
#define SS_PIN 10
#define RST_PIN 9


#define BUZZER       2    //
#define Car_begin    3    //Pin3 触发启程提示语音 001.MP3
#define Car_end      4    //Pin4 触发到站提醒语音 002.MP3
#define Motor_shock  5  //到站震动提醒


boolean flag = true;//旗标

MFRC522 mfrc522(SS_PIN, RST_PIN);   // Create MFRC522 instance.
 
void setup() 
{
  Serial.begin(9600);   // Initiate a serial communication
  SPI.begin();      // Initiate  SPI bus
  mfrc522.PCD_Init();   // Initiate MFRC522
  
  pinMode(Car_begin, OUTPUT);
  pinMode(Car_end, OUTPUT);
  pinMode(Motor_shock, OUTPUT);

  digitalWrite(Car_begin, HIGH);    //语音模块低电平触发
  digitalWrite(Car_end, HIGH);    //语音模块低电平触发
  digitalWrite(Motor_shock, LOW);//震动马达高电平触发
    
  Serial.println("Put your card to the reader...");
  Serial.println();

}
void loop() 
{
  // Look for new cards
  if ( ! mfrc522.PICC_IsNewCardPresent()) 
  {
    return;
  }
  // Select one of the cards
  if ( ! mfrc522.PICC_ReadCardSerial()) 
  {
    return;
  }
  
  //Show UID on serial monitor
  Serial.print("UID tag :");
  String content= "";
  byte letter;
  for (byte i = 0; i < mfrc522.uid.size; i++) 
  {
     Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
     Serial.print(mfrc522.uid.uidByte[i], HEX);
     content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
     content.concat(String(mfrc522.uid.uidByte[i], HEX));
  }
  Serial.println();
  Serial.print("Message : ");
  content.toUpperCase();

  
  if ((content.substring(1) == "F9 9E 20 BD" ) && ( flag == true)) //change here the UID of the card/cards that you want to give access
  {
    Serial.println("Authorized access");
    Serial.println();
    delay(30);    
    digitalWrite(Car_begin, LOW);//触发语音播报模块001.MP3
    delay(500);        
    digitalWrite(Car_begin, HIGH);//停止播报

    for(int timer = 60;timer >=0 ;timer--){

        delay(1000);  
        Serial.print("timer:");
        Serial.println(timer);

      if(timer == 15)
      {
        digitalWrite(Car_end, LOW);//触发语音播报模块003.MP3
        delay(500);        
        digitalWrite(Car_end, HIGH);//停止播报     
        
        }

        else if(timer > 0 && timer <= 10 )
        {
          digitalWrite(Motor_shock, HIGH);//震动马达高电平触发
          }
        else
        {
           digitalWrite(Motor_shock, LOW); //停止震动
           digitalWrite(Car_end, HIGH);    //停止播报
          }
      
      
      }

    

    flag = false;
  }
  
 
 else   {
      Serial.println(" Access denied");
      digitalWrite(Car_begin, HIGH);    //停止播报
      digitalWrite(Car_end, HIGH);      //停止播报
      flag = true;
    }
} 

测试四

//Viral Science
//RFID
#include <SPI.h>
#include <MFRC522.h>
 
#define SS_PIN 10
#define RST_PIN 9


#define BUZZER       2    //
#define Car_begin    3    //Pin3 触发启程提示语音 001.MP3
#define Car_end      4    //Pin4 触发到站提醒语音 002.MP3
#define Motor_shock  5  //到站震动提醒


boolean flag = true;//旗标

MFRC522 mfrc522(SS_PIN, RST_PIN);   // Create MFRC522 instance.
 
void setup() 
{
  Serial.begin(9600);   // Initiate a serial communication
  SPI.begin();      // Initiate  SPI bus
  mfrc522.PCD_Init();   // Initiate MFRC522
  
  pinMode(Car_begin, OUTPUT);
  pinMode(Car_end, OUTPUT);
  pinMode(Motor_shock, OUTPUT);

  digitalWrite(Car_begin, HIGH);    //语音模块低电平触发
  digitalWrite(Car_end, HIGH);    //语音模块低电平触发
  digitalWrite(Motor_shock, LOW);//震动马达高电平触发
    
  Serial.println("Put your card to the reader...");
  Serial.println();

}
void loop() 
{
  // Look for new cards
  if ( ! mfrc522.PICC_IsNewCardPresent()) 
  {
    return;
  }
  // Select one of the cards
  if ( ! mfrc522.PICC_ReadCardSerial()) 
  {
    return;
  }
  
  //Show UID on serial monitor
  Serial.print("UID tag :");
  String content= "";
  byte letter;
  
  for (byte i = 0; i < mfrc522.uid.size; i++) 
  {
     Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
     Serial.print(mfrc522.uid.uidByte[i], HEX);
     content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
     content.concat(String(mfrc522.uid.uidByte[i], HEX));
  }
  Serial.println();
  Serial.print("Message : ");
  content.toUpperCase();

  
  if (content.substring(1) == "F9 9E 20 BD"  ) //&& ( flag = true)    - change here the UID of the card/cards that you want to give access
  {
    Serial.println("Authorized access");
    Serial.println();
    delay(30);    
    digitalWrite(Car_begin, LOW);//触发语音播报模块001.MP3
    delay(1000);        
    digitalWrite(Car_begin, HIGH);//停止播报

    

    for(int timer = 60;timer >=0 ;timer--)
    {
      
        Serial.print("timer:");
        Serial.println(timer);
        delay(1000);  

      if(timer == 15)
      {
        digitalWrite(Car_end, LOW);//触发语音播报模块003.MP3
        delay(1000);        
        digitalWrite(Car_end, HIGH);//停止播报     
        
        }

        else if(timer > 0 && timer <= 10 )
        {
          digitalWrite(Motor_shock, HIGH);//震动马达高电平触发
          }
        else
        {
           digitalWrite(Motor_shock, LOW); //停止震动
           digitalWrite(Car_end, HIGH);    //停止播报
          }
           
      }

       flag = false;//
   
  }
  
 
 else   
 {
      Serial.println(" Access denied");
      digitalWrite(Car_begin, HIGH);    //停止播报
      digitalWrite(Car_end, HIGH);      //停止播报
      flag = true;
  }
} 

参考文档:
1.Mifare RFID-RC522模组实验(一):读取Mifare RFID卡的UID识别码
2.Arduino RFID Sensor (MFRC522) Tutorial(YouTube视频教程)
3.Arduino RFID Sensor (MFRC522) Tutorial(文章)


评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Naiva

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值