基于arduino uno 开发板制作的 智能书包项目
生活随笔
收集整理的這篇文章主要介紹了
基于arduino uno 开发板制作的 智能书包项目
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
基于arduino uno 開發板制作的智能書包,當時收短視頻啟發,集合自動售貨機的代碼和RC522 讀卡模塊代碼結合制作,現基本功能可以實現 ,目前代碼部分尚不穩定需要繼續改進
//一個智能書包小發明 //用干簧管檢測書包開合 //用MFRC522檢測每一本數的定義,用一張IC卡設置為課程表 //1打開書包刷卡程序運行 //2刷課程表,如果沒有刷課表則語音提醒 //3放入課本每張課本貼一個IC卡用作識別,根據課表放入相對應課本如果課本不全,關閉書包出發干簧管則報警 //本次發明使用 arduion uno 8900語音模塊一個 干簧管開關一個 #include <SPI.h> #include <MFRC522.h> #include <Servo.h>#define SS_PIN 10 #define RST_PIN 9 //#define button_delay 5 //單按鈕消除抖動延時 //#define button_every_delay 50 //多按鈕操作間隔//io高低點吧狀態標志位,0代表低電平,1代表高電平 //bool io_flag[3]={0,0,0};//按鈕變化標志位,0代表無變化,1代表有變化 //bool button_flag[3]={0,0,0};int i; int audo1= 2 ; //語音模塊 int audo2= 3 ; int audo3= 4 ; int audo4= 5 ; int audo5= 6 ; int audo6= 8 ; int audo7= 9 ; int LED=8; int reed_switch= 7 ; //干簧管開關 int master; int reed_status; //干簧管開關 MFRC522 rfid(SS_PIN, RST_PIN); //實例化類 Servo myservo; //實例化舵機// 初始化數組用于存儲讀取到的NUID byte nuidPICC[4]; String DB[4] = ""; byte firstNum1[4] = {0,0,0,0}; //數據存儲器 byte firstNum2[4]= {0,0,0,0}; byte firstNum3[4]= {0,0,0,0}; byte firstNum4[4] = {0,0,0,0};long time_last=0;void printHex(byte *buffer, byte bufferSize) {for (byte i = 0; i < bufferSize; i++) {Serial.print(buffer[i] < 0x10 ? " 0" : "");Serial.print(buffer[i], HEX);} }void printDec(byte *buffer, byte bufferSize) {for (byte i = 0; i < bufferSize; i++) {Serial.print(buffer[i] < 0x10 ? " 0" : "");Serial.print(buffer[i], DEC);} }void gaodianping(){//語音模塊陣列 digitalWrite(audo1,HIGH); digitalWrite(audo2,HIGH); digitalWrite(audo3,HIGH); digitalWrite(audo4,HIGH); digitalWrite(audo5,HIGH); digitalWrite(audo6,HIGH); digitalWrite(audo7,HIGH); delay(1000);}void one(){ digitalWrite(audo1,LOW); digitalWrite(audo2,HIGH); digitalWrite(audo3,HIGH); digitalWrite(audo4,HIGH); digitalWrite(audo5,HIGH); digitalWrite(audo6,HIGH); digitalWrite(audo7,HIGH); delay(1000);} void two(){ digitalWrite(audo1,HIGH); digitalWrite(audo2,LOW); digitalWrite(audo3,HIGH); digitalWrite(audo4,HIGH); digitalWrite(audo5,HIGH); digitalWrite(audo6,HIGH); digitalWrite(audo7,HIGH); delay(1000);} void three(){ digitalWrite(audo1,HIGH); digitalWrite(audo2,HIGH); digitalWrite(audo3,LOW); digitalWrite(audo4,HIGH); digitalWrite(audo5,HIGH); digitalWrite(audo6,HIGH); digitalWrite(audo7,HIGH); delay(1000);} void four(){ digitalWrite(audo1,HIGH); digitalWrite(audo2,HIGH); digitalWrite(audo3,HIGH); digitalWrite(audo4,LOW); digitalWrite(audo5,HIGH); digitalWrite(audo6,HIGH); digitalWrite(audo7,HIGH); delay(1000);} void five(){ digitalWrite(audo1,HIGH); digitalWrite(audo2,HIGH); digitalWrite(audo3,HIGH); digitalWrite(audo4,HIGH); digitalWrite(audo5,LOW); digitalWrite(audo6,HIGH); digitalWrite(audo7,HIGH); delay(1000);} void six(){ digitalWrite(audo1,HIGH); digitalWrite(audo2,HIGH); digitalWrite(audo3,HIGH); digitalWrite(audo4,HIGH); digitalWrite(audo5,HIGH); digitalWrite(audo6,LOW); digitalWrite(audo7,HIGH); delay(1000);} void seven(){ digitalWrite(audo1,HIGH); digitalWrite(audo2,HIGH); digitalWrite(audo3,HIGH); digitalWrite(audo4,HIGH); digitalWrite(audo5,HIGH); digitalWrite(audo6,HIGH); digitalWrite(audo7,LOW); delay(1000);} void eight(){ digitalWrite(audo1,LOW); digitalWrite(audo2,HIGH); digitalWrite(audo3,LOW); digitalWrite(audo4,HIGH); digitalWrite(audo5,HIGH); digitalWrite(audo6,HIGH); digitalWrite(audo7,HIGH); delay(1000);} void nine(){ digitalWrite(audo1,HIGH); digitalWrite(audo2,LOW); digitalWrite(audo3,LOW); digitalWrite(audo4,HIGH); digitalWrite(audo5,HIGH); digitalWrite(audo6,HIGH); digitalWrite(audo7,HIGH); delay(3000); digitalWrite(audo1,HIGH); digitalWrite(audo2,HIGH); digitalWrite(audo3,HIGH); digitalWrite(audo4,HIGH); digitalWrite(audo5,HIGH); digitalWrite(audo6,HIGH); digitalWrite(audo7,HIGH);}void duka_jiance(){ //讀卡檢測 感謝互聯網平臺,感謝原作者 if ( ! rfid.PICC_IsNewCardPresent())return;// 驗證NUID是否可讀if ( ! rfid.PICC_ReadCardSerial())return;MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak);// 檢查是否MIFARE卡類型if (piccType != MFRC522::PICC_TYPE_MIFARE_MINI && piccType != MFRC522::PICC_TYPE_MIFARE_1K &&piccType != MFRC522::PICC_TYPE_MIFARE_4K) {Serial.println("不支持讀取此卡類型");return;}// 將NUID保存到nuidPICC數組for (byte i = 0; i < 4; i++) {nuidPICC[i] = rfid.uid.uidByte[i];} Serial.print("十六進制UID:");printHex(rfid.uid.uidByte, rfid.uid.size);Serial.println();Serial.print("十進制UID:");printDec(rfid.uid.uidByte, rfid.uid.size);Serial.println();// 使放置在讀卡區的IC卡進入休眠狀態,不再重復讀卡rfid.PICC_HaltA();// 停止讀卡模塊編碼rfid.PCD_StopCrypto1();}bool kebiao_jiance(){//檢測課表 if (nuidPICC[0]==0x15&&nuidPICC[1]==0x52&&nuidPICC[2]==0xBD&&nuidPICC[3]==0x3C){for (byte i = 0; i < 4; i++) {DB[i] = nuidPICC[i];} Serial.println("周一課表");master=5;one(); //digitalWrite(audo1,LOW);delay(2000);// gaodianping();//delay(2000);Serial.println("請放作業"); //主要程序//digitalRead(audo2)==LOW;//digitalWrite(audo2,LOW);two();delay(2000);//gaodianping();//delay(2000);} }void shuxue_jiance(){//檢測數學if (nuidPICC[0]==0x53&&nuidPICC[1]==0x2F&&nuidPICC[2]==0xBD&&nuidPICC[3]==0x3C){Serial.println("數學作業");for (byte i = 0; i < 4; i++) {firstNum1[i] = rfid.uid.uidByte[i];}//gaodianping();//digitalWrite(audo3,LOW); //3// delay(2000);// gaodianping();three();delay(2000);} } void kexue_jiance(){//檢測科學if (nuidPICC[0]==0x00&&nuidPICC[1]==0x27&&nuidPICC[2]==0xBD&&nuidPICC[3]==0x3C){Serial.println("科學作業");for (byte i = 0; i < 4; i++) {firstNum4[i] = rfid.uid.uidByte[i];}//digitalWrite(audo1,LOW);//digitalWrite(audo4,LOW); //4four();delay(2000);// gaodianping();//} } void chines_jiance(){//檢測語文if (nuidPICC[0]==0x7F&&nuidPICC[1]==0x59&&nuidPICC[2]==0xBD&&nuidPICC[3]==0x3C){Serial.println("語文作業");//digitalWrite(audo2,HIGH);for (byte i = 0; i < 4; i++) {firstNum2[i] = rfid.uid.uidByte[i];}//digitalWrite(audo2,LOW);//delay(2000);five();//digitalWrite(audo5,LOW);//5delay(2000);//gaodianping(); } } void english_jiance(){//檢測英語 if (nuidPICC[0]==0xE5&&nuidPICC[1]==0x6A&&nuidPICC[2]==0xBD&&nuidPICC[3]==0x3C){Serial.println("英語作業");//digitalWrite(audo3,HIGH);for (byte i = 0; i < 4; i++) {firstNum3[i] = rfid.uid.uidByte[i];}//digitalWrite(audo1,LOW);//delay(2000);six();//digitalWrite(audo6,LOW);//6delay(2000);//gaodianping();} }void setup() {Serial.begin(9600);SPI.begin(); // 初始化SPI總線rfid.PCD_Init(); // 初始化 MFRC522//pinMode(reed_switch,INPUT);// pinMode(LED,OUTPUT);pinMode(audo1,OUTPUT);pinMode(audo2,OUTPUT);pinMode(audo3,OUTPUT);pinMode(audo4,OUTPUT);pinMode(audo5,OUTPUT);pinMode(audo6,OUTPUT);pinMode(audo7,OUTPUT);master=0;// put your setup code here, to run once:/*Serial.begin(9600);//2到4為3個按鈕*/ }void loop() { //gaodianping();// put your main code here, to run repeatedly://anjian_jiance();//if(io_flag[0]||io_flag[1]||io_flag[2]) //|| 或(or)邏輯運算 特點:兩個條件有一個是假時,輸出為假if(digitalRead(7)==1){Serial.println("書包打開");/**/delay(1000);duka_jiance();delay(1000);while(!kebiao_jiance()){Serial.println("BUG");//master=10;if(firstNum1[1]>=01&&firstNum2[1]>=01&&firstNum3[1]>=01&&firstNum4[1]>=01) //if (nuidPICC[0]==0xE5&&nuidPICC[1]==0x6A&&nuidPICC[2]==0xBD&&nuidPICC[3]==0x3C){seven();delay(2000);Serial.println("請關閉書包");master=10;delay(5000);while(digitalRead(7)==0){if((millis()-time_last)>5000){Serial.println("5秒倒計時!");}}}elseSerial.println("BUG1");//目前運行不穩定 ,標記一個測試點duka_jiance();english_jiance();gaodianping();duka_jiance();chines_jiance();gaodianping();duka_jiance();kexue_jiance();gaodianping();duka_jiance();shuxue_jiance();gaodianping(); if(master<1){eight();delay(3000);Serial.println("請刷課表");return;}return ;}}Serial.println(master);if(master!=10;master>0){nine();delay(2000);Serial.println("有書本未裝入");return ;}}總結
以上是生活随笔為你收集整理的基于arduino uno 开发板制作的 智能书包项目的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MSB/LSB(big endian/l
- 下一篇: 操盘手如何在牛市中基于MACD进行选股