Агуулгын хүснэгт:

Arduino болон эрвээхэйний унтраалга: 9 алхам
Arduino болон эрвээхэйний унтраалга: 9 алхам

Видео: Arduino болон эрвээхэйний унтраалга: 9 алхам

Видео: Arduino болон эрвээхэйний унтраалга: 9 алхам
Видео: #2 Как запрограммировать ПЛК Outseal Arduino — обзор студии 2024, Арваннэгдүгээр
Anonim
Arduino болон эрвээхэйний унтраалга
Arduino болон эрвээхэйний унтраалга

Энэ нийтлэлд бид Arduino системд түлхэх дугуй/эрхий эргүүлэх унтраалгыг хэрхэн ашиглах талаар авч үзэх болно. PMD Way -ээс авсан зарим жишээг энд оруулав.

1-р алхам:

Зураг
Зураг

Анхлаагүй хүмүүсийн хувьд унтраалга бүр нь нэг босоо сегмент бөгөөд тэдгээрийг хооронд нь холбож янз бүрийн хэмжээтэй болгож болно. Та товчлууруудыг ашиглан тэгээс ес хүртэлх тооноос сонгох боломжтой. Нэмэх/бууруулах товчлуурын оронд эрхий хуруугаараа хөдөлгөж болох дугуйтай өөр сонголтууд байдаг.

Сонирхолтой хэрэглэгчийн интерфэйсүүд болохоос өмнө эдгээр унтраалга нь тоон өгөгдөл оруулах маш түгээмэл арга байсан. Гэсэн хэдий ч тэдгээр нь өнөөг хүртэл бэлэн байгаа тул тэд хэрхэн ажилладаг, бид тэдгээрийг хэрхэн ашиглаж болохыг харцгаая. Шилжүүлэгчийн утгыг хоёртын кодчилсон аравтын бутархай эсвэл шууд аравтын бутархайгаар авах боломжтой. Шилжүүлэгчийн арын хэсгийг BCD хэлбэрээр авч үзье.

Алхам 2:

Зураг
Зураг

Бид зүүн талд нийтлэг байдаг, дараа нь 1, 2, 4, 8 -ийн контактууд байдаг. Хэрэв та ердийн хүчдэлд бага хүчдэл (5V гэж хэлнэ үү) оруулбал контактуудын утгыг нэмэх замаар унтраалгын утгыг хэмжиж болно. Өндөр төлөв. Жишээлбэл, хэрэв та 3 -ийг сонговол 1 ба 2 контактууд нийтлэг хүчдэлд байх болно. Тэгээс ес хүртэлх утгыг хүснэгтэд дүрсэлж болно.

Алхам 3:

Зураг
Зураг

Шилжүүлэгчийн утгыг уншихад хялбар байх болно гэдгийг та одоо л ойлгох ёстой. Бид 5V -ийг Arduino хавтангийн дижитал оролтын залгуурт холбож, гаралт бүрийн утгыг тодорхойлохын тулд digitalRead () -ийг ашиглаж болно. Ноорог дээр бид BCD -ийн утгыг аравтын бутархай тоо болгон хөрвүүлэхийн тулд үндсэн математикийг ашигладаг. Тиймээс одоо үүнийг хийцгээе.

Тоног төхөөрөмжийн үүднээс авч үзвэл бид бас нэг зүйлийг анхаарч үзэх хэрэгтэй-түлхэх хүрд нь ердийн байдлаар нээлттэй дөрвөн товчлуур шиг ажилладаг. Энэ нь өндөр ба нам төлөвийн хооронд тодорхой ялгаа бий болгохын тулд бид доош татах резистор ашиглах хэрэгтэй гэсэн үг юм. Тиймээс нэг шилжүүлэгчийн схемийг дээр үзүүлсэн шиг харуулав.

Алхам 4:

1, 2, 4, 8 гэсэн шошготой гаралтуудыг (жишээлбэл) 8, 9, 10, 11 дижитал тээглүүртэй холбох нь энгийн ажил юм. Дараа нь бид оролтыг уншиж, BCD гаралтыг аравтын бутархай болгон хөрвүүлэх ноорогтой байх ёстой. Дараах ноорогыг анхаарч үзээрэй.

/ * SAA1064 тоон дэлгэцийн бамбайг ашигладаг https://www.gravitech.us/7segmentshield.html Хэрэв танд SAA1064 бамбай байхгүй бол цуваа дэлгэц ашигладаг */#include "Wire.h" #define q1 8 #define q2 9 # q4 тодорхойлох 10 #define q8 11 void setup () {Serial.begin (9600); Wire.begin (); // i2c автобусанд нэгдэх (хаяг нь мастерын хувьд заавал биш) саатал (500); pinMode (q1, INPUT); // эрхий хурууны '1' pinMode (q2, INPUT); // эрхий хурууны '2' pinMode (q4, INPUT); // эрхий хурууны '4' pinMode (q8, INPUT); // thumbwheel '8'} void dispSAA1064 (int Count) // "Count" бүхэл тоог Gravitech SAA1064 бамбай руу илгээнэ {const int searchup [10] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F}; int Мянга, Зуун, Арав, Суурь; Wire.beginTransmission (0x38); Wire.write (0); Wire.write (B01000111); Wire.endTransmission (); Wire.beginTransmission (0x38); Утас. бичих (1); Мянга мянган тоо/1000; Зуунууд = (Count- (Thousands*1000))/100; Аравт = (Тоолох-((Мянган*1000)+(Зуун*100)))/10; Суурь = Тоолох-((Мянган*1000)+(Зуун*100)+(Арав*10)); Wire.write (хайх [Үндсэн]); Wire.write (хайх [Аравтын]); Утас. бичих (хайх [Зуун зуун]); Утас. бичих (хайх [Мянга мянган]); Wire.endTransmission (); саатал (10); } int readSwitch () {int total = 0; if (digitalRead (q1) == HIGH) {нийт+= 1; } if (digitalRead (q2) == HIGH) {нийт+= 2; } if (digitalRead (q4) == HIGH) {нийт+= 4; } if (digitalRead (q8) == HIGH) {нийт+= 8; } нийт өгөөж; } void loop () {dispSAA1064 (readSwitch ()); // шилжүүлэгч утгыг Serial.println (readSwitch ()) дэлгэцийг харуулахаар илгээдэг; // шилжүүлэгчийн утгыг цуваа дэлгэцийн хайрцагт илгээдэг}

ReadSwitch () функц нь түлхүүр юм. Энэ нь унтраалгын гаралт бүрийн тоон дүрслэлийг нэмж шилжүүлгийн утгыг тооцоолж, үр дүнг нь нийт дүнг буцаана. Энэ жишээнд бид NXP SAA1064 -ээр хянагддаг тоон дэлгэцийн бамбайг ашигласан.

Алхам 5:

Image
Image

ReadSwitch () функц нь түлхүүр юм. Энэ нь унтраалгын гаралт бүрийн тоон дүрсийг нэмж, шилжүүлэгчийн утгыг тооцоолж, үр дүнг нь нийт дүнг буцаана. Энэ жишээнд бид NXP SAA1064 -ээр хянагддаг тоон дэлгэцийн бамбайг ашигласан.

Хэрэв танд байхгүй бол энэ нь зүгээр юм - үр дүнг цуваа монитор руу илгээдэг. Одоо үүнийг видеон дээр хэрхэн хэрэгжүүлж байгааг харцгаая.

Алхам 6:

За, энэ нь тийм ч их харагдахгүй байна, гэхдээ хэрэв танд тоон оруулга хэрэгтэй бол энэ нь физик орон зайг хэмнэж, оруулах аргыг санал болгодог.

Тэгэхээр энд байна. Та эдгээрийг төсөлд ашиглах уу? Нэг оронтой тоонд - тийм ээ. Дөрөвний хувьд? Магадгүй тийм биш-магадгүй 12 оронтой товчлуур ашиглах нь илүү хялбар байх болно. Нэг санаа байна…

Алхам 7: Олон унтраалга

Зураг
Зураг

Одоо бид дөрвөн оронтой тоог хэрхэн уншихыг судлах болно, мөн эдгээр бүх дижитал тээглүүрийг дэмий үрэхгүй байх болно. Үүний оронд бид I2C автобусаар холбогддог Microchip MCP23017 16 битийн порт өргөтгөгч IC-ийг ашиглах болно. Энэ нь унтраалга бүрийн статусыг уншихад ашиглаж болох арван зургаан дижитал оролт/гаралтын тээглүүртэй.

Урагшлахаасаа өмнө энэ нийтлэлд I2C автобус (нэг, хоёрдугаар хэсэг) ба MCP23017 гэсэн мэдлэг шаардагддаг болохыг анхаарна уу. Бид эхлээд тоног төхөөрөмжийн холболтуудыг тайлбарлах болно, дараа нь Arduino -ийн ноорог. Ганц шилжүүлэгчийн жишээнд ашигласан схемийг эргэн санаарай.

Шилжүүлэгч Arduino -той шууд холбогдсон үед бид зүү бүрийн статусыг уншиж унтраагчийн утгыг тодорхойлдог. Бид үүнийг MCP23017 ашиглан илүү өргөн хүрээнд хийх болно. Залгах диаграмыг анхаарч үзээрэй.

Алхам 8:

Бид 16 зүүтэй бөгөөд энэ нь дөрвөн унтраалгыг холбох боломжийг олгодог. Шилжүүлэгч бүрийн нийтлэг хэсэг нь 5V-д холбогдсон хэвээр байгаа бөгөөд унтраалгын контакт бүр GND руу 10k доош буух эсэргүүцэлтэй хэвээр байна. Дараа нь бид нэг оронтой 1, 2, 4, 8 тээглүүрийг GPBA0 ~ 3 руу холбоно; хоёрын 1, 2, 4, 8 гэсэн тооноос GPA4 ~ 7 хүртэл; гурвын 1, 2, 4, 8 цифрийг GPB0 ~ 3 руу, дөрөвний 1, 2, 4, 8 гэсэн тоог GPB4 ~ 7 болгоно.

Одоо бид унтраалгыг хэрхэн унших вэ? Эдгээр бүх утаснууд танд хэцүү гэж бодож магадгүй ч ноорог нь маш энгийн. GPBA ба B-ийн утгыг уншихад банк бүрт нэг байтыг буцааж өгдөг бөгөөд хамгийн чухал ач холбогдолтой битийг эхлээд бичдэг. Дөрвөн бит нь тохирох I/O зүүтэй холбогдсон унтраалгын тохируулгатай тохирч байх болно. Жишээлбэл, хэрэв бид IO банкуудын өгөгдлийг авахыг хүсч байвал унтраалга нь 1 2 3 4 гэж тохируулагдсан бол А банк нь 0010 0001, Б банк нь 0100 0011 -ийг буцаана.

Дөрвөн бит тус бүрийг тусдаа хувьсагч болгон хуваахын тулд бид bitshift -ийн зарим үйлдлийг ашигладаг бөгөөд энэ нь цифр бүрийн утгыг бидэнд үлдээдэг. Жишээлбэл, 4 -р шилжүүлэгчийн утгыг салгахын тулд бид битүүдийг B банкнаас шилжүүлдэг. >> Энэ нь унтраалгын 3 утгыг түлхэж, зүүн талын хоосон битүүд тэг болно.

Гурав дахь шилжүүлэгчийн утгыг салгахын тулд бид bitwise & гэсэн нэгдлийг ашигладаг бөгөөд энэ нь гурав дахь шилжүүлэгчийн утгыг үлдээдэг. Зураг дээр хоёртын шилжүүлэгчийн утгын задаргааг харуулав - энэ нь түүхий GPIOA ба B байтын утгыг, дараа нь орон бүрийн хоёртын утга, аравтын утгыг харуулна.

Алхам 9:

Тиймээс жагсаалын тоймыг харцгаая.

/ * Жишээ 40a-MCP23017-ээр дамжуулан дөрвөн түлхэгчтэй BCD унтраалгыг уншина уу, SAA1064 дээр харуулна/4 оронтой 7 сегментийн LED дэлгэц */// MCP23017 15 ~ 17 тээглүүр GND, I2C автобусны хаяг 0x20 // SAA1064 I2C автобусны хаяг 0x38 # оруулах "Wire.h" // LED тоон тодорхойлолтын хувьд int цифр [16] = {63, 6, 91, 79, 102, 109, 125, 7, 127, 111, 119, 124, 57, 94, 121, 113 }; байт GPIOA, GPIOB, dig1, dig2, dig3, dig4; хүчингүй initSAA1064 () {// тохиргоо 0x38 Wire.beginTransmission (0x38); Wire.write (0); Wire.write (B01000111); // 12мА гаралт, оронтой хоосон зай байхгүй Wire.endTransmission (); } void setup () {Serial.begin (9600); Wire.begin (); // I2C автобус эхлүүлэх initSAA1064 (); } void loop () {// A Wire.beginTransmission банкны оролтыг уншина уу (0x20); Wire.write (0x12); Wire.endTransmission (); Wire.requestFrom (0x20, 1); GPIOA = Wire.read (); // энэ байт нь 1 ба 2 цифрүүдийн шилжүүлэгчийн өгөгдлийг агуулна // B Wire банкны оролтыг уншина уу. дамжуулах (0x20); Wire.write (0x13); Wire.endTransmission (); Wire.requestFrom (0x20, 1); GPIOB = Wire.read (); // энэ байт нь 3 ба 4 цифрүүдийн шилжүүлэгчийн өгөгдлийг агуулдаг // шилжүүлэгч бүрийн утгыг задлах // dig1 LHS, dig4 RHS dig4 = GPIOB >> 4; dig3 = GPIOB & B00001111; dig2 = GPIOA >> 4; dig1 = GPIOA & B00001111; // дибаг хийх, ашиг сонирхлын үүднээс бүх GPIO болон хувь хүний шилжүүлэгчийн өгөгдлийг цуваа монитор руу илгээх // Serial.print ("GPIOA ="); Serial.println (GPIOA, BIN); Serial.print ("GPIOB ="); Serial.println (GPIOB, BIN); Serial.println (); Serial.print ("оронтой тоо 1 ="); Serial.println (dig1, BIN); Serial.print ("оронтой тоо 2 ="); Serial.println (dig2, BIN); Serial.print ("оронтой тоо 3 ="); Serial.println (dig3, BIN); Serial.print ("оронтой тоо 4 ="); Serial.println (dig4, BIN); Serial.println (); Serial.print ("оронтой тоо 1 ="); Serial.println (dig1, DEC); Serial.print ("оронтой тоо 2 ="); Serial.println (dig2, DEC); Serial.print ("оронтой тоо 3 ="); Serial.println (dig3, DEC); Serial.print ("оронтой тоо 4 ="); Serial.println (dig4, DEC); Serial.println (); // шилжүүлэгчийн утгыг LED дэлгэц рүү SAA1064 Wire.beginTransmission (0x38) ашиглан илгээх; Утас. бичих (1); Wire.write (цифр [dig4]); Wire.write (цифр [dig3]); Wire.write (цифр [dig2]); Wire.write (цифрүүд [dig1]); Wire.endTransmission (); саатал (10); саатал (1000); }

Итгэдэггүй хүмүүсийн хувьд … видео жагсаал.

Тэгэхээр энд байна. Нэг оронд биш дөрвөн оронтой, I2C автобусны дээгүүр Arduino дижитал I/O зүү хадгалдаг. Найман MCP23017 ашиглан 32 оронтой тоог нэг дор унших боломжтой. Үүнийг хийснээр хөгжилтэй байгаарай!

Та PMD Way -ээс янз бүрийн хэмжээтэй BCD болон аравтын унтраалга хоёуланг нь захиалж, дэлхий даяар үнэгүй хүргэх боломжтой.

Энэхүү бичлэгийг pmdway.com танд хүргэсэн бөгөөд энэ нь үйлдвэрлэгч болон цахилгаан бараа сонирхогчдод зориулагдсан бүх зүйлийг дэлхий даяар үнэгүй хүргэж өгөх болно.

Зөвлөмж болгож буй: