基于Arduino的公交车报站器

前言

课程设计需要制作一个公交车报站器。设计思路,在指定路线上记录站点的经纬度,使用GPS模块来获取经纬度触发程序播放预存的MP3格式的音乐,再将地理位置信息放在显示屏上。结合之前做的时钟,那就可以在未到站的情况下显示时间,到站的时候进行一个报站。

准备

  • 材料
名称 数量
Arduino uno开发板 1
DFPlay mini mp3模块 1
内存卡 1
GPS模块 1
1.44TFT显示屏 1
8Ω 1.5W 小喇叭 1
小面包板 1
杜邦线 若干
  • Proteus 8软件
  • Arduino IDE

硬件设计框图

原理图绘制

软件设计框图

语音MP3制作

MP3用百度提供的语音合成来制作,下载并放到SD卡根目录MP3文件中(自己建一个)。
MP3的命名格式用xxxx.mp3,0001代表第一首。

GPS模块采集经纬度

如何采集经纬度信息可以看这篇文章Arduino读取GPS模块。
接下来是采集各个站点的经纬度,我在学校设置了站点,代替公交车站点。将站点的经纬度信息记录下来,取到秒截至,相差1秒大概相差30几米,具体情况要根据当地的经纬度为准。为了提高响应的速度,我将各站点的经纬度范围增大。
经纬度从串口取出,用excel的分列和数据透视取出最大最小经纬度值,适当可以增加经纬度范围增大。

所需库

这些库都可以在Arduino IDE管理库能下载。

 * Adafruit_GFX.h        //TFT显示屏核心库* Adafruit_ST7735.h  //ST7355库* TinyGPS++.h            //GPS模块库* DFPlayer_Mini_Mp3.h   //MP3播放模块库

程序

时钟程序

详细可以看我这篇博客解决Arduino使用LCD屏幕制作电子时钟的问题,这次程序加入了年份计算。

void time(){   //时间计算//tft.invertDisplay(0);//颜色翻转second = (SECOND + seconds) % 60;   //计算秒m = (SECOND + seconds) / 60;        //分钟进位minute = (MINUTE + m) % 60;  //计算分钟h = (MINUTE + m) / 60;       //小时进位hour = (HOUR + h) % 24;   //计算小时d = (HOUR + h) / 24;      //天数进位//day = (DAY + d) /12;    //计算天数  //显示时间tft.setTextColor(ST7735_YELLOW);//设置字体颜色为黄色tft.setTextSize(3);//设置字体大小tft.setCursor(20,10);hour_greater();      //显示小时tft.print(":");minute_greater();tft.drawFastHLine(0, 40, 128, ST7735_WHITE);//横线tft.setTextColor(ST7735_YELLOW);tft.setTextSize(3);//设置字体大小tft.setCursor(12,50);week();//显示星期tft.drawFastHLine(0, 80, 128, ST7735_WHITE);//横线tft.setCursor(5,90);tft.setTextSize(2);//设置字体大小Year();Month();Day();//tft.println("2019/12/7");//偷懒了
}void minute_greater()
{if(minute<10){tft.print("0");tft.print(minute);}else {tft.print(minute);}
}void hour_greater()
{if(hour<10){tft.print("0");tft.print(hour);}else {tft.print(hour);}
}/ ** 显示星期 **/
void week()
{int w = WEEK;switch(w){case 1: tft.println("MONDAY");break;case 2:tft.println("TUESDAY");break;case 3: tft.println("WEDDAY");break;case 4:tft.println("THUDAY");break;case 5:tft.println("FRIDAY");break;case 6:tft.println("SATDAY");break;case 7:tft.println("SUNDAY");break;default:break;}
}void modulation()
{   //刷屏调整时间if(minute1<minute || (minute1==59&&minute==0)){tft.fillScreen(ST7735_BLACK);minute1+=1;if(minute1 == 60){tft.fillScreen(ST7735_BLACK);minute1=0;   }}else if(hour==0){tft.fillScreen(ST7735_BLACK);WEEK+=1;if(WEEK==8){tft.fillScreen(ST7735_BLACK);WEEK=1;}}
}void clock()
{time();seconds = millis()/1000;       //millis()方法获得uno时间modulation();
}
//区分当月的天数
int Days(int year, int month){   int days = 0;if(month != 2){     switch(month){       case 1: case 3: case 5: case 7: case 8: case 10: case 12: days = 31;  break;case 4: case 6: case 9: case 11:  days = 30;  break;}} else{   //闰年    if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0){days = 29;}   else{days = 28;   }     }  return days;
}/** 计算当月天数 */
void Day(){      int days = Days(year,month);int days_up;if(month == 1){days_up = Days( year - 1, 12 );} else{days_up = Days( year, month - 1 );}  day = (DAY + d) % days;if(day == 0){day = days;    }   if((DAY + d) == days + 1){   DAY -= days;mon++;}if((DAY + d) == 0){DAY += days_up;mon--;}tft.print(day);
}/** 计算月份 **/
void Month(){   month = ( MONTH + mon ) % 12;if(month == 0){month = 12;//year = YEAR+1;}  y = (MONTH + mon - 1) / 12;tft.print(month);tft.print("/");
}/** 年份计算 **/
void Year(){if (y == 1){year = YEAR + 1;tft.print(year);tft.print("/");}else{year = YEAR;tft.print(year);tft.print("/");
}
}
语音报站程序
void location_mp3()
{while (ss.available() > 0){gps.encode(ss.read()); //The encode() method encodes the string in the encoding format specified by encoding.if (gps.location.isUpdated()){latitude = gps.location.lat(); //gps.location.lat() can export latitudelongitude = gps.location.lng();//gps.location.lng() can export latitudefloat a=latitude;float b=longitude;tft.fillScreen(ST7735_BLACK);tft.setTextColor(ST7735_YELLOW);  //字体颜色if ((a>=23.0352 && a<=23.0358) && (b>=114.4107 && b<=114.4113))  //宿舍{tft.drawFastHLine(0, 0, 128, ST7735_WHITE);//横线 tft.drawFastHLine(0, 30, 128, ST7735_WHITE);//横线tft.setCursor(20,5);   tft.setTextSize(2);tft.println("Location");   //显示位置tft.setTextSize(2);tft.setCursor(0,35);tft.println("Latitude:");   //显示经纬度信息tft.println(a, 4);        //显示到stft.print("Longitude:");tft.println(b, 4);mp3_play(9);delay(6000);tft.fillScreen(ST7735_BLACK); //刷新}else if ((a>=23.0366 && a<=23.0373) && (b>=114.410 && b<=114.41067))   //饭堂位置{tft.drawFastHLine(0, 0, 128, ST7735_WHITE);//横线 tft.drawFastHLine(0, 30, 128, ST7735_WHITE);//横线tft.setCursor(0,5);    tft.setTextSize(3);tft.println("Canteen");   //显示位置tft.setTextSize(2);tft.setCursor(0,35);tft.println("Latitude:");   //显示经纬度信息tft.println(a, 4);        //显示到stft.print("Longitude");tft.println(b, 4);mp3_play(6);delay(6000);tft.fillScreen(ST7735_BLACK); //刷新}else if ((a>=23.04 && a<=23.0410) && (b>=114.4105 && b<=114.4115))    //快递站{tft.drawFastHLine(0, 0, 128, ST7735_WHITE);//横线 tft.drawFastHLine(0, 30, 128, ST7735_WHITE);//横线tft.setCursor(0,5);   tft.setTextSize(1);tft.println("express station");   //显示位置tft.setTextSize(2);tft.setCursor(0,35);tft.println("Latitude:");   //显示经纬度信息tft.println(a, 4);        //显示到stft.print("Longitude");tft.println(b, 4);mp3_play(7);delay(6000);tft.fillScreen(ST7735_BLACK); //刷新      }else if ((a>=23.0393 && a<=23.0395) && (b>=114.4137 && b<=114.4139))      //图书馆{tft.drawFastHLine(0, 0, 128, ST7735_WHITE);//横线 tft.drawFastHLine(0, 30, 128, ST7735_WHITE);//横线tft.setCursor(0,5);   tft.setTextSize(2);tft.println("Library");   //显示位置tft.setTextSize(2);tft.setCursor(0,35);tft.println("Latitude:");   //显示经纬度信息tft.println(a, 4);        //显示到stft.print("Longitude");tft.println(b, 4);mp3_play(3);delay(6000);tft.fillScreen(ST7735_BLACK); //刷新 }else if ((a>=23.036 && a<=23.046) && (b>=114.4167 && b<=114.4173))      //校门口{tft.drawFastHLine(0, 0, 128, ST7735_WHITE);//横线 tft.drawFastHLine(0, 30, 128, ST7735_WHITE);//横线tft.setCursor(0,5);   tft.setTextSize(2);tft.println("school gate");   //显示位置tft.setTextSize(2);tft.setCursor(0,35);tft.println("Latitude:");   //显示经纬度信息tft.println(a, 4);        //显示到stft.print("Longitude");tft.println(b, 4);mp3_play(1);delay(6000);tft.fillScreen(ST7735_BLACK); //刷新    }else if ((a>=3 && a<=4) && (b>=3 && b<=4))      //电子楼暂未踩点{tft.drawFastHLine(0, 0, 128, ST7735_WHITE);//横线 tft.drawFastHLine(0, 30, 128, ST7735_WHITE);//横线tft.setCursor(0,5);   tft.setTextSize(2);tft.println("5 building");    //显示位置tft.setTextSize(2);tft.setCursor(0,35);tft.println("Latitude:");   //显示经纬度信息tft.println(a, 4);        //显示到stft.print("Longitude");tft.println(b, 4);mp3_play(1);delay(6000);tft.fillScreen(ST7735_BLACK); //刷新  }else if ((a>=23.0412 && a<=23.0424) && (b>=114.412 && b<=114.4163))      //双子星{tft.drawFastHLine(0, 0, 128, ST7735_WHITE);//横线 tft.drawFastHLine(0, 30, 128, ST7735_WHITE);//横线tft.setCursor(0,5);   tft.setTextSize(2);tft.println("5 building");    //显示位置tft.setTextSize(2);tft.setCursor(0,35);tft.println("Latitude:");   //显示经纬度信息tft.println(a, 4);        //显示到stft.print("Longitude");tft.println(b, 4);mp3_play(2);delay(5000);tft.fillScreen(ST7735_BLACK); //刷新   }else if ((a>=23.0404 && a<=23.0417) && (b>=114.4125 && b<=114.4135))      //旭日大楼{tft.drawFastHLine(0, 0, 128, ST7735_WHITE);//横线 tft.drawFastHLine(0, 30, 128, ST7735_WHITE);//横线tft.setCursor(0,5);   tft.setTextSize(2);tft.println("xuri building");    //显示位置tft.setTextSize(2);tft.setCursor(0,35);tft.println("Latitude:");   //显示经纬度信息tft.println(a, 4);        //显示到stft.print("Longitude");tft.println(b, 4);mp3_play(4);delay(6000);tft.fillScreen(ST7735_BLACK); //刷新}else if ((a>=23.0412 && a<=23.0427) && (b>=114.4105 && b<=114.415))      //3号楼{tft.drawFastHLine(0, 0, 128, ST7735_WHITE);//横线 tft.drawFastHLine(0, 30, 128, ST7735_WHITE);//横线tft.setCursor(0,5);   tft.setTextSize(2);tft.println("3 building");    //显示位置tft.setTextSize(2);tft.setCursor(0,35);tft.println("Latitude:");   //显示经纬度信息tft.println(a, 4);        //显示到stft.print("Longitude");tft.println(b, 4);mp3_play(8);delay(6000);tft.fillScreen(ST7735_BLACK); //刷新  }}}
}
完整程序
/** richowe* bus station broadcaster* program*//** mp3 files* 0001.mp3 : 惠州学院站 3s* 0002.mp3 : 双子星站  2s* 0003.mp3 : 图书馆站  2s* 0004.mp3 : 旭日大楼站 2s* 0005.mp3 : 电子楼站  2s* 0006.mp3 : 中苑饭堂站 3s* 0007.mp3 : 快递站 2s* 0008.mp3 : 3号楼站 2s* 0009.mp3 : 南苑5栋 3s* 0010.mp3 :欢迎使用公交车报站器*//** library function* Adafruit_GFX.h* Adafruit_ST7735.h* TinyGPS++.h* DFPlayer_Mini_Mp3.h*/#include <Adafruit_GFX.h>    // Core graphics library
#include <Adafruit_ST7735.h> // 导入库函数
#include <TinyGPS++.h>
#include <DFPlayer_Mini_Mp3.h>
#include <SoftwareSerial.h>
#include <SPI.h> #define TFT_CS     10   //定义TFT接线引脚
#define TFT_RST    9
#define TFT_DC     8
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);
#define TFT_SCLK 13
#define TFT_MOSI 11 TinyGPSPlus gps;
SoftwareSerial ss(4, 3);unsigned long seconds;
int m = 0, h = 0, d = 0, mon = 0 ,  y = 0;   //时间进位
int second = 0, minute = 0, hour = 0;  //时间
int SECOND = 0, MINUTE = 00, HOUR = 8, WEEK = 3;//设置当前时间
int year = 0, month = 0, day = 0;
int YEAR = 2019, MONTH = 12, DAY = 18;  //设置年月日
int minute1 = MINUTE; //调整时间
double latitude;  //纬度
double longitude; //经度void setup()
{tft.initR(INITR_144GREENTAB); //初始化Serial.begin(9600);//设置波特率ss.begin(9600);mp3_set_serial (Serial);delay(1);                 //等待1msmp3_set_volume (25);mp3_play(0010);tft.fillScreen(ST7735_BLACK);//设置黑屏tft.setRotation(2);//旋转屏幕180°
}void loop()
{if (ss.available() > 0)     //判断是否到站{location_mp3();}else{//tft.fillScreen(ST7735_BLACK);//刷屏clock();}
}void time(){   //时间计算//tft.invertDisplay(0);//颜色翻转second = (SECOND + seconds) % 60;   //计算秒m = (SECOND + seconds) / 60;        //分钟进位minute = (MINUTE + m) % 60;  //计算分钟h = (MINUTE + m) / 60;       //小时进位hour = (HOUR + h) % 24;   //计算小时d = (HOUR + h) / 24;      //天数进位//day = (DAY + d) /12;    //计算天数  //显示时间tft.setTextColor(ST7735_YELLOW);//设置字体颜色为黄色tft.setTextSize(3);//设置字体大小tft.setCursor(20,10);hour_greater();      //显示小时tft.print(":");minute_greater();tft.drawFastHLine(0, 40, 128, ST7735_WHITE);//横线tft.setTextColor(ST7735_YELLOW);tft.setTextSize(3);//设置字体大小tft.setCursor(12,50);week();//显示星期tft.drawFastHLine(0, 80, 128, ST7735_WHITE);//横线tft.setCursor(5,90);tft.setTextSize(2);//设置字体大小Year();Month();Day();//tft.println("2019/12/7");//偷懒了
}void minute_greater()
{if(minute<10){tft.print("0");tft.print(minute);}else {tft.print(minute);}
}void hour_greater()
{if(hour<10){tft.print("0");tft.print(hour);}else {tft.print(hour);}
}/ ** 显示星期 **/
void week()
{int w = WEEK;switch(w){case 1: tft.println("MONDAY");break;case 2:tft.println("TUESDAY");break;case 3: tft.println("WEDDAY");break;case 4:tft.println("THUDAY");break;case 5:tft.println("FRIDAY");break;case 6:tft.println("SATDAY");break;case 7:tft.println("SUNDAY");break;default:break;}
}void modulation()
{   //刷屏调整时间if(minute1<minute || (minute1==59&&minute==0)){tft.fillScreen(ST7735_BLACK);minute1+=1;if(minute1 == 60){tft.fillScreen(ST7735_BLACK);minute1=0;   }}else if(hour==0){tft.fillScreen(ST7735_BLACK);WEEK+=1;if(WEEK==8){tft.fillScreen(ST7735_BLACK);WEEK=1;}}
}void clock()
{time();seconds = millis()/1000;       //millis()方法获得uno时间modulation();
}
//区分当月的天数
int Days(int year, int month){   int days = 0;if(month != 2){     switch(month){       case 1: case 3: case 5: case 7: case 8: case 10: case 12: days = 31;  break;case 4: case 6: case 9: case 11:  days = 30;  break;}} else{   //闰年    if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0){days = 29;}   else{days = 28;   }     }  return days;
}/** 计算当月天数 */
void Day(){      int days = Days(year,month);int days_up;if(month == 1){days_up = Days( year - 1, 12 );} else{days_up = Days( year, month - 1 );}  day = (DAY + d) % days;if(day == 0){day = days;    }   if((DAY + d) == days + 1){   DAY -= days;mon++;}if((DAY + d) == 0){DAY += days_up;mon--;}tft.print(day);
}/** 计算月份 **/
void Month(){   month = ( MONTH + mon ) % 12;if(month == 0){month = 12;//year = YEAR+1;}  y = (MONTH + mon - 1) / 12;tft.print(month);tft.print("/");
}/** 年份计算 **/
void Year(){if (y == 1){year = YEAR + 1;tft.print(year);tft.print("/");}else{year = YEAR;tft.print(year);tft.print("/");
}
}void location_mp3()
{while (ss.available() > 0){gps.encode(ss.read()); //The encode() method encodes the string in the encoding format specified by encoding.if (gps.location.isUpdated()){latitude = gps.location.lat(); //gps.location.lat() can export latitudelongitude = gps.location.lng();//gps.location.lng() can export latitudefloat a=latitude;float b=longitude;tft.fillScreen(ST7735_BLACK);tft.setTextColor(ST7735_YELLOW);  //字体颜色if ((a>=23.0352 && a<=23.0358) && (b>=114.4107 && b<=114.4113))  //宿舍{tft.drawFastHLine(0, 0, 128, ST7735_WHITE);//横线 tft.drawFastHLine(0, 30, 128, ST7735_WHITE);//横线tft.setCursor(20,5);   tft.setTextSize(2);tft.println("Location");   //显示位置tft.setTextSize(2);tft.setCursor(0,35);tft.println("Latitude:");   //显示经纬度信息tft.println(a, 4);        //显示到stft.print("Longitude:");tft.println(b, 4);mp3_play(9);delay(6000);tft.fillScreen(ST7735_BLACK); //刷新}else if ((a>=23.0366 && a<=23.0373) && (b>=114.410 && b<=114.41067))   //饭堂位置{tft.drawFastHLine(0, 0, 128, ST7735_WHITE);//横线 tft.drawFastHLine(0, 30, 128, ST7735_WHITE);//横线tft.setCursor(0,5);    tft.setTextSize(3);tft.println("Canteen");   //显示位置tft.setTextSize(2);tft.setCursor(0,35);tft.println("Latitude:");   //显示经纬度信息tft.println(a, 4);        //显示到stft.print("Longitude");tft.println(b, 4);mp3_play(6);delay(6000);tft.fillScreen(ST7735_BLACK); //刷新}else if ((a>=23.04 && a<=23.0410) && (b>=114.4105 && b<=114.4115))    //快递站{tft.drawFastHLine(0, 0, 128, ST7735_WHITE);//横线 tft.drawFastHLine(0, 30, 128, ST7735_WHITE);//横线tft.setCursor(0,5);   tft.setTextSize(1);tft.println("express station");   //显示位置tft.setTextSize(2);tft.setCursor(0,35);tft.println("Latitude:");   //显示经纬度信息tft.println(a, 4);        //显示到stft.print("Longitude");tft.println(b, 4);mp3_play(7);delay(6000);tft.fillScreen(ST7735_BLACK); //刷新      }else if ((a>=23.0393 && a<=23.0395) && (b>=114.4137 && b<=114.4139))      //图书馆{tft.drawFastHLine(0, 0, 128, ST7735_WHITE);//横线 tft.drawFastHLine(0, 30, 128, ST7735_WHITE);//横线tft.setCursor(0,5);   tft.setTextSize(2);tft.println("Library");   //显示位置tft.setTextSize(2);tft.setCursor(0,35);tft.println("Latitude:");   //显示经纬度信息tft.println(a, 4);        //显示到stft.print("Longitude");tft.println(b, 4);mp3_play(3);delay(6000);tft.fillScreen(ST7735_BLACK); //刷新 }else if ((a>=23.036 && a<=23.046) && (b>=114.4167 && b<=114.4173))      //校门口{tft.drawFastHLine(0, 0, 128, ST7735_WHITE);//横线 tft.drawFastHLine(0, 30, 128, ST7735_WHITE);//横线tft.setCursor(0,5);   tft.setTextSize(2);tft.println("school gate");   //显示位置tft.setTextSize(2);tft.setCursor(0,35);tft.println("Latitude:");   //显示经纬度信息tft.println(a, 4);        //显示到stft.print("Longitude");tft.println(b, 4);mp3_play(1);delay(6000);tft.fillScreen(ST7735_BLACK); //刷新    }else if ((a>=3 && a<=4) && (b>=3 && b<=4))      //电子楼暂未踩点{tft.drawFastHLine(0, 0, 128, ST7735_WHITE);//横线 tft.drawFastHLine(0, 30, 128, ST7735_WHITE);//横线tft.setCursor(0,5);   tft.setTextSize(2);tft.println("5 building");    //显示位置tft.setTextSize(2);tft.setCursor(0,35);tft.println("Latitude:");   //显示经纬度信息tft.println(a, 4);        //显示到stft.print("Longitude");tft.println(b, 4);mp3_play(1);delay(6000);tft.fillScreen(ST7735_BLACK); //刷新  c=1;    }else if ((a>=23.0412 && a<=23.0424) && (b>=114.412 && b<=114.4163))      //双子星{tft.drawFastHLine(0, 0, 128, ST7735_WHITE);//横线 tft.drawFastHLine(0, 30, 128, ST7735_WHITE);//横线tft.setCursor(0,5);   tft.setTextSize(2);tft.println("5 building");    //显示位置tft.setTextSize(2);tft.setCursor(0,35);tft.println("Latitude:");   //显示经纬度信息tft.println(a, 4);        //显示到stft.print("Longitude");tft.println(b, 4);mp3_play(2);delay(5000);tft.fillScreen(ST7735_BLACK); //刷新   }else if ((a>=23.0404 && a<=23.0417) && (b>=114.4125 && b<=114.4135))      //旭日大楼{tft.drawFastHLine(0, 0, 128, ST7735_WHITE);//横线 tft.drawFastHLine(0, 30, 128, ST7735_WHITE);//横线tft.setCursor(0,5);   tft.setTextSize(2);tft.println("xuri building");    //显示位置tft.setTextSize(2);tft.setCursor(0,35);tft.println("Latitude:");   //显示经纬度信息tft.println(a, 4);        //显示到stft.print("Longitude");tft.println(b, 4);mp3_play(4);delay(6000);tft.fillScreen(ST7735_BLACK); //刷新}else if ((a>=23.0412 && a<=23.0427) && (b>=114.4105 && b<=114.415))      //3号楼{tft.drawFastHLine(0, 0, 128, ST7735_WHITE);//横线 tft.drawFastHLine(0, 30, 128, ST7735_WHITE);//横线tft.setCursor(0,5);   tft.setTextSize(2);tft.println("3 building");    //显示位置tft.setTextSize(2);tft.setCursor(0,35);tft.println("Latitude:");   //显示经纬度信息tft.println(a, 4);        //显示到stft.print("Longitude");tft.println(b, 4);mp3_play(8);delay(6000);tft.fillScreen(ST7735_BLACK); //刷新  }}}
}

实物展示

先放图片,演示视频还在制作中,改天放Arduino社区去。

总结

  • 完善时钟程序,获取GPS的UTS时间进行转换,更新当前时间
  • 可以加入掉电保护程序和低功耗程序
  • 可以使用OLED,利用U8g2库显示中文
  • 增加上行和下行线路
  • 增加FM收音功能
  • 增加广告
  • 联网,播报天气预报

基于Arduino的公交车报站器相关推荐

  1. 基于单片机的公交车报站系统

     word完整版可点击如下下载>>>>>>>> 基于单片机的公交车报站系统设计-硬件开发文档类资源-CSDN下载内容包括详细设计文档word版,附带开题 ...

  2. 【单片机毕业设计】【mcuclub-305】公交车报站 | 公交车自动报站 | 公交车语音报站

    设计简介: 项目名:基于单片机的公交车报站的设计-标准版 单片机:STC89C52 功能简介: 1.通过DS18B20测得公交车内温度 2.通过DS1302时钟模块获取当前时间 3.通过TTS语音播报 ...

  3. 基于51单片机公交车到站指示灯设计

    资源文件夹包含:proteus仿真+原理图:keil编写的C语言程序:详细设计说明书. 资源链接:加我QQ:1271370903 记得点赞收藏 一. 系统方案总体设计 1.1 研究意义和设计思路 近年 ...

  4. 83、基于STM32单片机的智能公交报站系统 公交车GPS定位时钟语音报站器

    毕设帮助.开题指导.技术解答(有偿)见文末. 目录 摘要 一.硬件方案 二.设计功能 三.实物图 四.原理图 五.PCB图 六. 硬件框图 七.流程图 八.程序源码 九.资料包括 摘要 本文详细介绍了 ...

  5. 毕业设计 基于Arduino的智能移动保湿器

    0 前言

  6. 基于GPS的嵌入式公交自动报站系统的研究

    基于GPS的嵌入式公交自动报站系统的研究 时间:2009-08-15 01:54:48  来源:   前,国内各大城市的无人售票公交车大都采用半自动报站系统,即通过人工干预语音信箱进行语音报站,和传统 ...

  7. 基于WT2003H语音芯片在GPS公交车自动报站系统的应用设计方案

    基于WT2003H语音芯片在GPS公交车自动报站系统的应用设计方案 一.方案概述 随着城市化进程的加快,公共交通作为城市的基础设施之一,仍然是绝大多数出行者的首选交通方式.为使得人们特别是为外来旅游. ...

  8. 基于51单片机的无线通讯公交报站系统

    近些年来,随着经济的飞速发展,人们对出行有了更高要求,公交车行业发展成为一个城市必不可少的交通工具,城市公交系统也开始快速发展,不仅公交车的型号不断更新换代,而且为了公司效益目前已经全部改成无人售票车 ...

  9. 基于Arduino开发板的吉他调音器

    嗨,大家好,在过去几周里,我一直在努力重新拾起对吉他的热爱.弹奏吉他是我几年前在弹奏萨克斯管之前选择放松的方式.回到吉他上,经过3年很少弹奏和弦之后,我发现不再知道每根琴弦应该如何发声,用我朋友的话说 ...

最新文章

  1. 外网远程桌面连接设置
  2. springboot10(docker)
  3. 【SSL】【Apache】 使用向导配置 https/ssl
  4. 如何通过 C# 自动捕获一个文件的变更?
  5. var obj = eval(result); 解析json
  6. [转载] Unicode文本排序和Unicode数据库
  7. java zoneid_java – ZoneId和LocalDateTime
  8. Sublime Text3 安装svn插件遇到的问题
  9. jquery层级原则器(匹配前一个元素后的下一个元素,必须是挨着的)
  10. 软件测试到底有多重要?
  11. spss自学过程案例
  12. 不可错过的《一步一步学Spring Boot》视频教程
  13. 从源代码编译和安装gluster
  14. linux创建桥接接口,Linux创建桥接网络
  15. 如何远程登陆Linux服务器
  16. 273222-06-3,(2S,4R)-Boc-4-amino-1-Fmoc-pyrrolidine-2-carboxylic acid,(2S,4R)-Fmoc-4-叔丁氧羰基氨基吡咯烷-2-甲酸
  17. 个人项目——二柱子程序升级版
  18. 在idea2021中遇到element tx:attributes is not allowed here的问题
  19. 使用switch语句根据消费金额计算折扣
  20. 关于Lyapunov李雅普诺夫判据——系统原点平衡状态大范围渐近稳定

热门文章

  1. kali linux中goldendict查词慢的问题
  2. [Flink课程]---- 9.1 使用Ambari 搭建Flink 集群
  3. vue高德多条轨迹导航+带途径节点标注+各路线颜色区别
  4. java做主成分分析_主成分分析PCA
  5. 部署卡巴斯基网络版6.0:客户端推拉测试
  6. 万能的应用商店_万能电影播放器
  7. php网页中出现问号,HTML_地址栏中的问号有什么作用,之前我们曾经解释?过链接地址 - phpStudy...
  8. 求一个数的所有因子(约数)
  9. STM32正倒计时器程序设计
  10. 珊瑚SDK多人游戏对战的系统支持!