گاهی در سیستمها نیاز داریم رفتار ورودی به سیستم به شکل پی در پی توسط سیستم تکرار شود و یا سیستم با بازه زمانی مشخص رفتارها را تکرار کند. این پروژه به شما اجازه می دهد تا ورودی سنسور را توسط برد آردوینو ضبط کنید، آن را ذخیره نمایید و اطلاعات ذخیره شده مجدداً تکرار شوند. این اطلاعات روی حافظه EEPROM ذخیره می شوند، به همین جهت در زمان قطع برق اطلاعات از بین نمیروند. با سیسوگ همراه باشید.
البته ما در مدارات قبلی آموزش راه اندازی سروو موتور با آردوینو را آموزش داده ایم.
قطعات مورد نیاز:
برد آردوینو
برد بورد
سیم
کلید فشاری
LED
مقاومت (برای LED)
پتانسیومتر 10 کیلواهم
سرو موتور
گام اول: شماتیک
اتصالات را مطابق دستور زیر وصل میکنیم:
پتانسومتر به پین A0
کلید فشاری به پین D2
سرو موتور به پین D3
LED به پین D13
گام دوم: کد
کد زیر را روی برد آردوینو بارگذاری نمایید.
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); } } |
توجه داشته باشید، کامنت “()MUST be less than EEPROM.length//” برای پیدا کردن حافظه EEPROM برد آردوینو شماست. برای پی بردن به مقدار حافظه خط “;((Serial.println(EEPROM.read(i//” را از حالت کامنت خارج کنید تا اندازه EEPROM در سریال مانیتور چاپ شود. سپس میتوانید مقدار متغیر ذکر شده را بر اساس مقدار حافظه نمایش داده شده تغییر دهید.
روش استفاده:
برای ضبط با این مدار ساده کافی است کلید فشاری را فشار دهید و اطلاعات را از طریق پتانسیومتر وارد کنید. اکنون برد اقدامات شما را ضبط کرده و بیوقفه تکرار میکند و در انتهای هر مرحله تکرار LED چشمک میزند. این روند تا زمانی که مجدداً کلید را برای ضبط جدید بفشارید تکرار میشود. میتوانید با تغییر متغیرهای “resolution” و “recordTime” مدت زمان ضبط را تغییر دهید.
نکات:
این کد از حافظه EEPROM در آردوینو استفاده میکند، بنابراین میتوانید:
موقعیتهای مورد نظر خود را به صورت قسمت به قسمت در حافظه ذخیره کنید. بدین صورت که بعد از تغییر پتانسیومتر دکمه را فشار دهید تا در حافظه ذخیره شود، این کار را تا زمانی که تمام موقعیتهای مورد نظرتان ذخیره شوند انجام دهید. سپس دستگاه تمام این موقعیتها را به صورت پیوسته انجام میدهد.
اگر نیازی به ذخیره اطلاعات در زمان قطع برق ندارید میتوانید به جای EEPROM اطلاعات را روی یک آرایه صحیح ذخیره نمایید.
فیلم عملکرد سرور توسط آردوینو :
بسیار عالی بود تشکر از شما