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