Სარჩევი:
- ნაბიჯი 1: მბრუნავი კოდირება შიგნით
- ნაბიჯი 2: უბედურება, რომელიც ბევრს იწვევს ნამდვილ ტკივილს
- ნაბიჯი 3: სასრული მდგომარეობის აპარატის (FSM) გადაწყვეტა
- ნაბიჯი 4: Arduino კოდი
- ნაბიჯი 5: უნაკლო ინტეგრაცია
ვიდეო: არდუინოს სრული მბრუნავი გადაწყვეტა: 5 ნაბიჯი
2024 ავტორი: John Day | [email protected]. ბოლოს შეცვლილი: 2024-01-30 10:18
მბრუნავი კოდირება არის ელექტრონული პროექტების შემობრუნებადი კონტროლის ღილაკები, რომლებიც ხშირად გამოიყენება არდუინოს ოჯახის მიკროკონტროლებთან ერთად. ისინი შეიძლება გამოყენებულ იქნას პარამეტრების სრულყოფის, მენიუს ნავიგაციის, ეკრანზე ობიექტების გადაადგილების, ნებისმიერი სახის მნიშვნელობების დასადგენად. ისინი ჩვეულებრივი შემცვლელნი არიან პოტენომეტრებისათვის, რადგან მათი უფრო ზუსტი და უსასრულო ბრუნვა შესაძლებელია, ისინი ერთდროულად ზრდის ან ამცირებენ ერთ დისკრეტულ მნიშვნელობას და ხშირად ინტეგრირდებიან ბიძგიანი გადამრთველით ფუნქციების შერჩევისთვის. ისინი ყველა ფორმისა და ზომისაა, მაგრამ ყველაზე დაბალი ფასის დიაპაზონი რთულია, როგორც ქვემოთ არის განმარტებული.
არსებობს უამრავი სტატია როტარის დამშიფრებების მუშაობის დეტალებისა და გამოყენების რეჟიმების შესახებ და მრავალი ნიმუში კოდი და ბიბლიოთეკა მათი გამოყენების შესახებ. ერთადერთი პრობლემა ის არის, რომ არცერთი მათგანი არ მუშაობს 100% -ით ზუსტი ჩინური მბრუნავი მოდულებით ყველაზე დაბალი ფასის დიაპაზონში.
ნაბიჯი 1: მბრუნავი კოდირება შიგნით
კოდირების მბრუნავ ნაწილს აქვს სამი პინი (და კიდევ ორი სურვილისამებრ გადართვის ნაწილისთვის). ერთი არის საერთო საფუძველი (შავი GND), დანარჩენი ორი არის მიმართულების დასადგენად, როდესაც ღილაკი მოტრიალებულია (მათ ხშირად უწოდებენ ლურჯ CLK და წითელ DT). ორივე მათგანი მიმაგრებულია მიკროკონტროლერის PULLUP შეყვანის პინზე, რაც მაღალ დონეს მათი ნაგულისხმევი მნიშვნელობით ხდის. როდესაც ღილაკი გადატრიალებულია წინ (ან საათის ისრის მიმართულებით), ჯერ ლურჯი CLK ეცემა LOW დონეზე, შემდეგ კი წითელი DT მიჰყვება. შემობრუნების შემდეგ, ლურჯი CLK ბრუნდება HIGH- ზე, შემდეგ კი როდესაც საერთო GND პატჩი ტოვებს ორივე კავშირის ქინძისთავს, წითელი DT ასევე ბრუნდება HIGH- ზე. ამრიგად, შეავსეთ ერთი სრული მონიშვნა FWD (ან საათის ისრის მიმართულებით). იგივე ხდება მეორე მიმართულებით BWD (ან საათის ისრის საწინააღმდეგოდ), მაგრამ ახლა წითელი პირველად ეცემა, ხოლო ლურჯი ამოდის ბოლოს, როგორც ეს ნაჩვენებია ორ დონის სურათებში.
ნაბიჯი 2: უბედურება, რომელიც ბევრს იწვევს ნამდვილ ტკივილს
Arduino– ს მოყვარულთათვის საერთო პრობლემა ის არის, რომ იაფი Rotary კოდირების მოდულები ახორციელებენ დამატებით ცვლილებებს გამომავალ დონეზე, რაც იწვევს დამატებითი და არასწორი მიმართულების რაოდენობის კითხვას. ეს ხელს უშლის უნაკლო დათვლას და შეუძლებელს ხდის ამ მოდულების ინტეგრირებას ზუსტ მბრუნავ პროექტებში. ეს ზედმეტი გადახრები გამოწვეულია შემაერთებელი ქინძისთავების ლაქების მექანიკური მოძრაობით და დამატებითი კონდენსატორების გამოყენებაც კი არ შეუძლია მათ მთლიანად აღმოფხვრას. Bounces შეიძლება გამოჩნდეს ყველგან სრული ციკლის ციკლში და გამოსახულია რეალური ცხოვრების სცენარებით სურათებზე.
ნაბიჯი 3: სასრული მდგომარეობის აპარატის (FSM) გადაწყვეტა
სურათი გვიჩვენებს დონის სრული ცვლილების შესაძლებლობას ორი ქინძისთავისთვის (ლურჯი CLK და წითელი DT), როგორც სწორი, ასევე ცრუ აღსაკვეთად. ამ სახელმწიფო მანქანაზე დაყრდნობით შესაძლებელია დაისახოს სრული გადაწყვეტა, რომელიც ყოველთვის მუშაობს 100% სიზუსტით. იმის გამო, რომ ამ ხსნარში არ არის საჭირო ფილტრაციის შეფერხება, ის ასევე ყველაზე სწრაფია. ქინძისთავების მდგომარეობის სივრცის მუშაობის რეჟიმისგან გამოყოფის კიდევ ერთი სარგებელი არის ის, რომ თქვენ შეგიძლიათ გამოიყენოთ როგორც გამოკითხვა, ასევე შეწყვეტის რეჟიმი საკუთარი შეხედულებისამებრ. გამოკითხვას ან შეფერხებებს შეუძლია აღმოაჩინოს დონის ცვლილებები ქინძისთავებზე და ცალკეული რუტინა გამოითვლის ახალ მდგომარეობას არსებული მდგომარეობისა და დონის ცვლილების ფაქტობრივი მოვლენების საფუძველზე.
ნაბიჯი 4: Arduino კოდი
ქვემოთ მოყვანილი კოდი ითვლის FWD და BWD ტკიპებს სერიულ მონიტორზე და ასევე აერთიანებს სურვილისამებრ გადართვის ფუნქციას.
// პიტერ ცურგაი 2019-04-10
// არტუინოს პორტებზე გამოსახული მბრუნავი ქინძისთავები
#განსაზღვრეთ SW 21 #განსაზღვრეთ 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 state = IDLE_11;
void setup () {
სერიული.დაწყება (250000); Serial.println ("დაწყება …"); // დონე მაღალი იქნება ნაგულისხმევი ყველა pin pin PIN (SW, INPUT_PULLUP); pinMode (CLK, INPUT_PULLUP); pinMode (DT, INPUT_PULLUP); // ორივე CLK და DT ხელს უწყობს შეფერხებებს ყველა დონის ცვლილებისთვის attachInterrupt (digitalPinToInterrupt (CLK), rotaryCLK, CHANGE); attachInterrupt (digitalPinToInterrupt (DT), rotaryDT, CHANGE); }
ბათილი მარყუჟი () {
// სურვილისამებრ გადართვის გატარება ინტეგრირებული ზოგიერთ მბრუნავ კოდირებაში, თუ (digitalRead (SW) == LOW) {Serial.println ("დაჭერილი"); ხოლო (! digitalRead (SW)); } // მრიცხველის ღირებულების ნებისმიერი ცვლილება ნაჩვენებია სერიულ მონიტორში if (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; } else {if (მდგომარეობა == SCLK_01) მდგომარეობა = IDLE_11; სხვა შემთხვევაში თუ (მდგომარეობა == SCLK_00) მდგომარეობა = SCLK_10; სხვა შემთხვევაში თუ (მდგომარეობა == SDT_00) მდგომარეობა = SDT_10; else if (მდგომარეობა == SDT_01) {მდგომარეობა = IDLE_11; curVal--; }}}
// State Machine გადასვლები DT დონის ცვლილებებისთვის
void rotaryDT () {if (digitalRead (DT) == LOW) {if (state == IDLE_11) state = SDT_10; სხვა შემთხვევაში თუ (მდგომარეობა == SDT_01) მდგომარეობა = SDT_00; სხვა შემთხვევაში თუ (მდგომარეობა == SCLK_01) მდგომარეობა = SCLK_00; } else {if (მდგომარეობა == SDT_10) მდგომარეობა = IDLE_11; სხვა შემთხვევაში თუ (მდგომარეობა == SDT_00) მდგომარეობა = SDT_01; სხვა შემთხვევაში თუ (მდგომარეობა == SCLK_00) მდგომარეობა = SCLK_01; სხვა შემთხვევაში თუ (მდგომარეობა == SCLK_10) {მდგომარეობა = IDLE_11; curVal ++; }}}
ნაბიჯი 5: უნაკლო ინტეგრაცია
თქვენ შეგიძლიათ შეამოწმოთ თანდართულ ვიდეოში, რომ FSM გადაწყვეტა მუშაობს ზუსტად და სწრაფად, თუნდაც დაბალი დიაპაზონის მბრუნავი კოდირების შემთხვევაში, სხვადასხვა სპორადული გადახრის ეფექტებით.
გირჩევთ:
როგორ გავაკეთოთ RADAR არდუინოს გამოყენებით სამეცნიერო პროექტისათვის არდუინოს საუკეთესო პროექტები: 5 ნაბიჯი
როგორ გავაკეთოთ RADAR არდუინოს გამოყენებით სამეცნიერო პროექტისათვის საუკეთესო Arduino პროექტები: გამარჯობა მეგობრებო, ამ სასწავლო ინსტრუქციაში მე გაჩვენებთ თუ როგორ უნდა გააკეთოთ arduino nano– ს გამოყენებით აშენებული საოცარი სარადარო სისტემა
მსუბუქი დაბინძურების გადაწყვეტა - არტემიდა: 14 ნაბიჯი
სინათლის დაბინძურების გადაწყვეტა - არტემიდა: სინათლის დაბინძურება არის ის, რაც გავლენას ახდენს ყველა ჩვენგანზე მთელს მსოფლიოში. მას შემდეგ, რაც ნათურა გამოიგონეს, სინათლე უფრო პოპულარული გახდა და სპეციალურად გამოიყენებოდა ისეთ დიდ ქალაქებში, როგორიცაა ნიუ იორკი და ჩიკაგო. ყველა ამ შუქს შეუძლია იმოქმედოს
სინათლის ინტენსივობის შეთქმულება არდუინოს და პითონის არდუინოს სამაგისტრო ბიბლიოთეკის გამოყენებით: 5 ნაბიჯი
სინათლის ინტენსივობის შეთქმულება არდუინოს და პითონის არდუინოს სამაგისტრო ბიბლიოთეკის გამოყენებით: არდუინო არის ეკონომიური, მაგრამ მაღალეფექტური და ფუნქციონალური ინსტრუმენტი, ჩაშენებულ C- ში პროგრამირება ხდის პროექტების დამღლელ პროცესს! პითონის Arduino_Master მოდული ამარტივებს ამას და გვაძლევს საშუალებას გამოვთვალოთ, ამოიღოთ ნაგვის მნიშვნელობები
არდუინოს საფუძველზე არაკონტაქტური ინფრაწითელი თერმომეტრი - IR დაფუძნებული თერმომეტრი არდუინოს გამოყენებით: 4 ნაბიჯი
არდუინოს საფუძველზე არაკონტაქტური ინფრაწითელი თერმომეტრი | IR დაფუძნებული თერმომეტრი Arduino– ს გამოყენებით: გამარჯობა ბიჭებო ამ ინსტრუქციებში ჩვენ გავაკეთებთ უკონტაქტო თერმომეტრს arduino– ს გამოყენებით. ვინაიდან ზოგჯერ თხევადი/მყარი ტემპერატურა ძალიან მაღალია ან დაბალია და შემდეგ ძნელია მასთან კონტაქტის დამყარება და მისი წაკითხვა ტემპერატურა მაშინ ამ სცენარში
ხელმისაწვდომი ხედვის გადაწყვეტა რობოტის მკლავით არდუინოს საფუძველზე: 19 ნაბიჯი (სურათებით)
ხელმისაწვდომი ხედვის გადაწყვეტა Robot Arm– ით დაფუძნებული Arduino– ზე: როდესაც ვსაუბრობთ მანქანების ხედვაზე, ის ყოველთვის ჩვენთვის ასე მიუწვდომელია. მიუხედავად იმისა, რომ ჩვენ გავაკეთეთ ღია ხედვის დემო, რომლის გაკეთება ყველასთვის ძალიან ადვილი იქნებოდა. ამ ვიდეოში, OpenMV კამერით, სადაც არ უნდა იყოს წითელი კუბი, რობოტი