esp8266 יכול לבד – רשם טמפרטורה על Wifi (משוחזר 27.05.2015)

קודם כל החלטתי שפירוש המילה "logger" היא "רשם", עכשיו כשסיכמנו על זה נמשיך…

מזה כמה חודשים קבוצת esp8266.com הכריזה על האפשרות להשתמש בIDE של ארדואינו לתכנות הבקרים הללו, אבל אז היה צריך להוריד IDE שלם, לדרוס או לשמור בנפרד, בקיצור להסתבך.
לא מזמן קבוצת Arduino.cc הציגה את הBoards Manager אשר מאפשר לפנות לשרתים שונים ולהוריד משם תוספות והרחבות ללוחות שונים ומשונים, וכן היה..
קישור לGitHub של ההרחבה

כל מה שצריך לעשות זה להוריד את הגירסא החדשה של Arduino IDE, בPreferences להוסיף קישור לשרת המכיל את ההרחבה, להיכנס לBoards Manager, לבחור את ההרחבה לesp8266 ולהתקין, כן כל כך פשוט.

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


פה חשדתי! מה ככה סתם? בלי ארדואינו? בלי לצרוב לו קושחה? איך זה יכול להיות, ובכן ככה!
זה פשוט עובד, מבלי להסתבך יותר מדי, הIDE מקמפל את הקוד לשני קבצי bin ומעלה אותם לesp8266, וזה כל מה שנדרש ממנו בכדי לתפקד.

אז מה עושים עם זה?

ובכן, חבר התקיל אותי באיזה פרויקט מעניין, פרטי הפרויקט מסווגים ביותר, אבל מכיוון שאני מימשתי רק חלקיק ממנו אני יכול לשתף אתכם.
עכשיו תחגרו חגורות והכינו את עצמכם כי הפרויקט כולל esp8266 כמובן, ו..*תופים*… חיישני טמפרטורה DS18B20, מפתיע, הא!!!
עכשיו צחוק בצד, כבר עשיתי פרויקט שכלל את המודול הנ"ל וחיישני טמפרטורה דיגיטליים, מוזמנים לעיין ולהתרשם בפוסט בפורום makers ובאתר weather.alexshu.com שאליו עולים הנתונים.
אבל בפרויקט שלי השתמשתי בארדואינו שיאסוף נתונים מהחיישנים ויפקוד על מודול הwifi לשלוח אותם לשרת, אבל הesp8266 הוא מיקרובקר בפני עצמו, והוא מצליח להתמודד עם המשימה לבד ובאופן מצויין.

יחד עם ההרחבה מגיעות מספר דוגמאות, ואחת הדוגמאות היא שליחת נתונים לשירות data.sparkfun.com, שירות יוצא מן הכלל, אבל הוא מציג את הנתונים בטבלה פשוטה, מביא לך אפשרות להוריד את המידע במגוון פורמטים אבל לא מציע שום ממשק ויזואלי לנתונים.
פה נכנס thingspeak.com, שכן מציע לך ממשק ויזואלי, אמנם פשוט אבל זה כבר יותר נעים לעין.

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

לצערי ThingSpeak כבר לא חינמי וכל התוכן הישן נמחק

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

הסבת ארדואינו אונו ל3.3V 8Mhz (משוחזר 26.05.2015)

שאלת השאלות..
מה המטרה של זה?
ובכן, תשובה קלה היא לשאלה למה צריך ארדואינו 3.3V?
יש המון חומרה כמו מסכים (נוקיה, OLDE וTFT למיניהים) חיישנים ואפילו הesp8266 שדורשים 3.3V גם VCC וגם בתקשורת הלוגית
מה שרבים לא מבינים הוא שכאשר מצויין שמסך עובד על 3.3V זה לא תמיד מספיק לחבר את VCC ל 3.3V ולסגור עניין, כל שאר הפינים של התקשורת עובדים על 3.3V גם כן
ולוח כמו אונו עובד על 5V בכל הפינים שלו מה שיגרום לרכיב לא לעבוד/ להישרף.

למה לעשות את זה לאונו? יש הרי ארדואינו אחרים שעובדים על 3.3V!
נכון, יש .. ולא מעט, אבל או הם פחות נפוצים, או יותר יקרים, או מוזרים
יש את הפרו מיני, שהוא מעולה, אבל אין לו USB-RS232 מובנה וזה דורש עוד רכיבים

אז האונו הוא נוח! הוא כל יכול! הוא יורה לייזרים מהעיניים! ועכשיו הוא גם יהיה 3.3V!!

רשימת מכולת:
אדרואינו אונו – חיקוי סיני ב 15שח
מייצב מתח 3.3V – תואם לסוג והאריזה של המייצב שנמצא על הלוח
מתנד גבישי 8Mhz – תואם לאריזה לזה שכבר נמצא על הלוח
דיודה 1N4148 – בכללי אפשר לקחת כל דיודה עם ערכים שיתאימו

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

הערה בקשר לארדואינו, בחרתי בכוונה ארדואינו שיש עליו פיוז ברור, מייצב מתח מזוהה ומתנד שהוא לא SMD כדי שיהיה פשוט יותר להחליפו

מה אני הזמנתי:
הארדואינו – http://www.ebay.com/itm/221591186520…%3AMEBIDX%3AIT
המייצבים – AMS1117 3.3V 0.8A כמות – http://www.ebay.com/itm/171654620834…%3AMEBIDX%3AIT
יש גם מייצבים כאלה שהם 1A אבל אני לא יודע אם זה בלוף או מה הסיכוי שאכן תקבלו כאלו מאיביי
המתנד – 8MHZ כמות – http://www.ebay.com/itm/191532992522…%3AMEBIDX%3AIT

כמובן לא חייב בכמויות ובמחירים שאני קניתי …

התהליך:
מפרקים את המתנד + מייצב המתח + הפוליפיוז ששומר על הUSB


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

השלב הבא הוא להלחים את המתנד החדש, את המייצב, אני החלטתי להשאיר את הפולי פיוז וגם הוספתי דידיוה אחרי הפיוז שנכנסת לVIN של המייצב
מה שעשיתי בעצם זה לנתק את המסילה של ה5V שהולכת מהUSB בעזרת הסרת הפוליפיוז, מסילה זו הולכת למעגל שבורר מהיכן להזין את הבקר, אם זה USB או DC, וממשיכה לבקר עצמו
מכיין שאנחנו לא צריכים 5V לבקר הסרתי את הפוליפיוז, שמתי 3 שכבות של סרט קפטון על הפד השני של הפיוז שממשיך אל הבורר כדי ליצור נתק
אל הפיוז הלחמתי דיודה שנכנסת לVIN של המייצב, כעט המעגל שבורר מנוטרל והכל ניזון מהמייצב.
אבל הדיודה חשובה ביותר, היא שם כדי שאם תחברו גם DC וגם USB, זרם מהDC לא יזרום לתוך ה USB.

עם החומרה סיימנו.

הוספת לוח מתאים לArduino IDE

פה יש הרבה אפשריות, אבל אני שיכפלתי את הלוח של האונו ושיניתי 2 קריטריונים חשובים.
השינוי מתבצע בקובץ Boards.txt שבנתיב (צריך לפתוח את הקובץ כמנהל מערכת) קוד:

C:\Program Files (x86)\Arduino\hardware\arduino\avr

אם אתם משתמשים מתקדמים לא תיהיה לכם בעיה למצוא את הנתיב גם בלינוקס וגם בגרסא שהיא לא Installer

הגרסא שלי היא 1.6.3 של arduino.cc
וזאת התוספת (השינויים מאונו רגיל מסומנים באדום וגם נמחקו דברים) אי שם בשורה 80 אחרי הלוח אונו המקורי: קוד:

##############################################################

uno33v.name=Arduino Uno HACKED 3.3V 8Mhz


uno33v.upload.tool=avrdude
uno33v.upload.protocol=arduino
uno33v.upload.maximum_size=32256
uno33v.upload.maximum_data_size=2048
uno33v.upload.speed=57600


uno33v.bootloader.tool=avrdude
uno33v.bootloader.low_fuses=0xFF
uno33v.bootloader.high_fuses=0xDE
uno33v.bootloader.extended_fuses=0x05
uno33v.bootloader.unlock_bits=0x3F
uno33v.bootloader.lock_bits=0x0F
uno33v.bootloader.file=optiboot/optiboot_atmega328.hex


uno33v.build.mcu=atmega328p
uno33v.build.f_cpu=8000000L
uno33v.build.board=AVR_UNO
uno33v.build.core=arduino
uno33v.build.variant=standard


##############################################################

שומרים, פותחים את הIDE, בוחרים את הלוח החדש וממשיכים לעבוד רגיל

מה קיבלנו?
קיבלנו ארדואינו אונו שמתח הפעולה שלו הוא 3.3V ומהירות הבקר היא 8Mhz
ושני הפינים 5V וגם 3.3V מוציאים 3.3V, אז תגידו שלום ל5V בארדואינו הזה
ברגע שמחברים בUSB, בגלל הדיודה יש נפילת מתח אז המתח בפין 5V הוא 3.2V וכך גם בפין 3.3V
בחיבור DC המתח 3.3V בשני הפינים (5V וגם 3.3V)
ההבדל הוא שפין 5V שהוא 3.3V החדש יכול לספק על 800mA (בעצם מגבלת המייצב)
ופין 3.3V עדיין מחובר לממיר USB-RS232 אז הוא עדיין מספק רק עד 50mA.

עכשיו אני יכול לחבר אליו esp8266 ישירות בכיף

מסקנות והבהרות משימוש קצר:

  • בחיבור USB עדיין אין מספיק זרם בשביל esp8266 (צפוי) חיבור DC לעומת זאת עובד טוב
  • הנגד על הלד שבפין 13 גבוהה מידי ל3.3V, דיי מציק לי שהוא חלש,אז אפשר להחליף (לא קריטי)

שאלות, תשובות, טענות ועוד בתגובות

מד לחות אדמה V2 מבוסס ATtiny13 (משוחזר)

פרויקט של השעות הקטנות של הלילה השתדרג טיפה   slower, cheaper, smaller, better

אז במטרה לצמצם את הפרויקט שלי http://www.makers.co.il/mfs/showthread.php?t=3151
נכנסתי לאיביי והזמנתי ATtiny13A ו ATtiny85

כמובן שה 13 היה יותר זול וגם הגיע ראשון and oh boy כמה עבודה ולמידה עברתי כדי לגרום לזה לעבוד.
חלקים של הקוד עברו לקצת יותר low level כדי לצמצם בגודל, כמו שינה וdigitalWrite
גודל הקוד הסופי 920 בייט

על השינה למדתי ועשיתי "פורט" לATtiny13 מהפרויקט הנחמד הזה https://learn.sparkfun.com/tutorials…w-power-attiny

בעיות:

  • ATtiny13A מגיע עם 1K פלאש בלבד ולצמצם את גודל הקוד היה המכשול העיקרי
  • גם ה 13 וגם ה 85 מגיעים עם הרבה פחות פינים אז גם הייתי צריך לצמצם את הLDR ולא לבדוק אם יש אור .. אבל זה לא ממש מפריע לי
  • בtiny למיניהם אני לא יכול לחשב את המתח של הVCC כי ה בקר לא מסוגל לעשות זאת אז הייתי צריך להשתמש ב ADC אז העדפתי מתח של סוללה על פני אור  במקום לחסוך סוללה לבזבז יותר 

מורכב מ:

  • ATtiny13A + תושבת
  • מזלג לחות 😛 + נגד פול-אפ 10K
  • לד צהוב + נגד 680
  • כפתור TACT + נגד פול-אפ 10K
  • זוג נגדים לחלק את מתח הסוללה 1M ו560K (נגדים גדולים כדי לחסוך סוללה)
  • זוג סוללות כפתור 1.5V בטור (יוחלף ב CR2032)

משמעות קיום:
לתריע אם האדמה יבשה ע"י הבהוב לד -> ולהתריע אם הסוללה חלשה ע"י הבהוב שני.
מידת הלחות של האדמה ניתנת לכיול.

תיאור הפעולה:
מתעורר > מחליף analogReference ל INTERNAL כלומר 1.1V ולוקח מספר דגימות כדי לייצב את הקריאה, דוגם מתח סוללה, מחליף את הanalogReference ל DEFAULT כלומר VCC ולוקח מספר דגימות כדי לייצב את הקריאה ->
בודק אם כפתור כיול לחוץ {אם כן: מהבהב ומחכה ללחיצה שניה אשר תביא לדגימת המוליכות של האדמה ושמירה לEEPROM | אם לא: ממשיך} >
דוגם את מוליכות האדמה ומשווה לערך המכוייל {אם נמוך: מפליש את הלד} משווה את מתח הסוללה {אם נמוך: מפליש את הלד פעם נוספת} > חוזר לישון ל 8 שניות.

שינויים מיוחדים:

  • נצרבו פיוזים לבקר אשר שמים אותו על שעון 4.8Mhz פנימי ומכבים זיהוי מתח נמוך (Brown-out) כדי שיחסוך בסוללה ויעבוד כל עוד הוא יכול.
  • הפיוזים:
    low_fuses=0x79
    high_fuses=0xFF

צריכת אנרגיה וזמנים:
שינה של 7.61824 שניות במומוצע
ומצב ער של 81536 מיקרו-שניות בממוצע שזה 81.5 מילישניות

צריכה בשינה – 0.0068 מיליאמפר (6.8 מיקרו אמפר – עם האדרואינו פרו מיני היה 9 מיקרו אמפר)
צריכה כש-ער בלי הבהוב הלד – 1.43 מיליאמפר
צריכה כש-ער עם הבהוב הלד – 2.44 מיליאמפר

לא חישבתי זמן סוללה אבל יותר חסכוני מהפרויקט הקודם אז שנה++

הקוד"

ליבה:
ליבה core13 קלילה במיוחד
http://forum.arduino.cc/index.php?topic=89781.0
http://sourceforge.net/projects/ard-core13/

הערות:
הATtiny13A נראה לי עדיף בסופו של דבר כי הוא מסוגל לעבוד במתחים נמוכים ממש שלא כמו ה86 שלפי הדף הוא עד 2.8V
יש את ADC0 שלא השתמשתי בו ויכלתי לשים עליו LDR בשביל זה אני צריך לכבות את פין RESET בפיוזים וזה ימנע ממני לצרוב עם ISP ובגלל שאין לי צורבים ואין לי ראש להיכנס ביינתים לצורבים HV זה ישאר ככה
אם אזכר במשהו אוסיף..

ומקווה שאהבתם 

מערכת סטריאו ישנה מקבלת חזרה שליטה מרחוק IR. (משוחזר)

מעשה במערכת סטריאו משולבת מבית Sherwood, היא נחתה בשוק באיזור שנות ה90, אם לא לפני..
כוללת יחידה ראשית, מגבר, אקולייזר, דק קלטות ואפילו נגן דיסקים! כן כן! טכנולוגיה.
אני מצאתי  אותה לא מזמן עזובה ברחוב קר, ללא נגן הCD והקלטות, ללא שלט, מאובקת, במצב מזעזעת כל הפלסטיקה שלה כבר דביקה והסימונים מתקלפים, אבל לא וויתרתי עליה.
מהר העלתי אותה הביתה, חיברתי לה 2 רמקולים ממערכת סטריאו של LG, והיא עובדת!
היא עובדת מעולה, בתור חובב סאונד, אוהב מוזיקה, וילד של שנות ה90 התאבהתי בסאונד שלה מהצלילים הראשונים, חמים כאלה… לא כמו היום.

אז מה הבעיה?

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

הפיתרון:

אפשרות א' – יש למערכת עינית IR אז בוודאות היה לה שלט ובוודאות ניתן לכוון את הווליום איתו.
רק צריך את הקודים! לא כל כך מהר, חיפוש באינטרנט מחזיר בקושי 3 תוצאות.
לא קודים ולא IR.

אפשרות ב' – אם היה לה שלט, אז כנראה הפוטנציומטר ששולט על העוצמה הוא ממונע (: היה לי כזה במערכת אחרת משנות ה90 (פיסת טכנולוגיה מרהיבה), שזה מקצר תהליכים, רק לזרוק פנימה ארדואינו עם בקר מנוע, ממסר להדלקה וכיבוי וחיישן IR, לתכנת אותו לכפתורים הפנויים בשלט שלי וזהו!… וכך היה.

שלב א' – אבטיפוס

לפני שמתחילים לפרק מערכות סטריאו צריך לוודא שזה בר ביצוע.
על breadboard עם ארדואינו אונו, H-Bridge וממסר כתבתי קצת קוד, קצת ניסויים וקצת debugging
וזה עובד!
מה שכן, כאשר חיברתי את הH-Bridge ל5V של הארדואינו, הארדואינו הפסיק לפענח את הקוד IR אחרי שנדלק המנוע, כנראה שהמנוע יוצר יותר מידי רעשים, שלא מאפשרים פיענוח נכון של הIR.
פתרתי את זה ע"י בידוד הvcc של הH-Bridge למקור כוח חיצוני לפני הכניסה לארדואינו.

עכשיו אפשר להתקדם:

שלב ב' – אינטגרציה

הגיע הזמן להכניס את כל זה למערכת סטריאו.
ארדואינו פרו מיני 5V
בקר מנועים דו ערוצי (צריך רק ערוץ אחד)
מקלט IR
ממסר + טרנזיסטור + נגד 1K + דיודה
ממיר מתח DC-DC
לוח PCB חורים
מלחם, בדיל, האדרים, חוטים, ברגים, כלים, קדחים…

קודם כל מצאתי מקור מתח קבוע על הלוח של המגבר, מקור מתח שזמין גם כאשר המערכת כבויה
עם מולטימטר, קצת ידע באלקטרוניקה ושכל ישר מצאתי מקור מתח 15V, אליו יתחבר הממיר מתח וינמיך אותו ל6.5V, הH-Bridge יקבל 6.5V (למה דווקא 6.5V?, שאלה טובה, זה המתח שבו הפוטנציומטר מסתובב במהירות שנראית לי מתאימה) וגם הארדואינו יקבל 6.5V לתוך פין raw, משם דרך המייצב שעל הארדואינו נקבל 5V בשביל הממסר והמקלט IR.

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


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

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

קוד:

את הקוד רשמתי על בסיס הדוגמא IRecord שבתוך ספריית IRemote

תוצאה סופית:

מילות סיכום:

תוכנית א' – כשחיפשתי את הקודים באינטרנט מצאתי קודים אפשריים לקידוד שלטים אוניברסליים לעבוד עם מערכות סטריאו של Sherwood, זה קוד ID, לא באמת רצף הIR שנשלח מהשלט.
אבל! יש לי דרך לשים את ידי על שלט אוניברסלי שכזה, אם אכן זה יעבוד אעדכן בהמשך.

מקווה שאהבתם

[מדריך וידאו משולב] פיענוח שלט של מזגן, ושליטה במזגן בעזרת ארדואינו. (משוחזר)

היי זהו פוסט משוחזר שמת יחד עם הפורום Makers.co.il, אבל הנה הוא חזר 🙂

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

המדריך מורכב וטקסט שהועתק מנושא אחר שבו רשמתי את המקור http://www.makers.co.il/mfs/showthread.php?t=2722
וגם סרטון וידאו באורך 38 דקות ביוטיוב, הוא דיי משעמם אז תראו רק אם זה באמת מעניין אתכם.

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

הקדמה:
תקשורת IR בין שלט לבין מכשיר כלשהו מתבצעת עם פולסים בתדר 38Khz בתזמונים שונים ובאורכים שונים
למה 38Khz ? כדי שלא כל דבר שפולט IR יפריע לתקשורת כמו אור שמש, אש, נורת להט רגילה וכו…

הבעיה:
טלויזיה,סטריאו, מגבר, YES, HOT, תבל, ערוצי זהב, עידן+, עידן- הצלחנו,מה הבעיה במזגן? למה זה לא עובד?
ובכן מזגן פועל קצת שונה.
כשאתם לוחצים בשלט להדליק טלויזיה הוא שולח רצף פולסים שאומרים לה להידלק, מחרוזת באורך 30-70 פולסים בערך
כשאתם לוחצים להדליק מזגן, בגלל שיש לו שלט "חכם" שמראה לכם על המסך את כל ההגדרות, בכל לחיצה הוא שולח כמות אסורונומית של מידע: תדליק/תכבה, מצב חום, מאוורר אוטומטי, טמפרטורה 30 מעלות, מדף זז,IFEEL מכובה,SMART דלוק,תכין קפה,קר לי.סוף.
ומיד אחרי זה להעלות מעלה אחת הוא שולח: אל תדליק/תכבה, מצב חום, מאוורר אוטומטי, טמפרטורה 31 מעלות, מדף זז,IFEEL מכובה,SMART דלוק,תכין קפה,קר לי.סוף.
וגם כשאתם מכבים הוא שולח הכל בכל מקרה!
רק יש הבדל קטן בין סוגי מזגנים ושלטים – יש שלטים שמתכבים ברגע שמכבים את המזגן ונגלקים ברגע שמדליקים, לשלטים אלא יש קוד נפרד לכיבוי והדלקה.
שלטים שדלוקים תמיד יש להם את אותו הקוד לכיבוי והדלקה, הם כל פעם שולחים TOGGLE מתי שאתם רוצים להגליק או לכבות .. ומבצע בהתאם למצב המזגן.
וזה יוצא מחרוזות באורך 150-250 פולסים.. ומפה זה מסתבך.
כי בטח ניסיתם עם ספריית IRemote לקלוט קוד ולשדר אותו בחזרה ושום דבר לא עבד, הסיבה היא שהספרייה מוגבלת למחרוזות באורך 100 בלבד אז מלא מידע נחוץ פשוט לא נשלח..
מה עושים?

מתחילים, צ'ק ליסט:

  • יש לנו מקלט IR 38Khz מחובר לארדואינו (הם פועלים על 5V וחיבור פשוט ביותר כאשר VCC ו GND מתחברים למתח וOUT של המקלט מתחבר ל פין 2 בארדואינו במקרה שלנו- תבדקו מול DATASHEET שאתם מחברים נכון … אם לא תחברו נכון הלך המקלט  )
  • יש לנו לד IR שמחובר לפין 3 – ואני ארחיב טיפה לד IR פועל על 1.5V כן שמעתם נכון .. ווזולל 50מיליאמפר בכל יריה. כך שלא מומלץ לחבר אותו ישירות לפין דיגיטלי עם נגד כי איך שאנחנו יודעים הפנים בארדואינו יודעים רק 40mA, אפשר לחבר עם נגד גדול יותר ולהגביל את הזרם בשביל לספק בטיחות לארדואינו אבל אנחנו מאבדים המון טווח ככה וזה לא מה שאנחנו רוצים. מה עושים? מחברים דרך טרנזיסטור – מפין 3 דרך נגד 1K לBASE של טרנזיסטור גנרי (2N2222 לדוגמא) Emitter לGND דרך נגד 75 אוהם וCollector לרגל מינוס של הלד, רגל פלוס של הלד ל 5V.
    לגבי הנגד זה בעצם 70 אבל 75 הכי קרוב… ממליצים לנו נגד של 1/2 וואט אבל בדלל שהוא לא ידלק קבוע וירה פולסים בלבד.. אני מניח הנחה לא נכונה שיספיק גם רבע ואט (שזה הרגילים) – אפשר לעלות ל 100/82 אוהם אם אין לכם 75 אבל חס וחלילה לא לרדת מתחת … (100 אוהם יגביל אותנו ל35 mA ו82 אוהם ל42) ראו שרטוט
  • ספריית IRemote שתאפשר לנו לשלוח את הקוד שאנחנו רוצים בתדר 38Khz שזאת השפה שבה מדברים שלטים – אפשר להוריד מכאן https://github.com/shirriff/Arduino-IRremot

מקור הבעיה והפתרון:
מצאתי בקוד של IRemote את ההגבלה ל 100 תווים .. היא נמצאת בקובץ IRemote.h שורה 122 – אבל כששיניתי את הערך ל150/200/250 – שומדבר לא השתנה.

קוד:

#define RAWBUF 100

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

קוד להקלטת פקודות IR בשביל IRemote שמוגבל ל600 תווים:

קוד זה ידאג להגיד לנו בדיוק מה המחרוזת ללא הגבלה ל100 וגם ללא הגבלת מינימום כלשהי (בעצם ל 600 תווים 

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

קוד:

unsigned int raw[344] = {8780, 4440, 540, 1680, 540, 1680, 580, 540, 580, 540, 540, 580, 540, 580, 540, 580, 560, 1660, 540, 580, 540, 1680, 540, 1680, 540, 580, 540, 580, 560, 560, 540, 580, 560, 560, 580, 540, 560, 560, 560, 1660, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 540, 580, 560, 560, 540, 580, 540, 580, 540, 580, 540, 580, 540, 580, 540, 580, 540, 560, 560, 580, 540, 580, 540, 580, 540, 560, 560, 560, 560, 560, 560, 560, 560, 560, 540, 580, 7800, 580, 1660, 560, 560, 560, 1660, 560, 540, 580, 1640, 580, 540, 580, 540, 580, 1660, 560, 1660, 560, 1660, 560, 560, 560, 560, 560, 1660, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 540, 580, 540, 580, 560, 560, 540, 580, 540, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 580, 540, 580, 540, 560, 560, 560, 560, 540, 580, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 540, 580, 540, 560, 560, 560, 560, 560, 560, 560, 1660, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 1660, 560, 7820, 560, 560, 560, 560, 560, 560, 560, 560, 540, 560, 560, 560, 560, 560, 560, 560, 580, 1640, 580, 540, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 540, 580, 580, 540, 580, 540, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 540, 580, 540, 580, 540, 580, 540, 580, 540, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 580, 540, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 1660, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 540, 580, };
irsend.sendRaw(raw,344,38);

המון מספריםת יותר נכון 344!
אבל מה קיבלנו? קיבלנו קוד, שהוא בעצם תזמונים של הדלקה וכיבוי הלד IR במיקרו שניות, הקוד ישחזר בדיוק את כל ההגדרות שהיו בשלט וברגע שתשלחו את הקוד מהארדואינו פעם אחת תדליק אותו עם אותן ההגדרות ופעם שניה תכבה וכך הלאה.
אם תקליטו את הקוד כאשר אתם לוחצים +1 במעלות ויש 25 מעלות על השלט כל פעם שתשלחו את הקוד הוא לא ידליק ויכבה את המזגן, אבל אם הוא דלוק, הוא ישים אותו במצב 25 מעלות עם כל ההגדרות שהיו בשלט, כל פעם אותו הדבר.

שליחת קוד ה-IR:
לוקחים את החלק הראשון שקיבלנו שזאת הגדרה של מערך INT בראש הקוד
וכשרוצים לשלוח משתמשים בפקודה שבסוף
לדוגמא:

שליחת קוד IR בעזרת IRemote לדוגמא:

וזה ישלח לנו את הקוד כל פעם אחת בלבד בכל RESET של הארדואינו.

פחות צורם בעיניים:
אם נתבונן בכל המספרים האלה נראה שאין שם כל כך הרבה מגוון, יש שם 8780,4440 בהתחלה וכל השאר זה 580,560,540 וגם 1680,1660,1640 ועוד 7280 טועה שם איפושהוא בשליש דרך.
נגלה לכם סוד ונגיד שכל מה שקרוב אחד לשני בטווח 100-200us זה אותו הדבר,
כלומר 540,560,580 זה הכל אותו אורך ומעכשיו נקרא לו 560 …
ו 1680,1660,1640 זה הכל 1660
שני המספרים בהתחלה מייצגים את תחילת הקוד שמה שקולט את זה יבין שהוא מקשיב מההתחלה.
והמספר 7280 הוא סוג של מציין דרך, גם שם בשביל לשמור על הסדר..

אז העיקר שיש לנו זה 560 ו 1660 וזה כמו 0 ו 1 בבינארית .. HIGH ו LOW

נשבצר את הקוד שלנו קצת כדי לפשט את העניין נבקש להדפיס כל מה מעל ל7000 בתור 3
4000-5000 בתור 2
1000-2000 בתור 1
0-1000 בתור 0

קוד להקלטת פקודות בפורמט "בינארי":

נלחץ על אותו הכפתור ונקבל

קוד:

Ready to decode IR!
3, 2, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

שעם זה כבר אפשר לעבוד …

ניתוח ופיענוח:
הקלטתי קודים ושמתי אותם בקובץ CSV (קובץ אקסל בסיסי ביותר שכל שורה היא שורה וכל עמודה מופרדת בפסיק)
אם מדביקים מה סריאל מוניתור ישר בקובץ עם NOTEPAD ואחרי זה פותחים עם אקסל זה עושה את הקסם.

בעזרת פורמטינג מבקשים ממנו שיצבע לנו את 0,1,2,3 בצבעים שונים
מחפשים מה השתנה, מה לא השתנה ומה פעם ככה פעם ככה, מה שהשתנה סימנתי את העמודה בצבע מסויים (באותו הצבע של התיאור) ואת מה שלא עושה שם היגיון צבעתי באדום ולא אתייחס אליו (בגלל זה גם הקלטתי את הטמפרטורות פעמיים ככה רואים יותר טוב דברים לא הגיוניים.)
עמודה שכבר סומנה בצבע מסויים לא אתייחס איליה בעתיד כשאחפש מה משתנה בפונקציות אחרות של השלט
בסופו של דבר כל מה שלא משתנה כלל סימנתי באפור וזה הולך להיות קוד הבסיס שלנו שבו פשוט נציב 1 |(או 1660 לדיוק במקרה שלי)במקומות הנכונים כדי לכופף אותו לצרכינו.
בסוף הקוד זה נראה כאלילו יש 2 חלקים שחוזרים על עצמם .. כמו סוג של Checksum .. וכאן כבר נכנסת בדיקה וטעייה כדי לבדוק מה מו מי. (פרטים בוידאו)

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

קוד סופי לשליטה על מזגן Breeze לארדואינו דרך ממשק סריאלי: 

משחזר …

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

על WaybackMachine שמעתם? זה שירות שעושה סנפשוטים של אתרים ואיזה פלא גם של האתר שלי, וגם של Makers.co.il שניסיתי ליצור קשר עם בעליו החדש כדי לנסות להוצאיא משם כמה מדריכים שלי אך ללא הצלחה.

אבל הנה אני מתחיל לשחזר והקונטנט חוזר. נתראה בסיבוב.