Mündəricat:
- Addım 1: İçərisində Rotary Enkoderlər
- Addım 2: Çoxları üçün Həqiqi Ağrıya səbəb olan bədbəxtlik
- Addım 3: Sonlu Dövlət Maşını (FSM) Həll
- Addım 4: Arduino Kodu
- Addım 5: Qüsursuz İnteqrasiya
Video: Tam Arduino Rotary Həll: 5 addım
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:46
Döner kodlayıcılar, tez -tez Arduino ailəsinin mikro nəzarətçiləri ilə birlikdə istifadə olunan elektron layihələr üçün dönər idarəetmə düymələridir. Parametrləri dəqiq tənzimləmək, menyularda gəzmək, obyektləri ekranda daşımaq, hər cür dəyər təyin etmək üçün istifadə edilə bilər. Potansiyometrlərin ümumi əvəzediciləridir, çünki daha dəqiq və sonsuz döndərilə bilər, bir anda ayrı bir dəyəri artırır və ya azaldır və çox vaxt seçim funksiyaları üçün itələyici açarla birləşdirilir. Hər formada və ölçüdə olurlar, lakin ən aşağı qiymət aralığını aşağıda izah edildiyi kimi istifadə etmək çətindir.
Rotary kodlayıcıların iş detalları və istifadə rejimləri, onlardan necə istifadə olunacağına dair çoxsaylı nümunə kodları və kitabxanalar haqqında saysız -hesabsız məqalələr var. Yeganə problem, heç birinin ən aşağı qiymət aralığında olan Çin fırlanan modulları ilə 100% dəqiq işləməməsidir.
Addım 1: İçərisində Rotary Enkoderlər
Enkoderin fırlanan hissəsində üç sancaq var (və əlavə iki keçid hissəsi üçün). Biri ümumi yerdir (qara GND), digər ikisi də düymə döndükdə istiqaməti təyin etmək üçündür (onlara tez -tez mavi CLK və qırmızı DT deyilir). Hər ikisi də mikrokontrolörün PULLUP giriş pininə bərkidilir, bu da YÜKSƏK səviyyəni standart oxunuşuna çevirir. Düymə irəli (və ya saat istiqamətində) döndərildikdə əvvəlcə mavi CLK LOW səviyyəsinə düşür, sonra qırmızı DT gəlir. Daha da irəli döndükdə mavi CLK yenidən HIGH -a yüksəlir, sonra ümumi GND yaması hər iki əlaqə sancağından ayrıldıqca qırmızı DT də HIGH -a yüksəlir. Beləliklə, bir tam işarə FWD (və ya saat yönünde) tamamlanır. Eyni şəkildə BWD (və ya saat əqrəbinin əksinə) digər istiqamətə gedir, amma indi qırmızı əvvəl düşür, mavi isə iki səviyyəli görüntülərdə göstərildiyi kimi sonuncu dəfə geri qalxır.
Addım 2: Çoxları üçün Həqiqi Ağrıya səbəb olan bədbəxtlik
Arduino həvəskarları üçün ümumi problem, ucuz Rotary kodlayıcı modullarının çıxış səviyyələrində əlavə dəyişikliklər etməsi və əlavə və yanlış istiqamət sayım oxunuşlarına səbəb olmasıdır. Bu, qüsursuz saymağı maneə törədir və bu modulların dəqiq fırlanan layihələrə inteqrasiyasını qeyri -mümkün edir. Bu əlavə sıçrayışlar, yamaqların bağlantı pinləri üzərindəki mexaniki hərəkətlərindən qaynaqlanır və hətta əlavə kondansatörlərin tətbiqi onları tamamilə aradan qaldıra bilməz. Sıçrayışlar tam qeyd dövrlərində hər yerdə görünə bilər və şəkillərdəki real həyat ssenariləri ilə təsvir olunur.
Addım 3: Sonlu Dövlət Maşını (FSM) Həll
Şəkil, hər iki pin üçün (mavi CLK və qırmızı DT), həm düzgün, həm də səhv sıçrayışlar üçün mümkün olan səviyyəli dəyişikliklərin tam vəziyyətini göstərir. Bu dövlət maşını əsasında hər zaman 100% dəqiq işləyən tam bir həll proqramlaşdırıla bilər. Bu həlldə heç bir süzgəc gecikməsinə ehtiyac olmadığı üçün, eyni zamanda mümkün olan ən sürətlidir. Sancaqların vəziyyət sahəsini iş rejimindən ayırmağın başqa bir faydası, həm zövqünə görə həm seçki, həm də kəsmə rejimini tətbiq edə bilməsidir. Səsvermə və ya fasilələr sancaqlardakı səviyyə dəyişikliklərini aşkar edə bilər və ayrı bir gündəlik, yeni vəziyyəti cari vəziyyətə və səviyyəli dəyişikliklərin faktiki hadisələrinə əsaslanaraq hesablayacaq.
Addım 4: Arduino Kodu
Aşağıdakı kod seriyalı monitorda FWD və BWD gənələrini sayır və əlavə olaraq keçid funksiyasını da birləşdirir.
// Peter Csurgay 2019-04-10
// Arduino limanlarına döndərilən pinlər
#define SW 21 #define CLK 22 #define DT 23
// Dönər tərəfindən tənzimlənmiş sayğacın cari və əvvəlki dəyəri
int curVal = 0; int prevVal = 0;
// FSM -nin yeddi vəziyyəti (sonlu dövlət maşını)
#define IDLE_11 0 #define SCLK_01 1 #define SCLK_00 2 #define SCLK_10 3 #define SDT_10 4 #define SDT_00 5 #deffine SDT_01 6 int state = IDLE_11;
boş quraşdırma () {
Serial.begin (250000); Serial.println ("Başla…"); // Yüksək səviyyə bütün pin pinMode (SW, INPUT_PULLUP) üçün standart olacaq; pinMode (CLK, INPUT_PULLUP); pinMode (DT, INPUT_PULLUP); // Həm CLK, həm də DT bütün səviyyəli dəyişikliklər üçün fasilələri işə salacaq attachInterrupt (digitalPinToInterrupt (CLK), rotaryCLK, CHANGE); attachInterrupt (digitalPinToInterrupt (DT), rotaryDT, CHANGE); }
boşluq döngəsi () {
// İstifadəçi keçidinin bəzi dönər kodlayıcılara inteqrasiyası, əgər (digitalRead (SW) == LOW) {Serial.println ("Pressed"); while (! digitalRead (SW)); } // Sayğac dəyərindəki hər hansı bir dəyişiklik Serial Monitorda göstərilir, əgər (curVal! = PrevVal) {Serial.println (curVal); prevVal = curVal; }}
// CLK səviyyəsi dəyişiklikləri üçün Dövlət Maşını keçidləri
boş rotaryCLK () {if (digitalRead (CLK) == LOW) {if (state == IDLE_11) state = SCLK_01; başqa halda (vəziyyət == SCLK_10) vəziyyət = SCLK_00; başqa halda (vəziyyət == SDT_10) vəziyyət = SDT_00; } başqa {əgər (vəziyyət == SCLK_01) vəziyyət = IDLE_11; başqa halda (vəziyyət == SCLK_00) vəziyyət = SCLK_10; başqa halda (vəziyyət == SDT_00) vəziyyət = SDT_10; başqa halda (vəziyyət == SDT_01) {vəziyyət = IDLE_11; curVal--; }}}
// DT səviyyəsi dəyişiklikləri üçün Dövlət Maşını keçidləri
boş rotaryDT () {if (digitalRead (DT) == LOW) {if (state == IDLE_11) state = SDT_10; başqa halda (vəziyyət == SDT_01) vəziyyət = SDT_00; başqa halda (vəziyyət == SCLK_01) vəziyyət = SCLK_00; } başqa {əgər (vəziyyət == SDT_10) vəziyyət = IDLE_11; başqa halda (vəziyyət == SDT_00) vəziyyət = SDT_01; başqa halda (vəziyyət == SCLK_00) vəziyyət = SCLK_01; başqa halda (vəziyyət == SCLK_10) {vəziyyət = IDLE_11; curVal ++; }}}
Addım 5: Qüsursuz İnteqrasiya
Əlavə edilmiş videoda, FSM həllinin müxtəlif sporadik sıçrayış effektləri olan aşağı diapazonlu dönmə kodlayıcıları olsa belə dəqiq və sürətli işlədiyini yoxlaya bilərsiniz.
Tövsiyə:
İşıq Çirkləndirmə Həll - Artemis: 14 Addım
İşıq Çirkləndirmə Həll - Artemis: İşıq çirklənməsi dünyada hamımızı təsir edən bir şeydir. Ampul icad edildikdən bəri işıq daha da populyarlaşdı və xüsusi olaraq Nyu York və Çikaqo kimi böyük şəhərlərdə istifadə edildi. Bütün bu işıq təsir edə bilər
CPU nədir, nə edir və problemi necə həll etmək olar: 5 addım
CPU nədir, nə edir və problemi necə həll etmək olar: Hər gün burada " CPU " və ya " Prosessor " Bir CPU nə olduğunu və nə etdiyini araşdıracağam, sonra ümumi CPU problemlərini və bunları necə həll edəcəyimi araşdıracağam
Pulsuz bir yer tapmaq ağrısını həll etmək üçün bir park sensoru necə qurulacaq: 12 addım
Pulsuz bir yer tapmaq ağrısını həll etmək üçün bir park sensoru necə qurulacaq: Bu layihədə bir Raspberry Pi istifadə edərək sadə bir park sensoru quracağıq. Məlum olur ki, hər səhər bu sualla qarşılaşmalı oluram: ofisimin qarşısındakı YALNIZ dayanacaq yeri artıq götürülmüşdürmü? Çünki əslində belə olanda, ətrafında dolaşmalıyam
Arduino Layihəsi: GPS İzləmə Həll üçün RF1276 Test Aralığı LoRa Modulu: 9 Addım (Şəkillərlə birlikdə)
Arduino Layihəsi: GPS İzləmə üçün Test Aralığı LoRa Modulu RF1276 Həlli: Bağlantı: USB - SerialNeed: Chrome Brauzer Ehtiyacı: 1 X Arduino Mega Ehtiyacı: 1 X GPS Ehtiyacı: 1 X SD Kart Ehtiyacı: 2 X LoRa Modem RF1276Fəaliyyət: Arduino GPS dəyərini göndər ana bazaya - Dataino Server Lora Modulunda əsas baza məlumatları: Ultra uzun məsafə
Arduino əsasında Robot Qolu ilə Əlverişli Vizyon Həll: 19 Addım (Şəkillərlə birlikdə)
Arduino -ya əsaslanan Robot Qolu ilə Əlverişli Vizyon Həll: Maşın görmə qabiliyyətindən bəhs edərkən həmişə bizim üçün əlçatmaz hiss olunur. Hər kəs üçün çox asan olacaq açıq mənbəli bir görmə demosu hazırladıq. Bu videoda, OpenMV kamerası ilə, qırmızı kubun harada olmasından asılı olmayaraq, robot