جستجو برای:
سبد خرید 0
  • خانه
  • فروشگاه
    • دوره های آموزشی
    • پروژه
    • بسته های آموزشی
      • رباتیک
      • آردوینو
  • هوافضا
    • آموزش هوافضا
      • فیلم های آموزش هوافضا
      • PDF های آموزش هوافضا
    • محصولات هوافضایی
    • نرم افزار های هوافضا
    • تازه های هوافضا
  • رباتیک
    • آموزش رباتیک
      • فیلم های آموزش رباتیک
        • PDF های آموزش رباتیک
    • دیتاشیت فارسی
    • نرم افزار های رباتیک
    • تازه های رباتیک
    • تاریخ مسابقات
  • پروژه
    • پروژه های رایگان
    • پروژه های آماده
    • پروژه های آردوینو
    • پروژه های رزبری پای
    • پروژه های بدون میکروکنترلر
    • پردازش تصویر
    • سفارش پروژه
  • دوره های آموزشی
    • کلاس های آموزشی
    • فیلم های آموزشی
    • جلسه های آموزشی
      • آموزش آردوینو
      • آموزش رسپبری پای
      • آموزش STM32
      • ربات پرنده
      • رباتیک مقدماتی
  • تماس با ما
  • درباره ما
  • مقالات
شروع ثبت نام دوره تابستانی آوات روبو
فرصت تکرار نشدنی ثبت نام در دوره های حضوری با 20% تخفیف!
ساعت
دقیقه
ثانیه
مشاهده دوره های آموزشی
رباتیک و هوافضا
ورود
با ایمیل با شماره موبایل
گذرواژه خود را فراموش کرده اید؟
عضویت
با ایمیل با شماره موبایل
  • 09152556924
  • sup@avatrobo.ir
رباتیک و هوافضا
  • خانه
  • فروشگاه
    • دوره های آموزشی
    • پروژه
    • بسته های آموزشی
      • رباتیک
      • آردوینو
  • هوافضا
    • آموزش هوافضا
      • فیلم های آموزش هوافضا
      • PDF های آموزش هوافضا
    • محصولات هوافضایی
    • نرم افزار های هوافضا
    • تازه های هوافضا
  • رباتیک
    • آموزش رباتیک
      • فیلم های آموزش رباتیک
        • PDF های آموزش رباتیک
    • دیتاشیت فارسی
    • نرم افزار های رباتیک
    • تازه های رباتیک
    • تاریخ مسابقات
  • پروژه
    • پروژه های رایگان
    • پروژه های آماده
    • پروژه های آردوینو
    • پروژه های رزبری پای
    • پروژه های بدون میکروکنترلر
    • پردازش تصویر
    • سفارش پروژه
  • دوره های آموزشی
    • کلاس های آموزشی
    • فیلم های آموزشی
    • جلسه های آموزشی
      • آموزش آردوینو
      • آموزش رسپبری پای
      • آموزش STM32
      • ربات پرنده
      • رباتیک مقدماتی
  • تماس با ما
  • درباره ما
  • مقالات
شروع کنید
آخرین اطلاعیه ها
لطفا برای نمایش اطلاعیه ها وارد شوید
0

وبلاگ

رباتیک و هوافضا > مقالات > پروژه > پروژه ی نمایش دما ، تاریخ و ساعت با آردوینو ، ST7735 TFT و DS3231

پروژه ی نمایش دما ، تاریخ و ساعت با آردوینو ، ST7735 TFT و DS3231

اسفند 13, 1396
ارسال شده توسط mjavad
پروژه، پروژه های آردوینو، پروژه های رایگان
نمایش دما ، تاریخ و ساعت با آردوینو ، ST7735 TFT و DS3231

به نام خدا

پروژه ی نمایش دما ، تاریخ و ساعت با آردوینو ، ST7735 TFT و DS3231

 

نمایش دما ، تاریخ و ساعت با آردوینو ، ST7735 TFT و DS3231

در این آموزش چگونگی ساخت نمایشگر دما ، تاریخ و ساعت با آردوینو ، ST7735 TFT و DS3231 را یاد می گیریم. ساخت این پروژه بسیار ساده است. دو میکروسوئیچ برای تنظیم زمان و تقویم وجود دارد. علاوه بر زمان و تقویم ، دما را هم می توانیم روی صفحه نمایش ST7735R TFT مشاهده کنیم.

قطعات مورد نیاز :

  • بورد آردوینو
  • بورد DS3231
  • صفحه نمایشST7735R TFT
  • 5 مقاومت 1 کیلو اهمی
  • 2 میکرو سوئیچ
  • باطری سکه ای 3 ولت
  • برد بورد
  • سیم برد بورد

 

 

شماتیک مدار :

شماتیک مدار به صورت زیر می باشد.

 

نمایش دما ، تاریخ و ساعت با آردوینو ، ST7735 TFT و DS3231

(همه  پایه های زمین به یکدیگر متصل شده اند.)

در این مدار 2 میکروسوئیچ B1 و B2 به ترتیب به پین های 7 و 6 آردوینو متصل شده اند، این میکروسوئچ ها  برای تنظیم پارامتر های زمان (دقیقه ، ساعت ، روز ، ماه و سال ) تعبیه شده اند. میکروسوئیچ B1 پارامتر را انتخاب می کند و میکروسوئیچ B2 آن را افزایش می دهد.

 

کد های آردوینو:

برای برنامه نویسی از دو کتابخانه Adafruit_ST7735 و Adafruit_GFX استفاده شده است که در لینک زیر می توانید آن را دانلود کنید.

Adafruit-ST7735-Library

Adafruit-GFX-Library

کتابخانه ها را بعد از دانلود در پوشه Arduino IDE libraries قرار دهید.

دانلود کد برنامه ی نمایش دما ، تاریخ و ساعت با آردوینو ، ST7735 TFT و DS3231 :

[maxbutton id=”196″ url=”http://avatrobo.ir/wp-content/uploads/2018/03/نمایش-دما-،-تاریخ-و-ساعت-با-آردوینو-،-ST7735-TFT-و-DS3231.txt” ]

 

// Arduino with DS3231 and ST7735R TFT display
// Real time clock & calendar with temperature monitor and 1.8" TFT screen
 
// include Wire library code (needed for I2C protocol devices)
#include <Wire.h>
// include ST7735 library
#include <Adafruit_GFX.h>                  // Core graphics library
#include <Adafruit_ST7735.h>               // Hardware-specific library
#include <SPI.h>
 
#define TFT_CS     9                       // TFT CS pin is connected to arduino pin 9
#define TFT_DC     10                      // TFT DC pin is connected to arduino pin 10
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS,  TFT_DC);
 
#define button1    7                       // Button B1 is connected to Arduino pin 7
#define button2    6                       // Button B2 is connected to Arduino pin 6
 
void setup(void) {
  pinMode(button1, INPUT_PULLUP);
  pinMode(button2, INPUT_PULLUP);
  tft.initR(INITR_BLACKTAB);   // initialize a ST7735S chip, black tab
  tft.fillScreen(ST7735_BLACK);
  Wire.begin();                                             // Join i2c bus
  tft.drawFastHLine(0, 53, tft.width(), ST7735_BLUE);       // Draw horizontal blue line at position (0, 53)
  tft.drawFastHLine(0, 106, tft.width(), ST7735_BLUE);      // Draw horizontal blue line at position (0, 106)
  draw_text(52, 64, "TIME", 1, ST7735_MAGENTA);
  draw_text(30, 117, "TEMPERATURE", 1, ST7735_RED);
}
char Time[]     = "  :  :  ";
char Calendar[] = "  /  /20  ";
char temperature[] = " 00.00";
char temperature_msb;
byte i, second, minute, hour, day, date, month, year, temperature_lsb;
 
void display_day(){
  switch(day){
    case 1:  draw_text(40, 10, " SUNDAY  ", 1, ST7735_CYAN); break;
    case 2:  draw_text(40, 10, " MONDAY  ", 1, ST7735_CYAN); break;
    case 3:  draw_text(40, 10, " TUESDAY ", 1, ST7735_CYAN); break;
    case 4:  draw_text(40, 10, "WEDNESDAY", 1, ST7735_CYAN); break;
    case 5:  draw_text(40, 10, "THURSDAY ", 1, ST7735_CYAN); break;
    case 6:  draw_text(40, 10, " FRIDAY  ", 1, ST7735_CYAN); break;
    default: draw_text(40, 10, "SATURDAY ", 1, ST7735_CYAN);
  }
}
void DS3231_display(){
  // Convert BCD to decimal
  second = (second >> 4) * 10 + (second & 0x0F);
  minute = (minute >> 4) * 10 + (minute & 0x0F);
  hour   = (hour >> 4)   * 10 + (hour & 0x0F);
  date   = (date >> 4)   * 10 + (date & 0x0F);
  month  = (month >> 4)  * 10 + (month & 0x0F);
  year   = (year >> 4)   * 10 + (year & 0x0F);
  // End conversion
  Time[7]     = second % 10 + 48;
  Time[6]     = second / 10 + 48;
  Time[4]     = minute % 10 + 48;
  Time[3]     = minute / 10 + 48;
  Time[1]     = hour   % 10 + 48;
  Time[0]     = hour   / 10 + 48;
  Calendar[9] = year   % 10 + 48;
  Calendar[8] = year   / 10 + 48;
  Calendar[4] = month  % 10 + 48;
  Calendar[3] = month  / 10 + 48;
  Calendar[1] = date   % 10 + 48;
  Calendar[0] = date   / 10 + 48;
  if(temperature_msb < 0){
    temperature_msb = abs(temperature_msb);
    temperature[0] = '-';
  }
  else
    temperature[0] = ' ';
  temperature_lsb >>= 6;
  temperature[2] = temperature_msb % 10  + 48;
  temperature[1] = temperature_msb / 10  + 48;
  if(temperature_lsb == 0 || temperature_lsb == 2){
    temperature[5] = '0';
    if(temperature_lsb == 0) temperature[4] = '0';
    else                     temperature[4] = '5';
  }
  if(temperature_lsb == 1 || temperature_lsb == 3){
    temperature[5] = '5';
    if(temperature_lsb == 1) temperature[4] = '2';
    else                     temperature[4] = '7';
  }
  draw_text(4,  27, Calendar, 2, ST7735_YELLOW);
  draw_text(16, 81, Time, 2, ST7735_GREEN);
  draw_text(14, 134, temperature, 2, ST7735_WHITE);
  tft.drawCircle(90, 134, 2, ST7735_WHITE);                // Degree symbol (°)
  draw_text(96, 134, "C", 2, ST7735_WHITE);
}
void blink_parameter(){
  byte j = 0;
  while(j < 10 && digitalRead(button1) && digitalRead(button2)){
    j++;
    delay(25);
  }
}
byte edit(byte x_pos, byte y_pos, byte parameter){
  char text[3];
  uint16_t color = ST7735_YELLOW;
  sprintf(text,"%02u", parameter);
  if(i == 3 || i == 4)
    color = ST7735_GREEN;
  while(!digitalRead(button1));                      // Wait until button B1 released
  while(true){
    while(!digitalRead(button2)){                    // If button (pin #9) is pressed
      parameter++;
      if(i == 0 && parameter > 31)                   // If date > 31 ==> date = 1
        parameter = 1;
      if(i == 1 && parameter > 12)                   // If month > 12 ==> month = 1
        parameter = 1;
      if(i == 2 && parameter > 99)                   // If year > 99 ==> year = 0
        parameter = 0;
      if(i == 3 && parameter > 23)                   // If hours > 23 ==> hours = 0
        parameter = 0;
      if(i == 4 && parameter > 59)                   // If minutes > 59 ==> minutes = 0
        parameter = 0;
      sprintf(text,"%02u", parameter);
      draw_text(x_pos, y_pos, text, 2, color);
      delay(200);                                    // Wait 200ms
    }
    tft.fillRect(x_pos, y_pos, 22, 16, ST7735_BLACK);
    blink_parameter();
    draw_text(x_pos, y_pos, text, 2, color);
    blink_parameter();
    if(!digitalRead(button1)){                       // If button (pin #8) is pressed
      i++;                                           // Increament 'i' for the next parameter
      return parameter;                              // Return parameter value and exit
    }
  }
}
void draw_text(byte x_pos, byte y_pos, char *text, byte text_size, uint16_t text_color) {
  tft.setCursor(x_pos, y_pos);
  tft.setTextSize(text_size);
  tft.setTextColor(text_color, ST7735_BLACK);
  tft.print(text);
}
 
void loop() {
  if(!digitalRead(button1)){                         // If button B1 is pressed
    i = 0;
    while(!digitalRead(button1));                    // Wait for button B1 release
    while(true){
      while(!digitalRead(button2)){                  // While button B2 pressed
        day++;                                       // Increment day
        if(day > 7) day = 1;
        display_day();                               // Call display_day function
        delay(200);                                  // Wait 200 ms
      }
      tft.fillRect(40, 10, 54, 8, ST7735_BLACK);     // Draw rectangle (earase day from the display)
      blink_parameter();                             // Call blink_parameter function
      display_day();                                 // Call display_day function
      blink_parameter();                             // Call blink_parameter function
      if(!digitalRead(button1))                      // If button B1 is pressed
        break;
    }
    date   = edit(4, 27, date);                      // Edit date
    month  = edit(40, 27, month);                    // Edit month
    year   = edit(100, 27, year);                    // Edit year
    hour   = edit(16, 81, hour);                     // Edit hours
    minute = edit(52, 81, minute);                   // Edit minutes
    // Convert decimal to BCD
    minute = ((minute / 10) << 4) + (minute % 10);
    hour = ((hour / 10) << 4) + (hour % 10);
    date = ((date / 10) << 4) + (date % 10);
    month = ((month / 10) << 4) + (month % 10);
    year = ((year / 10) << 4) + (year % 10);
    // End conversion
    // Write data to DS3231 RTC
    Wire.beginTransmission(0x68);               // Start I2C protocol with DS3231 address
    Wire.write(0);                              // Send register address
    Wire.write(0);                              // Reset sesonds and start oscillator
    Wire.write(minute);                         // Write minute
    Wire.write(hour);                           // Write hour
    Wire.write(day);                            // Write day
    Wire.write(date);                           // Write date
    Wire.write(month);                          // Write month
    Wire.write(year);                           // Write year
    Wire.endTransmission();                     // Stop transmission and release the I2C bus
    delay(200);                                 // Wait 200ms
  }
  Wire.beginTransmission(0x68);                 // Start I2C protocol with DS3231 address
  Wire.write(0);                                // Send register address
  Wire.endTransmission(false);                  // I2C restart
  Wire.requestFrom(0x68, 7);                    // Request 7 bytes from DS3231 and release I2C bus at end of reading
  second = Wire.read();                         // Read seconds from register 0
  minute = Wire.read();                         // Read minuts from register 1
  hour   = Wire.read();                         // Read hour from register 2
  day    = Wire.read();                         // Read day from register 3
  date   = Wire.read();                         // Read date from register 4
  month  = Wire.read();                         // Read month from register 5
  year   = Wire.read();                         // Read year from register 6
  Wire.beginTransmission(0x68);                 // Start I2C protocol with DS3231 address
  Wire.write(0x11);                             // Send register address
  Wire.endTransmission(false);                  // I2C restart
  Wire.requestFrom(0x68, 2);                    // Request 2 bytes from DS3231 and release I2C bus at end of reading
  temperature_msb = Wire.read();                // Read temperature MSB
  temperature_lsb = Wire.read();                // Read temperature LSB
  display_day();
  DS3231_display();                             // Diaplay time & calendar
  delay(50);                                    // Wait 50ms 
}
// End of code.
برچسب ها: ST7735 TFT و DS3231ال سی دی رنگیبرنامه نمایش دماپروژه نمایش دماتاریخ و ساعت با آردوینودانلود نمایش دماکد برنامه ی نمایش دما
قبلی آموزش شبیه سازی راه اندازی ST7735R TFT با آردوینو در پروتئوس
بعدی آموزش راه اندازی کارت حافظه SD با آردوینو

پست های مرتبط

اردیبهشت 9, 1398

برنامه نویسی به زبان پایتون برای رزبری پای

mjavad
ادامه مطلب

اسفند 5, 1397

تشخیص رنگ با استفاده از رزبری پای

mjavad
ادامه مطلب

بهمن 10, 1397

راه اندازی ال سی 2 در 16 با استفاده رزبری پای قسمت دوم

mjavad
ادامه مطلب

بهمن 10, 1397

راه اندازی ال سی 2 در 16 با استفاده رزبری پای قسمت اول

mjavad
ادامه مطلب

بهمن 2, 1397

ساخت اسپیدکنترلر موتور براشلس 3 ( با سنسور )

Author Avatar
Admin
ادامه مطلب

4 دیدگاه

به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.

  • محمد رزمجویی گفت:
    تیر 23, 1397 در 18:39

    سلام خسته نباشید ببخشید من یه ارور توی برنامه دارم ارور هم اینه:
    no matching function for call to ‘adafruit_st7735::adafruit_st7735(int,int)’

    پاسخ
    • Admin گفت:
      دی 21, 1399 در 17:29

      سلام
      کتابخونه رو اضافه کردید؟

      پاسخ
  • مهرانا گفت:
    اردیبهشت 28, 1399 در 19:38

    سلام
    خیلی ممنون بابت سایت خیلی خوبتون
    یه خواهشی داشتم من تازه شروع کردم به کار با آردوینو امکانش هست توضیح شفاهی در مورد کارکرد و نحوه ی ارتباط دهی شماتیک مدار رو بگید تا بهتر درک کنیم؟؟

    پاسخ
    • Admin گفت:
      آبان 16, 1399 در 14:07

      سلام
      ممنون از انرژیتون
      متوجه منظورتون نشدم
      برای درک بهتر آردونیو میتونید به جلسه های آموزشی آردوینو سایت مراجعه کنید.

      پاسخ

دیدگاهتان را بنویسید لغو پاسخ

دسته های محصولات
آخرین دیدگاه‌ها
  • Admin در پروژه ی ساخت یک ریموت کنترل 2.4 گیگا هرتز برای 10 کانال
  • Admin در درباره ما
  • Admin در پروژه ی ساخت یک ریموت کنترل 2.4 گیگا هرتز برای 10 کانال
  • Admin در رادیوکنترل 4 کاناله با قابلیت افزایش تا 10 کانال
  • امیر در رادیوکنترل 4 کاناله با قابلیت افزایش تا 10 کانال
ژوئن 2026
ش ی د س چ پ ج
 12345
6789101112
13141516171819
20212223242526
27282930  
« آوریل    
فهرست 1
  • عضویت
  • ویرایش حساب کاربری
  • ورود
  • خانه
فهرست 2
  • حمایت مالی
  • تبلیغات
  • فروشنده
  • داشبورد فروشندگان
  • سفارش پروژه
  • تماس با ما
  • درباره ما
فهرست 3
  • ویرایش حساب کاربری
  • فراموشی رمز عبور
  • ثبت نام
  • ویرایش حساب کاربری
محل کد نماد...
جستجو برای:
محصولات
  • دوره کوادکوپتر سرعتی FPV دوره آموزش ساخت کوادکوپتر مسابقاتی FPV
    نمره 4.00 از 5

    4,830,000 
  • دوره هواپیما مقدماتی تا پیشرفته دوره آموزش ساخت پهپاد بال ثابت ( هواپیما ) - مقدماتی تا پیشرفته
    10,480,000 
  • دوره کوادکوپتر مقدماتی دوره آموزش مقدماتی ساخت مولتی کوپتر (کوادکوپتر، هگزاکوپتر و ...)
    2,490,000 
  • دوره کوادکوپتر فیلم بردار دوره آموزش ساخت پهپاد فیلم بردار ( مولتی کوپتر )
    8,970,000 
  • دوره هواپیمای مدل موتور کشی دوره آموزش ساخت هواپیمای موتور کشی
    2,030,000 
نوشته‌های تازه
  • برنامه نویسی به زبان پایتون برای رزبری پای
  • تشخیص رنگ با استفاده از رزبری پای
  • راه اندازی ال سی 2 در 16 با استفاده رزبری پای قسمت دوم
  • راه اندازی ال سی 2 در 16 با استفاده رزبری پای قسمت اول
  • کنترل PID با آردوینو و دو موتور براشلس

درباره آوات روبو

 

آرمان آوات روبو نه تنها تغییر اکنون و تعریف آینده آموزش عملی و کاربردی در ایران، بلکه توسعه همین تغییر به کل دنیا است. نسخه بین المللی آوات روبو، هم اکنون در حال برنامه ریزی است و کارهای اولیه آن برای فعالیت در یوتیوب و یک سایت انگلیسی در حال انجام است.

دسترسی سریع

  • دوره های آموزشی
  • کیت
  • کلاس های حضوری
  • پروژه

کاوش

  • درباره ما
  • تماس با ما
  • مقالات

شبکه های اجتماعی

  • اینیستاگرام
  • یوتیوب
  • تلگرام

استفاده از مطالب سایت برای مقاصد غیر تجاری و با ذکر منبع بلامانع است. تمامی حقوق برای آوات روبو محفوظ است.