‏הצגת רשומות עם תוויות רספברי פיי. הצג את כל הרשומות
‏הצגת רשומות עם תוויות רספברי פיי. הצג את כל הרשומות

יום ראשון, 20 ביולי 2014

פרויקט ביג-בן חלק ג׳: attiny85

פוסט קודם

השימוש ב- raspberry pi בפרויקט השעון הוא ללא ספק over-kill. יש יתרונות:
- הוספתי הצגה של שער הביטקוין העדכני פעם בכמה דקות - מחייב אינטרנט.
- אני שוקל להוסיף שעון מעורר. עם הפאי יש לי יציאה אודיו פשוטה.
- ואם כבר יציאת אודיו - למה לא שיהיה גם רדיו (אינטרנטי)?

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

attiny85 on spurkfun


בשעון הזה אני אשתמש ב- ATTiny85 כדי לשלוט ב- max7219. בנוסף יהיה גם רכיב RTC - רכיב שנותן קריאת זמן מדוייקת (למדי).

DeadOn RTC

קניתי לוח מוכן של DS3234 - זהו רכיב מדוייק מאוד והלוח כולל גם בית סוללה כדי שניתוק של המערכת מהחשמל (או מהסוללות) לא ייאפס את השעון. הבעסה היחידה היא העובדה שבית הסוללה מיועד לסוללת מטבע 1225 - לא פשוט למצוא ולא זול. בסוף מצאתי 1220 שנכנסה גם בלי בעיה - ההבדל הוא רק בגודל:

אם שאלתם את עצמכם ״מה זה המספרים האלה של הסוללות?״, אז הנה זה: שתי הספרות הראשונות הן הקוטר במ״מ, והשתיים הבאות הן הגובה בעשיריות המ״מ. כלומר: סוללת 2032 המצוייה, היא בקוטר 20 מ״מ ובגובה 3.2 מ״מ. במקרה שלי, בית הסוללה מתאים גם לסוללה יותר נמוכה מה- 1225, ולכן 1220 נכנסת גם היא בקלות. וכמובן שכולן באותו מתח - 3V. (המקור בוויקיפדיה)

מה שנשאר הוא לחווט - ועל כך בפוסט הבא.



יום שבת, 28 ביוני 2014

פרויקט ביג-בן חלק ב' - השעון באוויר

פוסט קודם

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

בפוסט הזה אני אראה את ההתקדמות עד כאן - חיבור 2 ספרות ראשונות ל- max7219 הראשון, ושליטה דרך ה- RPI.

בפעם הבאה - ישר מזמין מעגל מודפס...

קודם כל התחלתי להלחים ולחווט את הבית של ה- max7219. הרעיון הוא שכל ספרה בשעון מורכבת מ-4 ספרות נפרדות - כל מקטע מורכב מ- 4 לדים. לכן שתי הספרות הראשונות בשעון מתחברות ל- max7219 בודד, כיוון שהוא יודע לשלוט על 8 ספרות של 7 מקטעים. הנה שתי הספרות הראשונות:


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

בשלב הבא הוספתי את 2 הספרות של השעה.

כשלב חומרתי אחרון, לקחתי מטען ישן של שקר כלשהו, וחיברתי אותו למייצב מתח 7805 (שפירקתי ממכשיר כלשהו) על הלוח:

הפוטנציומטר - לקביעת הזרם ללדים, כמוסבר בדפים של ה- 7219


והוספתי גם מפזר חום, וחוט:



את התכנות עשיתי ב- Java. כיוון שלא מצאתי קוד שיעזור לי ברשת (בחיפוש די שטחי), כתבתי בעצמי ספריה שמממשת חיבור ל- max7219. היא כתובה יחסית כללית כדי שאוכל להשתמש בה עם רכיבים אחרים בעתיד.

והנה, השעון החדש שלנו במטבח / סלון:



חלק ג׳: ATTiny85

יום שני, 21 באוקטובר 2013

פרויקט ביג בן - חלק א2




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



השלבים הבאים:
  • אני מחכה ללדים RGB שצריכים להגיע, אשים אותם בתור נקודותיים.
  • צריך למצוא מקום ל- max7219. אחד יהיה בין 2 הספרות של השעות ואחד בין 2 הספרות של הדקות. ולחווט אותם.
  • להתחיל לכתוב קוד - שישלוט ב- max7219. לפני כמה שבועות כתבתי קוד Java שישלוט ב- 595 shift register, ומשום מה זה לא עבד טוב. השתמשתי בחבילת pi4j, ואולי היא עדיין בתולית מדי. אני אנסה שוב עם ה- max7219 ונראה איך יילך.
  • אני שוקל להוסיף יכולת השמעת רדיו אינטרנט בעזרת השעון. הוא יישב בפינת האוכל, ושם יש ביקוש לרדיו (בזמן שעובדים במטבח) ואין קליטה טובה של FM עם רדיו רגיל.
  • סיומים - צריך לארוז יפה את השעון. אין לי שום רעיון בכיוון הזה.

יום חמישי, 17 באוקטובר 2013

עוד מעט נהפוך לשעון מגניב - פרויקט Big Ben חלק א'


כבר היתה לי חבילה של לדים מ- dealextreme, וצריך להגיע max7219, לא נעשה איתם משהו יפה?

כן.



אז התחלתי להלחים את הלדים ללוח. תוך כדי תנועה החלטתי פשוט לעשות שעון, אבל עם טוויסטים:

  • שימוש באפקטים שונים, כגון fade-out ו- fade-in, ריצה של לדים סביב הספרות, וכו', כך שצפייה בשעון תהיה קצת יותר מעניינת.
  • נוסיף כפתורים, למשל לחיצה על כפתור תראה את הטמפרטורה כרגע בחוץ או משהו כזה.
  • טיימר אולי? שעון מעורר? אפשר לחבר לוח ספרות שפירקתי מטלפון - רק נשאר לי לפענח איך משתמשים בו.
  • יש לי גם 10 לדים RGB שצריכים להגיע, אולי נשתמש בהם בנקודתיים בין הספרות?
  • אני אשמח לשמוע בתגובות עוד רעיונות.
את הלדים סידרתי כתצוגת 7 מקטעים, כשכל מקטע עשוי מ- 4 לדים בשורה.
את האפקטים אפשר לממש בעזרת ה- max7219 (קניתי 5 כאלה ב- 10 ש"ח באיביי). השבב יודע לתפעל מטריצה של עד 8 על 8 לדים, וכולל גם מפענח לתצוגת 7 מקטעים, כלומר אפשר לחבר אותו ישירות לתצוגה שכזו (קתודה משותפת) ופשוט לומר לו איזה מספר להציג, בין 1 ל-8 ספרות. יש לו גם אופציה לשלוט על העוצמה של התאורה (סוג של נגד דיגיטלי פנימי). בקיצור - אפשר ליצור הרבה התנהגויות שונות ומשונות לתצוגה איתו.

כמובן שמאחורי השעון יהיה רספברי פיי שייתפעל אותו. אני אצטרך לכתוב קוד שיידבר עם ה- max7219. יש קודים כאלו ברשת אבל כתובים בפייתון. אני אישית מעדיף לעבוד ב- Java, אז אולי ייצא מזה קוד פתוח לטובת הקהילה.
נ.ב.
היו אמורים להיות 100 לדים בחבילה, אבל היו בה רק 80. בכל מקרה, אני אצטרך 4לדים*7מקטעים*4ספרות = 112 לדים, אז אני צריך למצוא עוד כ-40. הבעיה היא למצוא לדים זהים. יש למישהו חבילה זהה שהוא הזמין מ dealextreme?...

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

יום רביעי, 9 באוקטובר 2013

תצוגת LCD בתקן HD44780 ע"י Raspberry Pi

כבר כמה זמן שאני "חם" על תצוגת LCD קטנה כדי שאוכל לחבר אותה ל- Raspberry Pi ולהציג מידע פשוט ממנו. כל מכשיר שאני רואה עם תצוגה כזו צריך לחשוש ממני...
אחרי שתצוגה אחת שכזו אכזבה אותי ופשוט לא עבדה, בסופו של דבר נפל לידי מכשיר פקס ישן (שזוגתי מצאה לי בשוק "קח-תן") עם תצוגת LCD בעלת שורה אחת של 16 ספרות. מצאתי הסבר פשוט ומעולה באתר rpiblog.com, שהסביר איך לחבר, ובאופן מפתיע זה עבד די בנסיון הראשון!



שנצלול לפרטים?

מסתבר שרוב התצוגות הללו משתמשות בתקן אחיד שנקרא HD44780. כיוון שכך, אותו קוד שפרסם Rahul Kar בבלוג המוזכר לעיל, עובד עם תצוגת אחרות. היו שני הבדלים שנדרשתי לתת עליהם את הדעת:
  1. פין 3, שאחראי על ה- contrast של התצוגה - ראול חיבר אותה ישר ל-GND. אצלי זה יצא חזק מדי והיה קשה לראות מה כתוב. אני השתמשתי בנגד של (10kΩ) אוהם.
  2. התצוגה שלי היתה בעלת שורה אחת של 16 תווים, אבל התנהגה כתצוגה של 2 שורות של 8 תווים כ"א. כלומר, הדפסה של
1234567890123456
היתה מציגה "12345678" על המסך. אבל הדפסה של
12345678\n90123456
היתה נותנת את התוצאה המתבקשת, "1234567890123456" על המסך.

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

#!/usr/bin/python

import RPi.GPIO as GPIO
import sys
from time import sleep
class HD44780:

    def __init__(self, pin_rs=7, pin_e=8, pins_db=[25, 24, 23, 18]):

        self.pin_rs=pin_rs
        self.pin_e=pin_e
        self.pins_db=pins_db

        GPIO.setmode(GPIO.BCM)
        GPIO.setup(self.pin_e, GPIO.OUT)
        GPIO.setup(self.pin_rs, GPIO.OUT)
        for pin in self.pins_db:
            GPIO.setup(pin, GPIO.OUT)

        self.clear()

    def clear(self):
        """ Blank / Reset LCD """

        self.cmd(0x33) # $33 8-bit mode
        self.cmd(0x32) # $32 8-bit mode
        self.cmd(0x28) # $28 8-bit mode
        self.cmd(0x0C) # $0C 8-bit mode
        self.cmd(0x06) # $06 8-bit mode
        self.cmd(0x01) # $01 8-bit mode

    def cmd(self, bits, char_mode=False):
        """ Send command to LCD """

        sleep(0.001)
        bits=bin(bits)[2:].zfill(8)

        GPIO.output(self.pin_rs, char_mode)

        for pin in self.pins_db:
            GPIO.output(pin, False)

        for i in range(4):
            if bits[i] == "1":
                GPIO.output(self.pins_db[::-1][i], True)

        GPIO.output(self.pin_e, True)
        GPIO.output(self.pin_e, False)

        for pin in self.pins_db:
            GPIO.output(pin, False)

        for i in range(4,8):
            if bits[i] == "1":
                GPIO.output(self.pins_db[::-1][i-4], True)


        GPIO.output(self.pin_e, True)
        GPIO.output(self.pin_e, False)

    def message(self, text):
        """ Send string to LCD. Newline wraps to second line"""

        for char in text:
            if char == '\n':
                self.cmd(0xC0) # next line
            else:
                self.cmd(ord(char),True)

if __name__ == '__main__':

    lcd = HD44780()
    lcd.message(sys.argv[1] +"\n"+sys.argv[2])

הרצה:
sudo python lcd.py first second

על המסך אמורות הופיע שתי המילים first ו- second, אחת בכל שורה (או במקרה שלי, באותה שורה).