מיקרו-בקר ATmega328 חלק ג’

מיקרו-בקר

הפעם נבנה שעון דיגיטלי מעורר על מטריצה ונעביר אותו אחר כך ללוח הלחמה חצי קבוע. כדי לעבוד עם ה מיקרו-בקר ATmega328 ללא ארדואינו ולהרגיש איתו בנוח צריך לעשות כמה שיותר פרויקטים, וזו הזדמנות טובה לעשות פרויקט של  שעון דיגיטלי מעורר.

רכיבי הפרויקט:

  • בקר ATmega328
  • מודול שעון זמן אמת RTC 1320
  • תצוגת מקטעים 4 ספרות דיגיטלית seven segment
  • כפתור לחיצה
  • לוח הלחמה חצי קבוע
  • תושבת מעגל משולב DIP28
  • נורת לד
  • זמזם

תכנון הפרויקט

קודם כל נבנה אבטיפוס על מטריצה ונתכנת את הארדואינו להפעיל אותו, ואחרי שנהיה בטוחים שהקוד עובד נעביר את המעגל אל לוח הלחמה ונתכנת את הבקר.

הרכיב העיקרי במעגל הוא תצוגת 4 הספרות. יש כל מיני גרסאות לרכיב הזה אבל זה שאני עובד איתו הוא הפשוט ביותר ויש לו סך הכל 12 רגליים שזה המיפוי שלהם:

4-digit-7-segment-led-display-pinout

D1, D2, D3, D4 הם הרגליים שמפעילות את הספרות. כל שאר הרגליים מפעילות את שבעת המקטעים של כל ספרה.

חיווטים וקוד

אפשר לכתוב קוד שמפעיל מקטעים וספרות בצורה ידנית אבל הרבה יותר נוח במקרה הזה להשתמש בספריית ארדואינו sevseg.

בספריה הזו מכניסים את הרגליים בהם משתמשים ואז אפשר לרשום מספר שיוצג על הלוח וגם לנקות אותו. לפי הספריה אלו החיבורים שצריך לבצע:

D1 – פין 2 בארדואינו

D2 – פין 3 בארדואינו

D3 – פין 4 בארדואינו

D4 – פין 5 בארדואינו

A – פין 6 בארדואינו

B – פין 7 בארדואינו

C – פין 8 בארדואינו

D – פין 9 בארדואינו

E – פין 10 בארדואינו

F – פין 11 בארדואינו

G – פין 12 בארדואינו

decimal – פין 13 בארדואינו

digital_clock_breadboard

ככה הברדק הזה נראה על מטריצה. קשה לראות בתמונה אבל יש גם מודול RTC שמחובר ל SCL/SDA בארדואינו ועובד על בטריה cr2025 וגם נורת לד וכפתור.

זהו הקוד שמפעיל את המעגל… התצוגה מראה את השעה כל הזמן, ברגע שלוחצים על הכפתור הוא נכנס למצב של שעון מעורר ומפעיל זמזם ב 7:30 בבוקר, ולחיצה נוספת מכבה את הזמזם.

#include <Wire.h>
#include "RTClib.h"
#include <SevSeg.h>
RTC_DS1307 rtc;
SevSeg sevseg;
bool button = false; // state of alarm button
String current_time; // string of current time

void setup(){
  pinMode(A0, INPUT_PULLUP); // button. pull up to 5V
  pinMode(A1, OUTPUT); // led
  pinMode(A2, OUTPUT); // buzzer
  rtc.begin();
  rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
  byte numDigits = 4;
  byte digitPins[] = {2, 3, 4, 5};// Digits: 1,2,3,4
  byte segmentPins[] = {6, 7, 8, 9, 10, 11, 12, 13}; //Segments: A,B,C,D,E,F,G,Period
  sevseg.begin(COMMON_ANODE, numDigits, digitPins, segmentPins);
  sevseg.setBrightness(90);
}

void loop(){
  DateTime t = rtc.now(); // get the time from rtc
  if (t.minute() < 10){ // if minute is single digit, add zero before
    current_time = String(t.hour()) + '0' + String(t.minute());
  }
  else{
    current_time = String(t.hour()) + String(t.minute()); // convert time to string and add
}
  static byte decPlace = 2; // where to put the decimal point
  sevseg.setNumber(current_time.toInt(),decPlace); // convert back to int and show on display
  sevseg.refreshDisplay(); // Must run repeatedly; don't use blocking code 
  if (digitalRead(A0) == LOW){ // if button is pressed
    button = !button; // toggle button state
    delay(200); // this is bad but we need to debounce the button
  }
  if (button){ // turn led on/off when button pressed
    digitalWrite(A1, HIGH);
  }
  else{
    digitalWrite(A1, LOW);
  }
  if (button && t.hour() == 7 && t.minute() == 30){ // if button state is on, and 7:30 in morning make alarm
    tone(A2, 500, 10000);
  }
}

הלחמה ללוח פרמה-פרוטו

עכשיו אחרי שראינו שהקוד עובד אפשר להעביר את כל הרכיבים ללוח ההלחמה החצי קבוע:

perma-proto-components

הלוח הזה שנקרא פרמה-פרוטו מתפקד בדיוק כמו מטריצה לכן נוח להעביר אליו את הרכיבים. עכשיו אפשר להתחיל להלחים אותם בגב הלוח.

perma-proto-soldering

את כל החיבורים בין הרכיבים אפשר לעשות על ידי חוטים קצרים/ מגשרים רק להיות בטוחים שהחיבורים הם כמו שצריך כי כשמלחימים מאחורה כל הרכיבים הפוכים כמו מראה.

זהו להיום, אפשר לראות שתוך שעה ניתן לבנות שעון דיגיטלי שהוא גם שעון מעורר ואפילו לתכנת אותו לזמזם בשעות מסוימות, אם אחרי כמה זמן לא מרוצים מהתוצאה אפשר תמיד לחבר לבקר RX, TX, RESET ולתכנת אותו כשהוא על המעגל.

ככה נראה השעון הדיגיטלי הסופי כשהוא מקובע לארון קיר:

digital-clock-finish

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *