Cuprins:
2025 Autor: John Day | [email protected]. Modificat ultima dată: 2025-01-13 06:58
Deși este oarecum deranjant de cumpărat (deoarece nu este disponibil în multe magazine de internet), consider că este necesar să discutăm despre STM32 L432KC. Acest cip merită o afecțiune specială, deoarece este ULTRA LOW POWER. Cu toate acestea, pentru cei care nu dețin STM32, acesta poate fi înlocuit în acest proiect de Arduino Uno. Pentru a face acest lucru, pur și simplu schimbați pinul intrării de întrerupere.
Să creăm apoi un contor RPM folosind STM32 L432KC și un senzor infraroșu. Același program poate fi folosit și pentru măsurarea vitezei vântului. Caracteristica de consum redus a acestui microcontroler este perfectă pentru IOT.
Pasul 1: Module
Pentru proiectul nostru de astăzi, folosim MAX7219CWG din 8 cifre, precum și modulul cu infraroșu.
Pasul 2: STM32 NUCLEO-L432KC
Pasul 3: demonstrație
În ansamblul nostru, avem STM32, afișajul de 8 cifre și intrarea de impuls. Cardul cu infraroșu are un fototranzistor și un LED care prinde lumina prin ricoșarea unei panglici albe. Această bandă este atașată la o roată și, la fiecare viraj, va genera un impuls, care va fi capturat de întreruperea STM32.
Avem o diodă și un condensator în ansamblu, care au fost folosite pentru a împiedica zgomotul semnalului de citire a benzii să ajungă la STM32, ceea ce l-ar face să interpreteze pornirea și oprirea.
Demonstrația arată proiectul nostru, precum și contorul Minipa (ambele în funcțiune).
Pasul 4: Asamblare
Pasul 5: Program
Vom face un program în care modulul cu infraroșu va declanșa o întrerupere în STM32 L432KC la fiecare „viraj” și vom face calculele pentru a afișa RPM pe afișaj.
Pasul 6: Biblioteci
Adăugați următoarea bibliotecă „DigitLedDisplay”.
Pur și simplu accesați „Schiță >> Includeți biblioteci >> Gestionați bibliotecile …”
Pasul 7: Cod sursă
Biblioteci și variabile
Să începem codul sursă, inclusiv biblioteca DigitLedDisplay. Vom arăta obiectul afișat. Am setat pinul de întrerupere, care va fi 12. De asemenea, introduc un operator volatil atât pentru contorul RPM cât și pentru timp, pentru a evita orice probleme de coliziune.
/ * Include DigitLedDisplay Library * / # include "DigitLedDisplay.h" / * Pin Arduino pentru a afișa pinul 7 la DIN, 6 la CS, 5 la CLK * / // DigitLedDisplay ld = DigitLedDisplay (7, 6, 5); // arduino DigitLedDisplay ld = DigitLedDisplay (4, 2, 3); // STM32 L432KC int pin = 12; // pino de interrupção (módulo IR) volatile unsigned int rpm; // contador de rpm volatile unsigned long timeold; //tempo
Înființat
În Setup, configurăm operația de afișare, precum și configurăm întreruperea ca Rising.
void setup () {Serial.begin (115200); / * Setați luminozitatea min: 1, max: 15 * / ld.setBright (10); / * Setați numărul de cifre * / ld.setDigitLimit (8); ld.printDigit (0); attachInterrupt (digitalPinToInterrupt (pin), interruptPin, RISING); rpm = 0; timeold = milis (); }
Buclă
În cele din urmă, determinăm intervalul de 1 în 1 minut pentru a actualiza afișajul. După curățarea ecranului, imprimăm RPM. Efectuăm funcția pe care o va apela întreruperea. Calculăm RPM și actualizăm timpul.
bucla void () {delay (1000); ld.clear (); ld.printDigit (rpm); } void interruptPin () {rpm = 60 * 1000 / (milis () - timeold); timeold = milis (); }
Pasul 8: Fișiere
Descărcați fișierele:
EU NU