Агуулгын хүснэгт:
- Алхам 1: Ротари кодлогч дотор
- Алхам 2: Олон хүнд жинхэнэ зовлон учруулдаг зовлон
- Алхам 3: Эцсийн төлөвт машин (FSM) шийдэл
- Алхам 4: Arduino код
- Алхам 5: Өөгүй интеграцчлал
Видео: Arduino -ийн иж бүрэн шийдэл: 5 алхам
2024 Зохиолч: John Day | [email protected]. Хамгийн сүүлд өөрчлөгдсөн: 2024-01-30 11:03
Ротари кодлогч нь электрон төслүүдийн эргэдэг хяналтын товчлуурууд бөгөөд ихэвчлэн Arduino гэр бүлийн микроконтроллеруудад ашиглагддаг. Тэдгээрийг параметрүүдийг нарийн тохируулах, цэсийг удирдах, дэлгэц дээрх объектуудыг зөөх, ямар ч төрлийн утгыг тохируулахад ашиглаж болно. Эдгээр нь потенциометрийн ердийн орлуулалт юм, учир нь тэдгээрийг илүү нарийвчлалтай, хязгааргүй эргүүлэх боломжтой, нэг дискрет утгыг нэг дор нэмэгдүүлэх эсвэл бууруулах, ихэвчлэн сонгох функцүүдийг түлхэх түлхүүрээр нэгтгэдэг. Тэд янз бүрийн хэлбэр, хэмжээтэй байдаг, гэхдээ хамгийн хямд үнийг доор тайлбарласны дагуу ашиглахад хэцүү байдаг.
Ротари кодлогчийн ажлын нарийвчлал, ашиглалтын горим, тэдгээрийг хэрхэн ашиглах талаар олон тооны жишээ код, номын сангийн талаар тоо томшгүй олон нийтлэл байдаг. Ганц асуудал бол тэдний хэн нь ч хамгийн бага үнээр хятадын эргэдэг модулиудтай 100% үнэн зөв ажилладаггүй явдал юм.
Алхам 1: Ротари кодлогч дотор
Кодлогчын эргэдэг хэсэг нь гурван тээглүүртэй (мөн нэмэлт унтраалга хэсэгт хоёр ширхэг). Нэг нь нийтлэг ойлголт (хар GND), нөгөө хоёр нь бариулыг эргүүлэх үед чиглэлийг тодорхойлох зориулалттай (тэдгээрийг ихэвчлэн цэнхэр CLK, улаан DT гэж нэрлэдэг). Эдгээр хоёулаа микроконтроллерийн PULLUP оролтын зүү дээр залгагдсан бөгөөд энэ нь HIGH түвшинг анхны уншилт болгодог. Бариулыг урагш (эсвэл цагийн зүүний дагуу) эргүүлэхэд эхлээд цэнхэр CLK нь LOW түвшинд унаж, дараа нь улаан DT гарч ирнэ. Цааш нь харвал цэнхэр CLK нь HIGH руу буцаж очдог бөгөөд дараа нь GND -ийн нийтлэг холболт хоёулаа хоёуланг нь орхиход улаан DT нь мөн HIGH руу буцдаг. Ийнхүү FWD (эсвэл цагийн зүүний дагуу) нэг бүтэн тэмдэг бөглөнө үү. BWD-ийн нөгөө чиглэлд (эсвэл цагийн зүүний эсрэг) ижил чиглэлд явдаг боловч одоо улаан нь эхлээд унаж, хөх нь хоёр түвшний зураг дээр харуулсны дагуу хамгийн сүүлд дээшээ харагдана.
Алхам 2: Олон хүнд жинхэнэ зовлон учруулдаг зовлон
Arduino сонирхогчдын хувьд нийтлэг асуудал бол хямд Ротари кодлогч модулиуд нь гаралтын түвшний нэмэлт өөрчлөлтийг нэмэгдүүлж, чиглэлийг тоолоход буруу, буруу уншлага үүсгэдэг. Энэ нь өөгүй тоолохоос сэргийлж, эдгээр модулийг нарийвчлалтай эргүүлэх төсөлд нэгтгэх боломжгүй болгодог. Эдгээр нэмэлт үсрэлтүүд нь холболтын зүү дээрх засваруудын механик хөдөлгөөнөөс үүдэлтэй бөгөөд нэмэлт конденсаторыг ашигласнаар тэдгээрийг бүрэн арилгаж чадахгүй. Bounces нь хачигны бүрэн мөчлөгийн аль ч үед гарч ирж болох бөгөөд эдгээрийг бодит амьдрал дээрх зургуудаар дүрсэлсэн болно.
Алхам 3: Эцсийн төлөвт машин (FSM) шийдэл
Зураг дээр хоёр тээглүүр (цэнхэр CLK ба улаан DT) -ийн боломжит түвшний өөрчлөлтийн бүрэн бүтэн орон зайг харуулсан болно. Энэхүү төрийн машин дээр үндэслэн 100% үнэн зөв ажилладаг бүрэн шийдлийг програмчилж болно. Энэхүү шийдэлд шүүлтүүрийг хойшлуулах шаардлагагүй тул энэ нь хамгийн хурдан боломжтой юм. Зүүгийн төлөв байдлын орон зайг ажлын горимоос салгах бас нэг давуу тал бол санал асуулга эсвэл тасалдлын горимыг өөрийн хүссэнээр ашиглах боломжтой юм. Санал асуулга эсвэл тасалдал нь тээглүүр дээрх түвшний өөрчлөлтийг илрүүлэх боломжтой бөгөөд тусдаа горим нь одоогийн төлөв болон түвшний өөрчлөлтийн бодит үйл явдлыг үндэслэн шинэ төлөвийг тооцоолох болно.
Алхам 4: Arduino код
Доорх код нь цуваа дэлгэц дээрх FWD ба BWD тэмдгийг тоолж, нэмэлт шилжүүлэгч функцийг нэгтгэсэн болно.
// Питер Цургай 2019-04-10
// Arduino портууд руу эргэдэг тээглүүрүүд
#тодорхойлох SW 21 #define CLK 22 #тодорхойлох DT 23
// Ротари ашиглан тааруулсан тоолуурын одоогийн болон өмнөх утга
int curVal = 0; int prevVal = 0;
// FSM -ийн долоон муж (хязгаарлагдмал төлөвт машин)
#тодорхойлох IDLE_11 0 #тодорхойлох SCLK_01 1 #тодорхойлох SCLK_00 2 #тодорхойлох SCLK_10 3 #тодорхойлох SDT_10 4 #тодорхойлох SDT_00 5 #тодорхойлох SDT_01 6 int төлөв = IDLE_11;
хүчингүй тохиргоо () {
Цуваа.begin (250000); Serial.println ("Эхлэх …"); // Бүх түвшний pinMode (SW, INPUT_PULLUP) хувьд HIGH түвшин анхдагч байх болно; pinMode (CLK, INPUT_PULLUP); pinMode (DT, INPUT_PULLUP); // CLK болон DT хоёулаа бүх түвшний өөрчлөлтийн тасалдлыг идэвхжүүлнэ. attachInterrupt (digitalPinToInterrupt (DT), rotaryDT, CHANGE); }
void loop () {
// Хэрэв (digitalRead (SW) == LOW) {Serial.println ("дарагдсан"); while (! digitalRead (SW)); } // Тоолуурын утгын аливаа өөрчлөлтийг Serial Monitor -д харуулна, хэрэв (curVal! = PrevVal) {Serial.println (curVal); prevVal = curVal; }}
// CLK түвшний өөрчлөлтийн улсын машины шилжилт
void rotaryCLK () {if (digitalRead (CLK) == LOW) {if (төлөв == IDLE_11) төлөв = SCLK_01; өөр бол (төлөв == SCLK_10) төлөв = SCLK_00; өөр бол (төлөв == SDT_10) төлөв = SDT_00; } өөр {хэрэв (төлөв == SCLK_01) төлөв = IDLE_11; өөр бол (төлөв == SCLK_00) төлөв = SCLK_10; өөр бол (төлөв == SDT_00) төлөв = SDT_10; өөр бол (төлөв == SDT_01) {төлөв = IDLE_11; curVal--; }}}
// DT түвшний өөрчлөлтийн улсын машины шилжилт
void rotaryDT () {if (digitalRead (DT) == LOW) {if (төлөв == IDLE_11) төлөв = SDT_10; өөр бол (төлөв == SDT_01) төлөв = SDT_00; өөр бол (төлөв == SCLK_01) төлөв = SCLK_00; } өөр {хэрэв (төлөв == SDT_10) төлөв = IDLE_11; өөр бол (төлөв == SDT_00) төлөв = SDT_01; өөр бол (төлөв == SCLK_00) төлөв = SCLK_01; өөр бол (төлөв == SCLK_10) {төлөв = IDLE_11; curVal ++; }}}
Алхам 5: Өөгүй интеграцчлал
Янз бүрийн үсрэх эффект бүхий бага хүрээтэй эргэдэг кодлогч байсан ч FSM шийдэл үнэн зөв, хурдан ажилладаг болохыг хавсаргасан видеоноос шалгаж болно.
Зөвлөмж болгож буй:
Хөнгөн бохирдлын шийдэл - Артемис: 14 алхам
Хөнгөн бохирдлын шийдэл - Артемис: Гэрлийн бохирдол бол дэлхийн өнцөг булан бүрт байгаа бүх хүмүүст нөлөөлдөг зүйл юм. Гэрлийн чийдэнг зохион бүтээснээс хойш гэрэл улам бүр түгээмэл болж, Нью -Йорк, Чикаго зэрэг томоохон хотуудад тусгайлан ашиглагдаж эхэлсэн. Энэ бүх гэрэл нөлөөлж чадна
SASSIE: Эвгүй чимээгүй байдлын шийдэл ба харилцан үйлчлэлийг сайжруулах систем: 5 алхам
SASSIE: Эвгүй чимээгүй байдлын шийдэл ба харилцан үйлчлэлийг сайжруулах систем: SASSIE бол бидний амьдралын нэг мөчид эвгүй чимээгүй байх үед "Би дараа нь ярих уу?" Гэсэн асуултын хариулт юм. SASSIE нь эвгүй чимээгүй байдлыг танихад зориулагдсан тул та санаа зовох хэрэггүй болно
Маммотын хөл даарна (зальтай шийдэл): 4 алхам
Маммотын хөл даарна (зальтай шийдэл): Энэхүү төсөлд мамонтын хөл үнэхээр хүйтэн байна! Би хөлийг нь шарсан, цэвэрхэн, загварлаг байлгаж магадгүй тул би шидтэний цагаан гутал нэмж өгөв
Замын хөдөлгөөний шийдэл: 7 алхам
Замын хөдөлгөөний шийдэл: Замын хөдөлгөөний шийдэл нь барилгын бүсэд нэг эгнээ доторх хөдөлгөөний хяналтыг автоматжуулдаг. Энэ систем хоорондоо осол авааргүй ажиллахын тулд тал бүр дээр нэг нэг байх ёстой. Хоёр нэгж хоёулаа мотор, эргэдэг барих төхөөрөмжтэй байх болно
Arduino дээр суурилсан робот гартай боломжийн харааны шийдэл: 19 алхам (зурагтай)
Arduino дээр суурилсан робот гартай боломжийн алсын хараатай шийдэл: Бид машины харааны тухай ярихдаа энэ нь бидний хувьд үргэлж хүрч чадахгүй мэт санагддаг. Бид нээлттэй эх сурвалж бүхий алсын хараатай демо хийсэн бөгөөд үүнийг хүн бүрт хийхэд маш хялбар байх болно. Энэ видеон дээр OpenMV камерын тусламжтайгаар улаан шоо хаана ч байсан хамаагүй робот