תוכן עניינים:

פוטנציומטר דיגיטלי כפול DS1803 עם Arduino: 5 שלבים
פוטנציומטר דיגיטלי כפול DS1803 עם Arduino: 5 שלבים

וִידֵאוֹ: פוטנציומטר דיגיטלי כפול DS1803 עם Arduino: 5 שלבים

וִידֵאוֹ: פוטנציומטר דיגיטלי כפול DS1803 עם Arduino: 5 שלבים
וִידֵאוֹ: Изучите Arduino за 30 минут: примеры и проекты 2024, יולי
Anonim
פוטנציומטר דיגיטלי כפול DS1803 עם ארדואינו
פוטנציומטר דיגיטלי כפול DS1803 עם ארדואינו

אני אוהב לשתף את השימוש במד פוט דיגיטלי DS1803 עם Arduino. IC זה מכיל שני קנקנים דיגיטליים הניתנים לשליטה באמצעות ממשק דו חוטי, לשם כך אני משתמש בספריית wire.h.

IC זה יכול להחליף מד פוטר אנלוגי רגיל. בדרך זו אתה יכול לשלוט למשל במגבר או באספקת חשמל.

במדריך זה אני שולט בהירות של שני נוריות LED להראות את העבודה.

הארדואינו סופר את הפולסים של מקודד סיבובי ומניח את הערך בסיר המשתנה [0] ובסיר [1]. כאשר אתה לוחץ על המתג על המקודד, אתה יכול לעבור בין סיר [0] לסיר [1].

הערך האמיתי של הסירים נקרא בחזרה מה- DS1803 ומונח ב- potValue משתנה [0] וב- potValue [1] ומוצג על מסך LCD.

שלב 1: חיבורים של ה- DS1803

חיבורים של DS1803
חיבורים של DS1803

כאן תוכל לראות את החיבורים של ה- DS1803. H הוא הצד הגבוה של הפוטנציומטר, L הצד הנמוך ו- W המגב. SCL ו- SDA הם חיבורי האוטובוס.

עם חיבור A0, A1 ו- A2 אתה יכול לתת ל- DS1803 כתובת משלו, בדרך זו תוכל לשלוט בהתקנים נוספים באמצעות אוטובוס אחד. בדוגמה שלי נתתי את כתובת DS1803 0 על ידי חיבור כל הסיכות לקרקע.

שלב 2: בייט פקודה

Byte פקודה
Byte פקודה

ניתן להשתמש באופן הפעולה של DS1803 בבת הפקודה. כאשר אתה בוחר "לכתוב פוטנציומטר -0" שני הפוטנציומטרים נבחרים, כאשר אתה רק רוצה להתאים פוטנציומטר -0, עליך לשלוח רק את בית הנתונים הראשון. "כתוב פוטנציומטר -1" כוונן את פוטרומטר -1 בלבד. "כתוב לשני הפוטנציומטרים" נותן לשני הפוטנציומטרים את אותו ערך.

שלב 3: שליטה ב- DS1803

שליטה ב- DS1803
שליטה ב- DS1803

לבקת הבקרה (איור 3) יש מזהה התקן, זה נשאר תמיד אותו הדבר. בדוגמה שלי A0, A1 ו- A2 הם 0 מכיוון שאנו בוחרים כתובת על ידי הנחת כל סיכות A לקרקע. הסיבית האחרונה R/W תוגדר ל- 0 או 1 על ידי הפקודה "Wire.beginTransmission" ו- "Wire.requestFrom" בארדואינו. באיור 5 אתה יכול לראות את כל המברק. המברק הנקרא מוצג באיור 4.

שלב 4: הגדר

להכין
להכין

מעגל זה מראה כיצד לחבר הכל. ה- LCD של Nokia זמין עם חיבורים שונים, ודא שאתה מחבר את שלך נכון. גם המקודד הסיבובי בגרסאותיו השונות, לחלקן המשותף בסיכה האמצעית אחרות לא. שמתי רשת מסננים קטנה (נגד 470 אוהם עם מכסה 100nF) כדי לסנן את אותות הפלט A ו- B של המקודד. אני צריך את המסנן הזה כי הפלט אכן הרעיש הרבה. הכנסתי גם טיימר ניתוק לתוכנית כדי לבטל רעש. לשאר אני חושב שהמעגל ברור. ניתן להזמין את ה- LCD באמצעות Adafruit

שלב 5: התוכנית

לשימוש באוטובוס דו-חוטי אני כולל את ספריית Wire.h. כדי להשתמש ב- LCD אני כולל את ספריית Adafruit שניתן להוריד מ https://github.com/adafruit/Adafruit-PCD8544-Nokia-5110-LCD-library גם ספריית Adafruit_GFX.h זמינה כאן https:// github. com/adafruit/Adafruit-GFX-Library.

#לִכלוֹל

#לִכלוֹל

#לִכלוֹל

תצוגה Adafruit_PCD8544 = Adafruit_PCD8544 (7, 6, 5, 4, 3);

כאן תוכל לראות את כל המשתנים. בקרת בתים ובייט פקודה כפי שתואר קודם. ניתן להתאים את deBounceTime בהתאם לרעש שבמקודד שלך.

סיר בתים [2] = {1, 1}; בייט בקרת בתים = B0101000; // 7 סיביות, byte commandByte = B10101001; // 2 הביטים האחרונים הם בחירת פוטר. בתים potValue [2]; int i = 0; int deBounceTime = 10; // התאם ערך זה בהתאם לרעש const int encoder_A = 8; const int encoder_B = 9; const int buttonPin = 2; newDebounceTime long on unsigned long; oldTime לא חתום; בוליאני לחוץ = 0; ספירה בוליאנית = 1;

בהגדרה אני מגדיר את הסיכות הנכונות ושם את הטקסט הסטטי על ה- LCD

הגדרת חלל () {Wire.begin (); Serial.begin (9600); pinMode (encoder_A, INPUT); pinMode (encoder_B, INPUT); pinMode (buttonPin, INPUT); newDebounceTime = millis ();

display.begin ();

display.setContrast (50); display.clearDisplay (); display.setTextSize (1); display.setTextColor (שחור); display.setCursor (0, 10); display.println ("POT 1 ="); display.setCursor (0, 22); display.println ("POT 2 ="); display.display ();

}

בלולאה אני בודק תחילה אם המרווח הוא יותר מ 500ms, אם כן ה- LCD מתעדכן. אם לא הכפתור על המקודד מסומן. אם תלחץ על toggleBuffer תתקשר. לאחר מכן המקודד נבדק. אם קלט 0 נמוך (סיבוב מזוהה) אני בודק קלט B, אם קלט B הוא 0 אני מגדיל סיר , אחרים אני מוריד. לאחר מכן הערך יישלח ל- DS1803 באמצעות wire.write.

לולאת חלל () {

הַפסָקָה();

if (digitalRead (buttonPin) == 1 && (לחצו == 0)) {toggleBuffer ();} if (digitalRead (buttonPin) == 0) {לחץ = 0;}

if (digitalRead (encoder_A) == 0 && count == 0 && (millis () - newDebounceTime> deBounceTime)) {if (digitalRead (encoder_B) == 0) {pot ++; אם (סיר > 25) {סיר = 25;}} אחר {סיר -; אם (סיר <1) {סיר = 1;}} count = 1; newDebounceTime = millis ();

Wire.beginTransmission (controlByte); // להתחיל לשדר

Wire.write (commandByte); // מבחר קוטרי Wire.write (סיר [0] * 10); // שלח בייט ראשון של נתוני מד פוטר Wire.write (סיר [1] * 10); // שלח בתים 2 של נתוני מד פוטר Wire.endTransmission (); // להפסיק לשדר} אחרת אם (digitalRead (encoder_A) == 1 && digitalRead (encoder_B) == 1 && count == 1 && (millis () - newDebounceTime> deBounceTime)) {count = 0; newDebounceTime = millis (); }}

void toggleBuffer () {לחץ = 1; אם (i == 0) {i = 1;} אחר {i = 0;}}

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

void writeToLCD () {Wire.requestFrom (controlByte, 2); potValue [0] = Wire.read (); // קרא הראשון potmeter byte potValue [1] = Wire.read (); // קראו את השני בייט פוטמטר display.fillRect (40, 0, 40, 45, WHITE); // מסך משתנה ברור בתצוגת LCD.setCursor (40, 10); display.print (potValue [0]); // כתוב את ערך פוטר הראשון לתצוגת LCD.setCursor (40, 22); display.print (potValue [1]); // כתוב ערך מד פוטר שני לתצוגת LCD.setCursor (60, (10 + i * 12)); display.print ("<"); display.display (); }

מרווח חלל () {// טיימר מרווח לכתיבת נתונים ל- LCD אם ((millis () - oldTime)> 500) {writeToLCD (); oldTime = millis (); }}

מוּמלָץ: