آردوینو آموزش آردوینو پروژه های آردوینو

آموزش ساخت ساعت دیجیتال با آردوینو و سگمنت TM1637

arduino-digital-clock-segment--digispark
نوشته شده توسط پریسا پوربلورچیان

زمان و سنجش زمان از ابزارهای مهم است. در یک پروژه دقت زمان سنجی باعث ریسک و خطر پذیری میشود. در پروژه‌ای دیگر باعث بهم ریختگی نظم در رفت و آمد و …. میشود. انواع ساعت از دیجیتال و ساعت در کدها و اسکریپت‌های آنلاین گرفته تا ساعت‌های مکانیکی همگی به نوعی زمان سنجی میباشند. در این پست شیوه ساخت ساعت دیجیتالی با نمایشگر روی سون سگمنت ۴ دیجیت با تراشه TM1637 به صورت ۲۴ ساعتی را آموزش خواهم دارد. این آموزش علاوه بر شیوه عملکرد ساعت، شیوه کار با ماژول سون سگمنت را هم آموزش خواهید دید. در ادامه این آموزش با مرجع تخصصی آردوینو دیجی اسپارک همراه باشید.

 

ساختار ماژول سگمنت ۴ دیجیت

مازول سگمنت، نوعی نمایشگر دیودی است. هر بلوک از سون سگمنت از ۷ ال ای دی مجزا تشکیل شده است. ماژول سگمنت به کار رفته یک نمایشگر چهار دیجیت با ابعاد ۴۲*۲۴ میلی متر است. تراشه این ماژول TM1637 می‌باشد و دارای پروتکل ارتباطی I2C است. همچنین این ماژول دارای ۴ پایه به ترتیب  CLK ,DIN ,VCC ,GND  بوده و ولتاژ کاری آن بین ۳٫۵ تا ۵ ولت است.

 

وسایل مورد نیاز:

ماژول سگمنت ۴ دیجیت با تراشه TM1637

برد آردوینو Arduino UNO  R3

کابل فلت ۴۰ رشته نری به مادگی Male to Female

 

اتصال به آردوینو :

در این آموزش از کتابخانه Arduino TM1637 استفاده می‌کنیم. لینک دانلود کتابخانه TM1637 در صفحه محصول سون سگمنت ۴ دیجیت با تراشه TM1637 در قسمت دانلود قرار دارد. برای دانلود روی لینک مربوطه کلیک کنید.

 

کدهای برنامه:

در کد بالا می‌توانید سرعت Clock speed را تغییر دهید. من در اینجا clockSpeed را صفر قرار داده‌ام ( clockSpeed = 0 ). حال در قسمت حلقه (LOOP) می‌توانید شروع زمان را نیز به دلخواه تغییر دهید، برای اینکار در قسمت Hours ساعت مورد نظر و در قسمت Minutes دقیقه را وارد نمایید. همانطور که مشاهده میکنید استارت زمان من از ۱۲:۵۰ شروع شده است.

 

چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریع‌ترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد.

 

در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.

 

درباره نویسنده

پریسا پوربلورچیان

تولید کننده محتوا / کارشناس IOT

زندگی یعنی پژوهش و فهمیدن چیزی جدید

تلاشم بر این است تجربیاتم در زمینه IOT‌ را به بهترین شکل با شما در میان بگذارم.

تبادل نظر و رفع عیب با ثبت دیدگاه

۴۰ دیدگاه

  • ببخشید نمیتونید برنامه همین رو با ماژول سون سگمنت max7219 بنویسید؟
    قبلا به صورت نوشته اموزش داده بودید.تایمر این رو میخواستم

  • هنوز این روش را تست نکردم. ولی اینطور به نظر میرسد که باید از هر دو کتابخانه در کد استفاده کنید. چنانچه باز هم به مشکل برخوردید از همین طریق اعلام نمایید تا بررسی کنم.

  • سلام من برنامه رو میخوام اجرا کنم به کتابخونش گیر میده دانلود کردم کتابخونه رو و تو پوشه libraries کپی کردم مشکل از کجاست؟

    • سلام
      در ابتدا دقت کنید کتابخانه SevenSegmentTM1637 باشد؛ همانطور که در کدها مشخص شده است. در صفحه محصول سون سگمنت که در آموزش گفته شده است، لینک دانلود قرار گرفته شده است. آن را دانلود نمایید سپس در پوشه arduino – library کپی نمایید. این مراحل را از اول انجام دهید. در صورت برطرف نشدن مشکل از همین طریق اقدام نمایید.

    • سلام
      دقت کنید که ما از ماژول سگمنت که دارای درایور است و با رابط I2C وصل شده است، استفاده کردیم و نمیتوانید به تنهایی از سون سگمنت استفاده کنید.

  • درود
    با سپاس کار کرد.
    دوستان بعد از دانلود لینک زیر، برنامه آردوینو رو باز کنید، بعد از منوی Sketch روی Include Library کلیک کنید و گزینه دوم یعنی Add .ZIP Library… رو انتخاب کنید. بعد فایل زیپ رو که دانلود کردید انتخاب کنید تا کتابخانه ماژول TM1637 به کتابخانه برنامه آردوینو اضافه بشه.
    https://daneshjookit.com/index.php?controller=attachment&id_attachment=216

          • درود
            در فاروم سایت اصلی، یک آموزش وجود داره، ولی با این وجود برای من کار نمی کنه..
            لینک آموزش :
            https://create.arduino.cc/projecthub/pentiumcadiz/4-digit-rtc-clock-85068b
            با نام ۴-digit RTC Clock
            در این آموزش، دقیقاً از ماژول DS1307 و سون سگمنت TM1637 و آردوینو Uno داره استفاده می کنه. من سخت افزار رو چک کردم. ماژول ساعت دقیق که در بخش Serial Monitot کار صحیحش رو داره نشون میده :
            DS1307RTC Read Test
            ——————-
            Ok, Time = 00:08:58, Date (D/M/Y) = 11/9/2017
            Ok, Time = 00:08:59, Date (D/M/Y) = 11/9/2017
            Ok, Time = 00:09:00, Date (D/M/Y) = 11/9/2017
            Ok, Time = 00:09:01, Date (D/M/Y) = 11/9/2017
            Ok, Time = 00:09:02, Date (D/M/Y) = 11/9/2017
            Ok, Time = 00:09:03, Date (D/M/Y) = 11/9/2017
            ..
            برای چک سون سگمنت هم، از اسکچ TM1637Test از کتابخانه TM1637 استفاده کردم و حتّی پین های ساعت و دیتا رو به ترتیب روی ۹ و ۸ دیجیتال (مثل پین های مربوط به کد ساعت) گذاشتم. سون سگمنت شروع به کار کرد. پس سالمه.
            برای تست آردوینو هم (چون آردوینوی دست ساز خودم هست)، از دو آردوینوی Uno و Leonardo استفاده کردم، بروی سه بردبورد و سیم های بردبورد مختلف استفاده کردم، ولی باز کد ساعت جواب نداد..

            تنها چیزی که به ذهنم می رسه، اینه که چون کتابخانه های مختلفی برای DS1307 و TM1637 نصب کردم، شاید قاطی می کنه و خروجی سون سگمنت ست نمیشه.
            این کتابخانه ها نصب هستند :
            کتابخانه های مربوط به DS1307 :
            RTClib-master
            Adafruit_LED_Backpack_Library
            RTCLib_by_NeiroN
            DS1307_Emulator
            Rtc_by_Makuna
            DS1307newAlarms
            DS1307RTC
            MD_DS1307

            کتابخانه های مربوط به TM1637 :
            arduino-tm1637-master
            TM1637
            TM1637-1.1.0
            arduino-tm1637-master
            DigitalTube
            من تجربه ای روی آردوینو ندارم. باید ببخشید اگر بخاطر یک ساعت ساده و مبتدی اینقدر سئوال می پرسم..
            بنظرتون مشکل از کتابخانه هاست ؟

  • با سلام و درود خدمت دوستان نویسنده ممنون از تلاش تون
    اما لطفا معایب پروژه هاتون رو هم بیان کنید مـثلا هم پروژه برای یک هفته چقدر خطا داره ؟

    • سلام
      از توجه شما ممنونم.
      دقت کنید هر پروژه اى در کل یک سرى معایب و مزایا دارد که بر اساس کاربرى شما این قضیه مشخص خواهد شد. در نهایت از پیشنهاد شما ممنونم و تلاش میکنیم در آینده ، روشى براى این کار در نظر بگیریم.

  • درود
    مشکلم حل شد..
    اوّل اینکه بجای پین های ۸ و ۹ دیجیتال، ۵ و ۶ رو جایگزین کردم.
    و دوّم اینکه کلّیه سیم های بردبورد رو جدا کردم، و بجاشون سیم های رشته ای رو به هردو ماژول لحیم کردم..

    شاید برخی بخوان مثل من از این دو ماژول بخصوص (DS1307 و TM1637) برای ساخت ساعت استفاده کنند.
    پیشنهاد می کنم این کد رو برای آموزش جداگانه قرار بدید.
    سپاسم بسیار
    کد :
    // Reloj digital mostrado a través de un display de 4 dígitos (digitaltube), y con el tiempo
    // proporcionado por un Tiny RTC de Catalex.

    // Software programado por PentiumCadiz 7-1-17, basado en el ejemplo de la librería DS1307RTC
    // y en el ejemplo de uso del display de Prometec http://www.prometec.net/display-con-interface/

    #include

    #include
    #include
    #include

    #define CLK 6
    #define DIO 5

    TM1637 Display1(CLK, DIO);
    int8_t Digitos[] = {0,1,2,3};
    int horas;
    int minutos;
    boolean alterna;

    void setup() {
    Serial.begin(9600);
    while (!Serial) ; // wait for serial
    delay(200);
    Serial.println(“DS1307RTC Read Test”);
    Serial.println(“——————-“);

    Display1.set();
    Display1.init();

    }

    void loop() {
    tmElements_t tm;

    if (RTC.read(tm)) {
    Serial.print(“Ok, Time = “);
    print2digits(tm.Hour);
    Serial.write(‘:’);
    print2digits(tm.Minute);
    Serial.write(‘:’);
    print2digits(tm.Second);
    Serial.print(“, Date (D/M/Y) = “);
    Serial.print(tm.Day);
    Serial.write(‘/’);
    Serial.print(tm.Month);
    Serial.write(‘/’);
    Serial.print(tmYearToCalendar(tm.Year));
    Serial.println();

    horas = tm.Hour;
    minutos = tm.Minute;
    CalculaDigitos(horas, minutos);
    if (alterna)
    {
    Display1.point(POINT_OFF);
    alterna = false;
    }
    else
    {
    Display1.point(POINT_ON);
    alterna = true;
    }

    } else {
    if (RTC.chipPresent()) {
    Serial.println(“The DS1307 is stopped. Please run the SetTime”);
    Serial.println(“example to initialize the time and begin running.”);
    Serial.println();
    } else {
    Serial.println(“DS1307 read error! Please check the circuitry.”);
    Serial.println();
    }
    delay(9000);
    }
    delay(1000);
    }

    void print2digits(int number) {
    if (number >= 0 && number < 10) {
    Serial.write('0');
    }
    Serial.print(number);
    }

    void CalculaDigitos( int hor, int minu)
    {
    int8_t Digit0 = minu %10 ;
    int8_t Digit1 = (minu % 100) / 10 ;
    int8_t Digit2 = hor % 10 ;
    int8_t Digit3 = (hor % 100) / 10 ;

    Digitos[3] = Digit0 ;
    Digitos[2] = Digit1 ;
    Digitos[1] = Digit2 ;
    Digitos[0] = Digit3 ;

    Display1.display(Digitos);
    }

    • سلام
      از توجه و همکارى شما سپاسگزارم.
      جهت دریافت کدهای سالم برای کلیه کاربران، در یک فایل متنی ذخیره کنید و از طریق سیستم های اشتراکی ارسال کنید تا در دسترس تمام کاربران قرار دهیم.
      سپاسگزارم.

      • درود

        یک فایل زیپ، حاوی فایل اسکچ، فایل TXT حاوی کد، و فایل TXT بنام Read Me برای راهنمایی (لیست کتابخانه های مورد نیاز، و نحوه اسمبل سخت افزارها)..
        لینک :
        http://s9.picofile.com/file/8306541526/TM1637_DS1307_Clock.zip.html
        پ.ن : ابتدا باید ماژول ساعت دقیق DS1307 رو توسّط اسکچ Set Time از کتابخانه DS1307RTC تنظیم و بروز کنیم، بعد اسکچ مربوطه رو آپلود کنیم. البت مسلّماً شما می دونید. محض یادآوری برای درج در آموزش عرض کردم..

        سپاسم

  • سلام
    ببخشید من یک سوال داشتم
    من می خوام با استفاده از Digispark Kickstarter ATTINY85 یک LED چشمک زن درست کنم که در زمان مشخصی شروع به چشمک زدن بکنه…مثلا ساعت ۱۰ و ۲۵ دقیقه و ۳۰ ثانیه ۲۰ صدم ثانیه
    آیا این امکانش هست؟
    یا اینکه با زدن کلیدی از صفحه کلید کامپیوتر این چشمک زدن شروع بشه
    خیلی ممنون

    • سلام
      برای اینکار باید از ماژول ساعت DS3231 و یا DS130 که در حال حاضر در بازار موجود است استفاده نمایید و سپس شروط خاص مورد نظر خود را در برنامه لحاظ کنید.

  • سلام و خدا قوت…. هر ساعت ۵ دقیقه تقریبا خطا داره…. میخواستم همین برنامه رو دقیق کنم،بدون ماژول دیگه ای.منتها clockspeed تو برنامه ۰ تعریف شده.بعد آخر حلقه for مربوط به دقیقه یک تاخیر ۶۰۰۰ تقسیم بر clockspeed هست.یعنی تقسیم بر صفر!!! میشه در مورد محاسبات زمان تو برنامه توضیح بدید؟ تشکر

    • سلام
      در دیتاشیت ماژول ساعت راجع به تنظیمات clockspeed کامل توضیح داده شده است. حتما دیتاشیت را مطالعه نمایید.

  • سلام مجدد.به نظرم کلا clockspeed رو حذف کنید بهتره.یک تاخیر ۶۰ ثانیه بزارید به جای ۶۰۰۰/clockspeed امتحان کردم دقیق تر میشه. delay(60000). بازم اگه clockspeed تو برنامه رو متوجه شدید چه جوری محاسبه میشه و عمل میکنه ممنون میشم منم در جریان بزارید

    • سلام
      از راهنمایی شما ممنونم. بنده خودم چک نکردم و امیدوارم دیگر کاربران اگر اطلاعاتی دارند، به اشتراک بگذارند.

    • سلام
      با توجه به پیشرفت و توسعه بردهای میکروکنترلر و اپن سورس بودن بردهای امبدد، میکروکنترلر های AVR کاملا از رده خارح شده و کاربردی نمی باشد. لذا تمامی آموزش های تیم دیجی اسپارک بر پایه میکروکنترلرهای امبدد می‌باشد. نکته دوم اینکه قیمت بردهای آردوینو و سنسورهای کاربردی به همین علت اوپن سورس بودن بسیار مقرون به صرفه و در برخی موارد هم قیمت همان تراشه AVR هستند!

    • سلام
      همانطور که در کدها توضیح داده شده است، پایه clk به پایه ۴ آردوینو و پایه dio به پایه ۵ آردوینو اتصال دهید.