是舒克呀
无人停车场运行收费系统
通过Arduino uno 开发板 RFID射频技术以及DS1302、OLED屏幕、按键、指示灯等人机交互实现无人停车场自主运行收费系统,后期也可以根据需求自行添加功能
RC522读卡号
通过RC522与开发板之间的SPI总线通讯进行IC卡号读取,通过程序将读取到的卡号与系统设置的卡号进行对比,如果卡号为本系统(停车场内用户)则驱动舵机运转,打开闸门,使车辆通过进入车库,同时激活收费系统。
rfid.isCard();
if (rfid.readCardSerial())
{
Serial.print("your card id is : ");
Serial.print(rfid.serNum[0]);
Serial.print(" , ");
Serial.print(rfid.serNum[1],BIN);
Serial.print(" , ");
Serial.print(rfid.serNum[2],BIN);
Serial.print(" , ");
Serial.print(rfid.serNum[2],BIN);
Serial.print(" , ");
Serial.print(rfid.serNum[4],BIN);
Serial.println(" ");
停车场收费系统:
停车场收费系统 OLED屏幕上方显示当前时间年月日等信息,没有刷卡时当前状态显示无,当本系统用户刷卡后显示计费状态,下方需缴费栏则显示需缴纳的费用,系统收费扣费是对于IC卡进行的,在刷卡过程自动完成计费和收费,无需人员进行操作,对于卡内金额可通过APP或者充值站进行自主充值。
DS1302时钟模块
时钟模块用于进行时钟校准以及显示当前时间,该时间可以实现掉电存储,内部仍然继续计时,DS1302时间校准可以通过串口进行发送时间日期等数据进行校准
oid print_time()
{
Time t = rtc.time();
memset(day, 0, sizeof(day));
switch (t.day)
{
case 1: strcpy(day, "Sunday"); break;
case 2: strcpy(day, "Monday"); break;
case 3: strcpy(day, "Tuesday"); break;
case 4: strcpy(day, "Wednesday"); break;
case 5: strcpy(day, "Thursday"); break;
case 6: strcpy(day, "Friday"); break;
case 7: strcpy(day, "Saturday"); break;
}
snprintf(buf, sizeof(buf), "%s %d-%d-%d %d:%d:%d", day, t.yr, t.mon, t.date, t.hr, t.min, t.sec);
Serial.println(buf);
ds1302_nian=t.yr; ds1302_yue=t.mon; ds1302_ri=t.date;
ds1302_shi=t.hr; ds1302_fen=t.min; ds1302_miao=t.sec;
}
void ds1302_jishi()
{
ds1302_flag=0;
while (Serial.available() > 0)
{
comdata += char(Serial.read());
delay(2);
mark = 1;
}
if(mark == 1)
{
Serial.print("You inputed : ");
Serial.println(comdata);
for(int i = 0; i < comdata.length() ; i++)
{
if(comdata[i] == ',' || comdata[i] == 0x10 || comdata[i] == 0x13)
{
j++;
}
else
{
numdata[j] = numdata[j] * 10 + (comdata[i] - '0');
}
}
Time t(numdata[0], numdata[1], numdata[2], numdata[3], numdata[4], numdata[5], numdata[6]);
rtc.time(t);
mark = 0;j=0;
comdata = String("");
for(int i = 0; i < 7 ; i++) numdata[i]=0;
}
print_time();
delay(1000);
ds1302_flag=1;
if(shuaka)
{
shoufei+=1;
RFID_flag=1;
}
}
舵机模拟开闸
调用Servi.h库,舵机操作就边得很简单了,在myservo.writ()中输入角度即可驱动舵机转指定角度,180/90°舵机可以进行此类操作,若舵机极限角度为90或者180°时应适当调整转动角度-3左右为转动实际角度,不然会产生舵机抖动。
void Servo_Contron()
{
myservo.write(90);delay(2000);
myservo.write(0);
}
若需要完整代码可通过微信公众号《是舒克呀》添加作者微信获取
|