- Nepieciešamie materiāli
- Ātruma aprēķināšana un parādīšana analogajā spidometrā
- Shēmas shēma un savienojumi
- Programmēšanas skaidrojums
Transportlīdzekļa vai motora ātruma / apgr./min mērīšana vienmēr ir bijis aizraujošs projekts. Šajā projektā mēs izveidosim analogo spidometru, izmantojot Arduino. Ātruma mērīšanai mēs izmantosim IR sensora moduli. Tam ir citi veidi / sensori, piemēram, zāles sensors ātruma mērīšanai, taču IR sensora lietošana ir vienkārša, jo IR sensora modulis ir ļoti izplatīta ierīce, un mēs to varam viegli iegūt no tirgus, kā arī to var izmantot jebkura veida ierīcēs. motors / transportlīdzeklis.
Šajā projektā mēs parādīsim ātrumu gan analogā, gan digitālā formā. Veicot šo projektu, mēs arī uzlabosim savas prasmes apgūt Arduino un Stepper motor, jo šajā projektā tiek izmantoti pārtraucēji un taimeri. Šī projekta beigās jūs varēsiet aprēķināt jebkura rotējoša objekta veikto ātrumu un attālumus un parādīt tos 16x2 LCD ekrānā digitālā formātā un arī analogajā skaitītājā. Tātad sāksim ar šo spidometra un odometra shēmu ar Arduino
Nepieciešamie materiāli
- Arduino
- Bipolārs pakāpienu motors (4 vadi)
- Stepper motora vadītājs (L298n modulis)
- IR sensoru modulis
- 16 * 2 LCD displejs
- 2,2k rezistors
- Savienojošie vadi
- Maizes dēlis.
- Enerģijas padeve
- Spidometra attēla izdruka
Ātruma aprēķināšana un parādīšana analogajā spidometrā
IR sensors ir ierīce, kas var noteikt objekta klātbūtni tā priekšā. Mēs esam izmantojuši divus asmeņu rotorus (ventilatorus) un novietojuši infrasarkano sensoru tā tuvumā tā, lai katru reizi, kad asmeņi pagriežas, IR sensors to atklāj. Pēc tam mēs izmantojam Arduino taimeru un pārtraukumu palīdzību, lai aprēķinātu laiku, kas vajadzīgs vienai pilnīgai motora pagriešanai.
Šajā projektā mēs esam izmantojuši augstākās prioritātes pārtraukumu, lai noteiktu apgriezienus minūtē, un esam to konfigurējuši pieaugošā režīmā. Lai sensora izeja no LOW uz High tiktu izpildīta, funkcija RPMCount () tiks izpildīta. Tā kā mēs izmantojām divus asmeņu rotorus, tas nozīmē, ka funkcija vienā apgriezienā tiks izsaukta 4 reizes.
Kad būs zināms laiks, mēs varam aprēķināt RPM, izmantojot tālāk norādītās formulas. Kur 1000 / patērētais laiks dos mums RPS (apgriezienu skaits sekundē) un, vēlreiz reizinot to ar 60, iegūsiet apgriezienu skaitu minūtē)
apgr./min = (60/2) * (1000 / (milis () - laiks)) * REV / asmeņiInFan;
Pēc RPM iegūšanas ātrumu var aprēķināt pēc norādītās formulas:
Ātrums = apgr./min * (2 * Pi * rādiuss) / 1000
Mēs zinām, ka Pi = 3,14 un rādiuss ir 4,7 collas
Bet vispirms mums jāpārvērš rādiuss metros no collām:
rādiuss = ((rādiuss * 2,54) / 100,0) metri Ātrums = apgriezieni * 60,0 * (2,0 * 3,14 * rādiuss) / 1000,0) kilometros stundā
Šeit mēs esam reizinājuši apgriezienus minūtē ar 60, lai pārvērstu apgriezienus minūtē rph (apgriezieni stundā) un dalītu ar 1000, lai metrus / stundā pārvērstu kilometros / stundā.
Pēc ātruma izteikšanas kmh mēs varam rādīt šīs vērtības tieši LCD ekrānā digitālā formā, bet, lai parādītu ātrumu analogajā formā, mums ir jāveic vēl viens aprēķins, lai uzzinātu nē. soļiem, pakāpju motoram jāpārvietojas, lai parādītu ātrumu analogajā skaitītājā.
Šeit mēs izmantojām 4 vadu bipolāru soļu motoru analogajam skaitītājam, kura 1,8 grādu vidējā vērtība ir 200 pakāpieni vienā apgriezienā.
Tagad uz spidometra mums jāuzrāda 280 Kmh. Tātad, lai parādītu 280 Kmh pakāpienu motoru, jāpārvietojas 280 grādiem
Tātad mums ir maxSpeed = 280
Un maxSteps būs
maxSteps = 280 / 1,8 = 155 soļi
Tagad mūsu Arduino kodā ir funkcija, proti, kartes funkcija, kuru šeit izmanto, lai kartētu ātrumu pakāpēs.
Soļi = karte (ātrums, 0, maxSpeed , 0, maxSteps);
Tātad tagad mums ir
pakāpieni = karte (ātrums, 0,280,0,155);
Pēc soļu aprēķināšanas mēs varam tieši izmantot soļus soļu motora funkcijā, lai pārvietotu soļu motoru. Izmantojot norādītos aprēķinus, mums arī jārūpējas par soļu motora pašreizējiem soļiem vai leņķi
currSteps = Steps soļi = currSteps-preSteps preSteps = currSteps
Šeit currSteps ir pašreizējās darbības, kas nāk no pēdējā aprēķina, un preSteps ir pēdējās veiktās darbības.
Shēmas shēma un savienojumi
Šī analogā spidometra shēmas shēma ir vienkārša, šeit mēs izmantojām 16x2 LCD, lai parādītu ātrumu digitālā formā, un soļu motoru, lai pagrieztu analogo spidometra adatu.
16x2 LCD ir pievienots šādām Arduino analogajām tapām.
RS - A5
RW - GND
LV - A4
D4 - A3
D5 - A2
D6 - A1
D7 - A0
LCD spilgtuma iestatīšanai tiek izmantots 2,2k rezistors. IR sensora modulis, ko izmanto, lai noteiktu ventilatora lāpstiņu, lai aprēķinātu apgriezienus minūtē, ir savienots ar pārtraukumu 0, kas nozīmē Arduino D2 tapu.
Šeit mēs izmantojām soļu motora draiveri, proti, L293N moduli. IN1, IN2, IN3 un IN4 pakāpienu motora draivera tapa ir tieši savienota ar Arduino D8, D9, D10 un D11. Pārējie savienojumi ir norādīti shēmas diagrammā.
Programmēšanas skaidrojums
Pilnīgs Arduino Speedomete r kods ir norādīts beigās, šeit mēs izskaidrojam dažas svarīgas tā daļas.
Programmēšanas daļā mēs esam iekļāvuši visas nepieciešamās bibliotēkas, piemēram, stepper motor bibliotēku, LiquidCrystal LCD bibliotēku un deklarējušas tām tapas.
# iekļaut
Pēc tam aprēķinu veikšanai esam paņēmuši dažus mainīgos un makro. Aprēķini jau ir izskaidroti iepriekšējā sadaļā.
gaistošs baits REV; neparakstīts garš int apgr./min., RPM; neparakstīta garā st = 0; neparakstīts ilgs laiks; int ledPin = 13; int led = 0, RPMlen, prevRPM; int karogs = 0; int karogs1 = 1; #define bladesInFan 2 pludiņa rādiuss = 4,7; // collu int preSteps = 0; float stepAngle = 360.0 / (pludiņš) stepsPerRevolution; pludiņš minSpeed = 0; pludiņš maxSpeed = 280,0; pludiņš minSteps = 0; pludiņš maxSteps = maxSpeed / stepAngle;
Pēc tam mēs iestatīšanas funkcijā inicializējam LCD, sērijas, pārtraukuma un soļu motoru
void setup () { myStepper.setSpeed (60); Sērijas sākums (9600); pinMode (ledPin, OUTPUT); lcd.begin (16,2); lcd.print ("spidometrs"); kavēšanās (2000); attachInterrupt (0, RPMCount, RISING); }
Pēc tam, mēs lasām apgr./min cilpas funkciju un veikt aprēķinus, lai iegūtu ātrumu un pārvērst kas stājas soļi, lai palaistu Stepper motoru, lai parādītu ātrums analogā formā.
void loop () { lasītRPM (); rādiuss = ((rādiuss * 2,54) / 100,0); // konvertēšana metros int Ātrums = ((pludiņš) RPM * 60,0 * (2,0 * 3,14 * rādiuss) / 1000,0); // RPM 60 minūtēs, riepas diametrs (2pi r) r ir rādiuss, 1000, lai pārrēķinātu km int Soļi = karte (ātrums, minSpeed, maxSpeed, minSteps, maxSteps); if (flag1) { Serial.print (Speed); Serial.println ("Kmh"); lcd.setCursor (0,0); lcd.print ("RPM:"); lcd.print (RPM); lcd.print (""); lcd.setCursor (0,1); lcd.print ("Ātrums:"); lcd.print (ātrums); lcd.print ("Km / h"); karogs1 = 0; } int currSteps = Soļi;int soļi = currSteps-preSteps; preSteps = currSteps; myStepper.step (soļi); }
Šeit mums ir funkcija reapRPM (), lai aprēķinātu RPM.
int readRPM () { if (REV> = 10 vai milis ()> = st + 1000) // TAS ATJAUNINĀS AFETR KATRUS 10 LASĪJUMUS vai 1 sekundi tukšgaitā { if (flag == 0) flag = 1; apgr./min = (60/2) * (1000 / (milis () - laiks)) * REV / asmeņiInFan; laiks = milis (); REV = 0; int x = apgr./min; kamēr (x! = 0) { x = x / 10; RPMlen ++; } Serial.println (apgr./min., DEC); RPM = apgr./min; kavēšanās (500); st = milis (); karogs1 = 1; } }
Visbeidzot, mums ir pārtraukta rutīna, kas ir atbildīga par objekta apgriezienu mērīšanu
void RPMCount () { REV ++; ja (vadīja == ZEMS) { vadīja = AUGSTS; } cits { vadīja = ZEMS; } digitalWrite (ledPin, led); }
Šādi jūs varat vienkārši izveidot analogo spidometru, izmantojot Arduino. To var izveidot arī, izmantojot Hall sensoru, un ātrumu var parādīt viedtālrunī. Izpildiet šo Arduino spidometra apmācību.