Բովանդակություն:

DS1803 Երկակի թվային պոտենցիոմետր Arduino- ով. 5 քայլ
DS1803 Երկակի թվային պոտենցիոմետր Arduino- ով. 5 քայլ

Video: DS1803 Երկակի թվային պոտենցիոմետր Arduino- ով. 5 քայլ

Video: DS1803 Երկակի թվային պոտենցիոմետր Arduino- ով. 5 քայլ
Video: DFT_#A92 DOUBLE POTENTIOMETRE NUMERIQUE - I2C - DS1803 - ATTINY85 2024, Հուլիսի
Anonim
DS1803 Երկակի թվային պոտենցիոմետր Arduino- ով
DS1803 Երկակի թվային պոտենցիոմետր Arduino- ով

Ես սիրում եմ 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: Հրամանի բայթ

Հրամանի բայթ
Հրամանի բայթ

DS1803- ի գործելաոճը կարող է օգտագործվել հրամանի բայթում: Երբ ընտրում եք «գրել պոտենցիոմետր -0», երկու պոտենցիոմետրերն էլ ընտրված են, երբ ցանկանում եք կարգավորել միայն պոտենցիոմետր -0-ը, դուք պետք է ուղարկեք միայն առաջին տվյալների բայթը: «Գրեք պոտենցիոմետր -1» միայն կարգավորեք potmeter-1- ը: «Գրեք երկու պոտենցիոմետրերին» երկու պոտենցիոմետրերին տալիս է նույն արժեքը:

Քայլ 3. DS1803- ի վերահսկում

DS1803- ի վերահսկում
DS1803- ի վերահսկում

Կառավարման բայթը (նկար 3) ունի սարքի նույնացուցիչ, այն միշտ մնում է նույնը: Իմ օրինակում A0, A1 և A2- ը 0 են, քանի որ մենք ընտրում ենք հասցեն ՝ բոլոր A- կապումներն գետնին դնելով: R/W- ի վերջին բիթը Arduino- ում «Wire.beginTransmission» և «Wire.requestFrom» հրամաններով կհամարվի 0 կամ 1: Նկար 5 -ում կարող եք տեսնել ամբողջ հեռագիրը: Ընթերցված հեռագիրը ներկայացված է նկար 4 -ում:

Քայլ 4: Կարգավորեք

Կարգավորել
Կարգավորել

Այս սխեման ցույց է տալիս, թե ինչպես միացնել ամեն ինչ: Nokia LCD- ը հասանելի է տարբեր միացումներով, համոզվեք, որ ձերն եք ճիշտ միացնում: Նաև պտտվող կոդավորիչը նրա տարբեր տարբերակներն են, ոմանք ընդհանուր են միջին քորոցում, մյուսները ՝ ոչ: Ես տեղադրել եմ մի փոքր զտիչ ցանց (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}; բայթ controlByte = B0101000; // 7 բիթ, բայթ commandByte = B10101001; // վերջին 2 բիթը potmeter- ի ընտրությունն է: բայթ potValue [2]; int i = 0; int deBounceTime = 10; // Կարգավորեք այս արժեքը `կախված աղմուկի const int encoder_A = 8; const int կոդավորող_Բ = 9; const int buttonPin = 2; անստորագիր երկար newDebounceTime = 0; unsigned long oldTime; բուլյան սեղմված = 0; բուլյան հաշվարկ = 1;

Կարգավորման մեջ ես սահմանում եմ աջ կապերը և ստատիկ տեքստը դնում LCD- ի վրա

void setup () {Wire.begin (); Serial.begin (9600); pinMode (encoder_A, INPUT); pinMode (encoder_B, INPUT); pinMode (buttonPin, INPUT); newDebounceTime = միլիարդ ();

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 I աճող զամբյուղ , մյուսները ՝ նվազում: Դրանից հետո արժեքը կուղարկվի DS1803- ին wire.write- ի միջոցով:

դատարկ շրջան () {

ընդմիջում ();

if (digitalRead (buttonPin) == 1 && (սեղմված == 0)) {toggleBuffer ();} if (digitalRead (buttonPin) == 0) {սեղմված = 0;}

եթե (digitalRead (encoder_A) == 0 && count == 0 && (millis () - newDebounceTime> deBounceTime)) {if (digitalRead (encoder_B) == 0) {pot ++; if (pot > 25) {pot = 25;}} այլ {pot -; if (pot <1) {pot = 1;}} հաշվել = 1; newDebounceTime = միլիարդ ();

Wire.beginTransmission (controlByte); // սկսել հաղորդումը

Wire.write (commandByte); // potmeters- ի ընտրություն Wire.write (կաթսա [0] * 10); // ուղարկել potmeter տվյալների 1 -ին բայթ Wire.write (pot [1] * 10); // ուղարկել potmeter տվյալների 2 -րդ բայթ Wire.endTransmission (); // դադարեցնել փոխանցումը} այլ դեպքում, եթե (digitalRead (encoder_A) == 1 && digitalRead (encoder_B) == 1 && count == 1 && (millis () - newDebounceTime> deBounceTime)) {count = 0; newDebounceTime = միլիարդ (); }}

void toggleBuffer () {սեղմված = 1; եթե (i == 0) {i = 1;} այլ {i = 0;}}

Նախ մաքրում եմ այն տարածքը, որտեղ պետք է գրեմ փոփոխականները: Ես դա անում եմ այս տարածքում ուղղանկյուն նկարելու համար: Դրանից հետո ես փոփոխականները գրում եմ էկրանին:

void writeToLCD () {Wire.requestFrom (controlByte, 2); potValue [0] = Wire.read (); // կարդալ առաջին potmeter բայթ potValue [1] = Wire.read (); // կարդալ երկրորդ potmeter բայթ display.fillRect (40, 0, 40, 45, WHITE); // մաքրել փոփոխական էկրանը LCD էկրանին: setCursor (40, 10); display.print (potValue [0]); // գրեք 1 -ին potmeter արժեքը LCD display.setCursor (40, 22); display.print (potValue [1]); // գրեք 2 -րդ potmeter արժեքը LCD display.setCursor (60, (10 + i * 12)); display.print ("<"); display.display (); }

void interval () {// interval timer ՝ LCD- ին տվյալները գրելու համար, եթե ((millis () - oldTime)> 500) {writeToLCD (); oldTime = millis (); }}

Խորհուրդ ենք տալիս: