בפרויקט זה אנו משתמשים במושג ADC (Analog to Digital Conversion) ב- ARDUINO UNO. אנחנו הולכים להשתמש חיישן אפקט הול ו Arduino uno כדי למדוד את עוצמת השדה של מגנט. החיישן בו השתמשנו כאן הוא UGN3503U. זהו חיישן אולם המרגיש את עוצמת השדה המגנטי ומספק מתח משתנה ביציאה פרופורציונאלית לעוצמת השדה. חיישן זה קולט חוזק שדה ביחידות ' GAUSS '.
אז עם חיישן זה יהיה לנו עוצמת השדה כמתח משתנה. באמצעות תכונת ADC נמיר את המתח הזה למספר. מספר זה מייצג את עוצמת השדה ומוצג על גבי LCD.
ל- Arduino שישה ערוצי ADC. באלה כל אחד מהם או כולם יכולים לשמש ככניסות למתח אנלוגי. ה- UNO ADC הוא ברזולוציה של 10 סיביות (כך שהערכים השלמים מ- (0- (2 ^ 10) 1023)). המשמעות היא שהיא תמפה את מתח הכניסה בין 0 ל -5 וולט לערכים שלמים בין 0 ל 1023. כך לגבי כל (5/1024 = 4.9mV) ליחידה.
בתוך כל זה אנו הולכים לחבר פוטנציומטר או סיר לערוץ 'A0', ונציג את תוצאת ה- ADC בתצוגה פשוטה. התצוגות הפשוטות הן יחידות תצוגה 16x1 ו- 16x2. יחידת התצוגה 16x1 תכלול 16 תווים והיא בשורה אחת. 16x2 יהיה 32 תווים בסה"כ 16in 1 st קו 16 עוד 2 nd קו. כאן חייבים להבין שבכל תו ישנם 5x10 = 50 פיקסלים אז כדי להציג תו אחד כל 50 הפיקסלים חייבים לעבוד יחד, אבל אנחנו לא צריכים לדאוג לזה כי יש בקר אחר (HD44780) ביחידת התצוגה שעושה את עבודה של שליטה בפיקסלים (אתה יכול לראות את זה ביחידת LCD, זה העין השחורה מאחור).
רכיבים נדרשים
חומרה: ARDUINO UNO, ספק כוח (5v), JHD_162ALCD (16x2LCD), קבל 100uF (2 חתיכות), UGn3503U.
תוכנה: arduino IDE (Arduino nightly)
תרשים מעגל והסבר
האיור לעיל מציג את דיאגרמת המעגל למדידת שדות מגנטיים באמצעות arduino uno.
ב LCD 16x2 יש 16 פינים בכל מקום אם יש תאורה אחורית, אם אין אור אחורי יהיו 14 פינים. אפשר להפעיל או להשאיר את סיכות התאורה האחורית. עכשיו ב- 14 הסיכות ישנם 8 פיני נתונים (7-14 או D0-D7), 2 סיכות אספקת חשמל (1 & 2 או VSS & VDD או GND & + 5V), 3 rd סיכה לבקרת ניגודיות (VEE-שולט כמה עבה הדמויות צריכות להיות מוצג) ו- 3 סיכות בקרה (RS & RW & E).
במעגל שלמעלה, תוכלו לראות שלקחתי רק שני סיכות שליטה, מעט הניגודיות ו- READ / WRITE לא משמשים לעתים קרובות כך שניתן לקצר אותם לקרקע. זה מכניס את LCD למצב הניגודיות והקריאה הגבוה ביותר. אנחנו רק צריכים לשלוט בסיכות ENABLE ו- RS כדי לשלוח תווים ונתונים בהתאם.
החיבורים שבוצעו עבור LCD מובאים להלן:
PIN1 או VSS לקרקע
PIN2 או VDD או VCC ל- + 5v כוח
PIN3 או VEE לקרקע (נותן ניגודיות מרבית הטובה ביותר למתחילים)
PIN4 או RS (בחירת רישום) ל- PIN8 של ARDUINO UNO
PIN5 או RW (קריאה / כתיבה) לקרקע (מכניס את LCD למצב קריאה מקל על התקשורת עבור המשתמש)
PIN6 או E (אפשר) ל- PIN9 של ARDUINO UNO
PIN11 או D4 ל- PIN10 של ARDUINO UNO
PIN12 או D5 ל- PIN11 של ARDUINO UNO
PIN13 או D6 ל- PIN12 של ARDUINO UNO
PIN14 או D7 ל- PIN13 של ARDUINO UNO
ה- ARDUINO IDE מאפשר למשתמש להשתמש ב- LCD במצב 4 סיביות. סוג זה של תקשורת מאפשר למשתמש להפחית את השימוש בסיכה ב- ARDUINO, בניגוד לאחרים, ARDUINO לא צריך להיות מתוכנת בנפרד לשימוש בו במצב 4 it מכיוון שברירת המחדל ה- ARDUINO מוגדר לתקשר במצב 4 ביט. במעגל ניתן לראות שהשתמשנו בתקשורת 4 ביט (D4-D7). אז מעצם התבוננות מהטבלה לעיל אנו מחברים 6 פינים של LCD לבקר בהם 4 פינים הם פינים של נתונים ו -2 פינים לבקרה.
עובד
כדי להתממשק LCD ל- ARDUINO UNO, עלינו לדעת כמה דברים.
|
ראשית לערוצי UNO ADC יש ערך הפניה ברירת מחדל של 5V. זה אומר שאנחנו יכולים לתת מתח כניסה מרבי של 5V להמרת ADC בכל ערוץ קלט. מכיוון שחיישנים מסוימים מספקים מתח מ -0-2.5 וולט, עם הפניה של 5 וולט אנו מקבלים דיוק נמוך יותר, כך שיש לנו הוראות המאפשרות לנו לשנות את ערך הייחוס הזה. אז לשינוי ערך הייחוס שיש לנו ("analogReference ();")
כברירת מחדל אנו מקבלים את רזולוציית ה- ADC המקסימלית בלוח שהיא 10 ביט, ניתן לשנות את הרזולוציה הזו באמצעות הוראות ("analogReadResolution (bits);"). שינוי ברזולוציה זה יכול להיות שימושי במקרים מסוימים.
כעת אם התנאים שלמעלה מוגדרים כברירת מחדל, אנו יכולים לקרוא את הערך מ- ADC של הערוץ '0' על ידי קריאה ישירה לפונקציה "analogRead (pin);", כאן "pin" מייצג את הפין שבו חיברנו אות אנלוגי, במקרה זה זה היה להיות "A0". ניתן לקחת את הערך מ- ADC למספר שלם כ- “int ADCVALUE = analogRead (A0); ", לפי הוראה זו הערך לאחר ADC נשמר במספר השלם" ADCVALUE ".
עכשיו בואו נדבר קצת על 16x2 LCD. ראשית עלינו לאפשר את קובץ הכותרת ('#include
שנית עלינו לספר ללוח באיזה סוג LCD אנו משתמשים כאן. מכיוון שיש לנו כל כך הרבה סוגים שונים של LCD (כמו 20x4, 16x2, 16x1 וכו '). כאן אנו הולכים להתממשק LCD 16x2 ל- UNO כך שנקבל 'lcd.begin (16, 2);'. עבור 16x1 אנו מקבלים 'lcd.begin (16, 1);'.
בהוראה זו אנו הולכים לספר ללוח היכן חיברנו את הפינים, הפינים המחוברים מיוצגים בסדר "RS, En, D4, D5, D6, D7". יש לייצג נכון סיכות אלה. מכיוון שחיברנו את ה- RS ל- PIN0 וכן הלאה, כפי שמוצג בתרשים המעגל, אנו מייצגים את מספר הסיכה שעל הלוח הוא "LiquidCrystal lcd (0, 1, 8, 9, 10, 11);".
אחרי שלמעלה שם כל שנותר הוא לשלוח נתונים, הנתונים שצריכים להיות מוצגים ב- LCD צריכים להיות כתובים כ- "cd.print (" שלום, עולם! ");". עם פקודה זו LCD מציג 'שלום, עולם!'. כפי שאתה יכול לראות אנחנו לא צריכים לדאוג לשום דבר אחר, אנחנו רק צריכים לבצע אתחול וה- UNO יהיה מוכן להציג נתונים. אנחנו לא צריכים לכתוב לולאת תוכנה כדי לשלוח את הנתונים BYTE על ידי BYTE לכאן.
ברגע שמגנט מתקרב לחיישן החיישן מייצג מתח ביציאה פרופורציונאלי לשדה, ערך זה נלקח על ידי Uno ומוצג ב- LCD. העבודה של פרויקט מדידת שדות מגנטיים זו מוסברת באמצעות קוד C להלן.