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

آموزش ساخت ساعت دیجیتال با آردوینو و سگمنت 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 دقیقه را وارد نمایید. همانطور که مشاهده میکنید استارت زمان من از ۱۲:۵۰ شروع شده است.

 

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

 

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

 

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

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

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

۲۷ دیدگاه

  • ببخشید نمیتونید برنامه همین رو با ماژول سون سگمنت 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 تنظیم و بروز کنیم، بعد اسکچ مربوطه رو آپلود کنیم. البت مسلّماً شما می دونید. محض یادآوری برای درج در آموزش عرض کردم..

        سپاسم