گاهی در سیستمها نیاز داریم رفتار ورودی به سیستم به شکل پی در پی توسط سیستم تکرار شود و یا سیستم با بازه زمانی مشخص رفتارها را تکرار کند. این پروژه به شما اجازه می دهد تا ورودی سنسور را توسط برد آردوینو ضبط کنید، آن را ذخیره نمایید و اطلاعات ذخیره شده مجدداً تکرار شوند. این اطلاعات روی حافظه EEPROM ذخیره می شوند، به همین جهت در زمان قطع برق اطلاعات از بین نمیروند. با سیسوگ همراه باشید. البته ما در مدارات قبلی آموزش راه اندازی سروو موتور با آردوینو را آموزش داده ایم.
اتصالات را مطابق دستور زیر وصل میکنیم: پتانسومتر به پین A0 کلید فشاری به پین D2 سرو موتور به پین D3 LED به پین D13
توجه داشته باشید، کامنت “()MUST be less than EEPROM.length//” برای پیدا کردن حافظه EEPROM برد آردوینو شماست. برای پی بردن به مقدار حافظه خط “;((Serial.println(EEPROM.read(i//” را از حالت کامنت خارج کنید تا اندازه EEPROM در سریال مانیتور چاپ شود. سپس میتوانید مقدار متغیر ذکر شده را بر اساس مقدار حافظه نمایش داده شده تغییر دهید.
فیلم عملکرد سرور توسط آردوینو :
قطعات مورد نیاز:
برد آردوینو برد بورد سیم کلید فشاری LED مقاومت (برای LED) پتانسیومتر 10 کیلواهم سرو موتورگام اول: شماتیک
گام دوم: کد
کد زیر را روی برد آردوینو بارگذاری نمایید.1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | #include <Servo.h> #include <EEPROM.h>//used to store recorded values Servo myServo; float resolution = 1000;//MUST be less than EEPROM.length() (check serial monitor) float recordTime = 5; //delay time bool recording = false; void setup() { pinMode(13, OUTPUT); //status led pinMode(2, OUTPUT); myServo.attach(3); Serial.begin(9600); digitalWrite(2, HIGH); //Serial.println(EEPROM.length()); } void loop() { if (recording == true) {//record for (int i = 1; i <= resolution; i++) { digitalWrite(13, HIGH); //light status led int val = map(analogRead(A0), 0, 1023, 0, 180); EEPROM.write(i, val); //Serial.println(EEPROM.read(i)); myServo.write(val); delay(recordTime); } digitalWrite(13, LOW); //turn off status led delay(1000);//give time for person recording = false; } else { for (int i = 1; i <= resolution; i++) {//playback if (digitalRead(2) == 0) {//stop playback and record new values recording = true; break; } int readval = EEPROM.read(i); myServo.write(readval); //Serial.println(readval); delay(recordTime); } digitalWrite(13, HIGH); //show a new repeat delay(100); digitalWrite(13, LOW); } } |