Агуулгын хүснэгт:
Видео: Arduino болон эрвээхэйний унтраалга: 9 алхам
2024 Зохиолч: John Day | [email protected]. Хамгийн сүүлд өөрчлөгдсөн: 2024-01-30 11:03
Энэ нийтлэлд бид 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:
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 танд хүргэсэн бөгөөд энэ нь үйлдвэрлэгч болон цахилгаан бараа сонирхогчдод зориулагдсан бүх зүйлийг дэлхий даяар үнэгүй хүргэж өгөх болно.
Зөвлөмж болгож буй:
Raspberry Pi болон MySQL мэдээллийн санг ашиглан хурууны хээ болон RFID дээр суурилсан ирцийн систем: 5 алхам
Raspberry Pi болон MySQL мэдээллийн санг ашиглан хурууны хээ, RFID дээр суурилсан ирцийн систем: Энэ төслийн видео
Зэгсэн унтраалга, танхимын эффект мэдрэгч болон Nodemcu дээрх зарим хаягдлыг ашиглан өөрийн анемометрийг хэрхэн бүтээх вэ - 2 -р хэсэг - Програм хангамж: 5 алхам (зурагтай)
Зэгс унтраалга, танхимын эффект мэдрэгч болон Nodemcu дээрх зарим хаягдлыг ашиглан өөрийн анемометрийг хэрхэн яаж бүтээх вэ - 2 -р хэсэг - Програм хангамж: Танилцуулга Энэ бол анхны бичлэгийн үргэлжлэл юм. Nodemcu дээр - 1 -р хэсэг - Техник хангамж " - Би салхины хурд, чиглэлийг хэмжих ажлыг хэрхэн яаж хийхийг харууллаа
Нодемку дээрх зэгс унтраалга, танхимын эффект мэдрэгч болон зарим хаягдлыг ашиглан өөрийн анемометрийг хэрхэн бүтээх вэ. - 1 -р хэсэг - Тоног төхөөрөмж: 8 алхам (зурагтай)
Нодемку дээрх зэгс унтраалга, танхимын эффект мэдрэгч болон зарим хаягдлыг ашиглан өөрийн анемометрийг хэрхэн бүтээх вэ. - 1 -р хэсэг - Тоног төхөөрөмж: Танилцуулга Би Arduino болон Maker Culture -ийн судалгаанаас эхэлснээсээ хойш лонхны таг, PVC ширхэг, ундааны лааз гэх мэт хог хаягдал, эд ангиудыг ашиглан ашигтай төхөөрөмж бүтээх дуртай болсон. ямар ч хэсэг эсвэл хань ижилтэй амьдрал
Bluetooth алсын удирдлагатай гэрлийн унтраалга - Дахин тохируулах. Гэрлийн унтраалга ажилласаар байна, нэмэлт бичих шаардлагагүй: 9 алхам (зурагтай)
Bluetooth алсын удирдлагатай гэрлийн унтраалга - Дахин тохируулах. Хөнгөн унтраалга ажилласаар байна, нэмэлт бичих шаардлагагүй. 2017 оны 11 -р сарын 25 -ны өдөр - Энэ төслийн киловатт ачааллыг хянах боломжтой өндөр хүчин чадалтай хувилбарын хувьд BLE Control -ийг өндөр хүчдэлийн ачаалалд шилжүүлэхийг үзнэ үү. Зарим BLE самбар / програм хангамжийн стекүүд
Утасгүй дохиоллын унтраалга эсвэл асаах/унтраах унтраалга руу утасгүй хаалганы хонх цохих: 4 алхам
Утасгүй дохиоллын унтраалга эсвэл асаах/унтраах утас руу утасгүй хаалганы хонх цохих: Би саяхан дохиоллын систем барьж, гэртээ суулгасан. Би хаалган дээр соронзон унтраалга ашиглаж, дээврийн хөндийгөө хатуу хучилттай болгосон. Надад утасгүй шийдэл хэрэгтэй байсан бөгөөд энэ нь