انجمن های گفتگوی روبوایکیو

لطفا به سیستم وارد یا ثبت‌نام کنید.

لطفا برای ورود نام کاربری و رمز عبورتان را وارد نمایید

لطفا برای استفاده بهتر از انجمن، ثبت نام کنید!

نویسنده موضوع: ساخت تایمر با آردیونو  (دفعات بازدید: 3370 بار)

0 کاربر و 1 مهمان درحال دیدن موضوع.

آفلاین abbbas

  • کاربر جدید
  • *
  • ارسال: 15
  • امتیاز: 9
    • ديدن مشخصات
ساخت تایمر با آردیونو
« : 07 خرداد, 1395, 07:48:14 »
سلام
من قصد دارم توسط یک بورد آردیونو (uno)یک تایمر بسازم ک هر دو ساعت یک موتور dc رو (در یک جهت)تا زمان رسیدن چهار چوب وسطی به نقطه Aحرکت بده و با فشردن سوئیچ حرکت تمام شه و همزمان دوباره تایمر شروع به شمردن بکنه و بعد دو ساعت دوباره موتور رو روشن کنه و چهار چوب رو به نقطه B و میکروسوئیچ نقطه B رو تحریک کنه تا حرکت موتور مجددا قطع شه و عمل شمارش مجددا شروع شه و این سیکل بینهایت بار تکرار بشه
این هم شماتیک ک از بالا هست
http://s6.picofile.com/file/8253171934/ax.JPG

آفلاین abbbas

  • کاربر جدید
  • *
  • ارسال: 15
  • امتیاز: 9
    • ديدن مشخصات
پاسخ : ساخت تایمر با آردیونو
« پاسخ #1 : 08 خرداد, 1395, 08:12:38 »
یعنی از دوستان کسی با تایمر آردیونو کار نکرده؟

آفلاین abbbas

  • کاربر جدید
  • *
  • ارسال: 15
  • امتیاز: 9
    • ديدن مشخصات
پاسخ : ساخت تایمر با آردیونو
« پاسخ #2 : 09 خرداد, 1395, 10:12:59 »
تشکر از جوابتون
 تو حلقه لوپ همزمان دما هم باید کنترل بشه واگه از delay بخوام استفاده کنم فکر کنم تاخیر و اختلال حتمی هست
با این ک کل سایت آردیونو رو زیرو رو کردم(و بیشتر سردرگم شدم)چیز قابل توجهی به دست نیاوردم
اصل قضیه اینه ک من میخوام با برخورد چهار چوب وسط به کلید اول (نقطه A)و فشرده شدن اون اول رله چپ گرد موتور قطع بعد تایمر یا شمارشگر(timer-counter)شروع به شمارش کنه تا یک ساعت مجددا رله راست گرد موتور فعال بشه تا چهار چوب وسطی به کلید دوم برخورد کنه(نقطه B)مجددا رله راست گرد قطع بشه تایمر یا شمارشگر شروع به شمارش کنه و مجددا بعد یک ساعت رله چپ گرد فعال بشه و چهارچوب مجددا حرکت کنه به سمت نقطه A
« آخرين ويرايش: 09 خرداد, 1395, 10:24:12 توسط abbbas »

آفلاین abbbas

  • کاربر جدید
  • *
  • ارسال: 15
  • امتیاز: 9
    • ديدن مشخصات
پاسخ : ساخت تایمر با آردیونو
« پاسخ #3 : 10 خرداد, 1395, 10:06:49 »
فکر نمیکردم این قضیه اینقدر بی طرفدار باشه ???

آفلاین abbbas

  • کاربر جدید
  • *
  • ارسال: 15
  • امتیاز: 9
    • ديدن مشخصات
پاسخ : ساخت تایمر با آردیونو
« پاسخ #4 : 12 خرداد, 1395, 12:06:02 »
من تغییرات تو برنامه رو با تابع millis ایجاد کردم اگه امکان داره بازبینی بفرمایید و سناریو به این شکله ک

1.اگر کلید A در حالت HIGH باشه و مقدار جاری زمان از زمان قبلی بیشتر از مقدار تایم(یک ساعت)بیشتر بشه رله چپ گرد رو روشن کنه و چهار چوب بره به سمت کلید B
2.حالا تو if چهارم گفتیم به محض رسیدن چهارچوب به کلید B, رله چپ گرد خاموش شه
3.اگر کلید َB در حالت HIGH باشه و مقدار جاری زمان از زمان قبلی بیشتر از مقدار تایم(یک ساعت)بیشتر بشه رله راست گرد رو روشن کنه و چهار چوب بره به سمت کلید A
4.حالا تو if سوم گفتیم به محض رسیدن چهارچوب به کلید A, رله راست گرد خاموش شه


const int button_A = 2;  //pin for button A
const int button_B = 3;  //pin for button B
const int relay_L = 4;  //pin for Left turn motor
const int relay_R = 5;  //pin for Right turn motor
unsigned long previousMillis = 0;        // will store last time button was updated
long OffTime = 3600000;          // milliseconds of off-time

 
void setup() {
pinMode(button_A,INPUT);
pinMode(button_B,INPUT);
pinMode(relay_L,OUTPUT);
pinMode(relay_R,OUTPUT);
}

void loop()
{
unsigned long currentMillis = millis();

      if((digitalRead(button_A)==HIGH) && (currentMillis - previousMillis >= OffTime))
{
  previousMillis = currentMillis;  // Remember the time
  digitalWrite(relay_L,HIGH);  //if curr-perv>=3600sec(1h) start turn motor to Left
 }

      if((digitalRead(button_B)==HIGH) && (currentMillis - previousMillis >= OffTime))
{
   previousMillis = currentMillis;  // Remember the time
   digitalWrite(relay_R,HIGH);  //if curr-perv>=3600sec(1h) start turn motor to Right
}

if(digitalRead(button_A)==HIGH)
  {
    digitalWrite(relay_R,LOW);  ////stop motor turn Right after push button_A
  }
 
if(digitalRead(button_B)==HIGH)
{
    digitalWrite(relay_L,LOW);  //stop motor turn Left after push button_B
}

}