Cuprins:

Senzor de mișcare / lumini controlate de contor: 7 pași
Senzor de mișcare / lumini controlate de contor: 7 pași

Video: Senzor de mișcare / lumini controlate de contor: 7 pași

Video: Senzor de mișcare / lumini controlate de contor: 7 pași
Video: Cum se instaleaza un senzor de mișcare în 7 minute! Senzor de Lumina! 2024, Iulie
Anonim
Senzor de mișcare / lumini controlate de contor
Senzor de mișcare / lumini controlate de contor

Acest proiect a fost creat ca proiect final pentru un curs de proiectare digitală la Cal Poly, San Luis Obispo (CPE 133).

De ce facem acest lucru? Vrem să ajutăm la conservarea resurselor naturale din lume. Proiectul nostru se concentrează pe economisirea energiei electrice. Economisind mai multă energie electrică, vom putea conserva resursele naturale utilizate pentru a genera electricitate. La începutul anului 2018, resursele naturale sunt consumate la un ritm incredibil. Vrem să fim conștienți de impactul nostru asupra mediului nostru și să jucăm rolul nostru în conservarea resurselor naturale. Electronica poate fi implementată în diferite moduri pentru a economisi energie, ceea ce ajută mediul înconjurător, precum și starea noastră economică. * Acest model a fost creat folosind componentele disponibile.

Care a fost inspirația noastră? Oamenii uită adesea să stingă luminile de sărbătoare și să irosească energie lăsându-i aprinși peste noapte. În realitate, acest proiect va economisi energia electrică, deoarece „luminile de sărbătoare” ar fi aprinse numai atunci când oamenii sunt în apropiere, conservând astfel energia atunci când nimeni nu este în jur. Mai mult, am vrut să proiectăm un cronometru, astfel încât luminile să se stingă complet după un anumit timp, pentru a ne asigura că nu se aprind din cauza mișcării detectate la 3 dimineața, de exemplu.

Cum ați putea folosi acest design? Acest design poate fi implementat pentru tot felul de lumini, indiferent dacă sunt decorative, practice sau ambele. Dacă doriți ca lumina de birou să funcționeze doar 6 ore la rând, de exemplu. Ar trebui să setați un contor la 21, 600 secunde (6 ore x 3, 600 secunde / oră). În timp ce contorul crește activ, senzorul de mișcare ar controla lumina. Astfel, de fiecare dată când se oprește în acel interval de timp, trebuie doar să fluturați mâna în fața senzorului de mișcare și acesta se va reporni. Dacă adormiți la birou și vă treziți 7 ore mai târziu, mișcarea dvs. nu o va activa.

Pasul 1: Software și hardware necesare

Software și hardware necesare
Software și hardware necesare
Software și hardware necesare
Software și hardware necesare
Software și hardware necesare
Software și hardware necesare
Software și hardware necesare
Software și hardware necesare

Software:

  • Vivado 2016.2 (sau o versiune mai recentă) puteți găsi aici
  • Arduino IDE 1.8.3 (sau o versiune mai recentă) poate fi găsit aici

Hardware:

  • 1 tablă Basys 3
  • 1 Arduino Uno
  • 2 panouri de prăjitură
  • 1 senzor cu ultrasunete HC-SR04
  • 9 fire de la bărbat la bărbat
  • 1 LED
  • 1 Rezistor de 100Ω

Pasul 2: Coduri (Vivado)

Coduri (Vivado)
Coduri (Vivado)

Mașină de stare finită (a se vedea diagrama de stare de mai sus):

LED-ul a necesitat o mașină cu stare finită. Un LED are doar două stări de a fi aprins și oprit. Doar două intrări controlează starea LED-ului, a contorului și a senzorului. Singurul moment în care LED-ul ar trebui să fie aprins este atunci când senzorul detectează mișcarea și când contorul contează de la zero la treizeci de secunde. În orice alt caz, LED-ul va fi stins.

Numele fișierului: LEDDES

Tejghea:

Contorul ne permite să limităm durata în care senzorul de mișcare poate activa LED-ul. Valoarea sa este afișată pe afișajul de șapte segmente al plăcii Basys 3 printr-un cod sursă („sseg_dec”). Când comutatorul Reset este oprit (valoare: '0'), contorul începe să crească în fiecare secundă de la 0 la 30. Când ajunge la 30, acesta îngheață pe acel număr. Nu va reporni de la 0 până când comutatorul Reset nu este comutat la „1” și înapoi la „1.” Dacă Reset devine „1” în timp ce contorul funcționează, acesta va îngheța orice valoare a atins. Când Resetarea revine la „0”, contorul va reporni de la 0 la 30. Această implementare necesită și utilizarea unui semnal de ceas, codul său este furnizat mai jos („clk_div2”).

Numele fișierului: FinalCounter

FIȘIERE OFERITE:

Afișaj cu șapte segmente:

Acest cod permite afișarea celor șapte segmente să afișeze valori zecimale. Un submodul acționează ca decodor între o intrare binară de 8 biți și o zecimală codată binară pe 4 biți. Celălalt împarte semnalul ceasului pentru a-și reîmprospăta valoarea la un anumit ritm.

Numele fișierului: sseg_dec

Semnal de ceas:

Acest cod permite contorului să crească în trepte de 1 secundă. Împarte frecvența ceasului de intrare într-o frecvență mai lentă. Ne-am adaptat pentru a oferi o perioadă de 1 secundă prin schimbarea constantei max_count: integer: = (3000000)”la„ constant max_count: integer: = (50000000)”.

Numele fișierului: clk_div2

Fișiere furnizate: sseg_dec, clk_div2 * Aceste fișiere sursă au fost furnizate de profesorul Bryan Mealy.

Pasul 3: Înțelegerea modului în care se reunesc (schemele componentelor VHDL)

Înțelegerea modului în care se reunesc (schemele componentelor VHDL)
Înțelegerea modului în care se reunesc (schemele componentelor VHDL)

Fișierul principal („MainProjectDES”) conține toate sub-fișierele discutate anterior. Acestea sunt conectate în modul de mai sus. Diferitele componente sunt interconectate folosind hărți de port pentru a trimite un semnal de la un element la altul.

După cum probabil ați observat, FinalCounter oferă o ieșire de 5 biți, în timp ce sseg_dec necesită o intrare de 8 biți. Pentru a compensa, setăm semnalul care conectează ambele componente să înceapă cu „000” și să adăugăm ieșirea de 5 biți de pe contor. Furnizând astfel o intrare pe 8 biți.

Constrângeri:

Pentru a rula aceste coduri pe placa Basys 3, a fost necesar un fișier de constrângeri, care să indice fiecărui semnal unde să meargă și cum au fost conectate piesele.

Pasul 4: Cod (Arduino)

Am programat Arduino Uno pentru a utiliza senzorul de mișcare pentru a detecta mișcarea și a oferi o ieșire care semnalizează LED-ul să se aprindă. În plus, utilizarea senzorului pentru a detecta mișcarea necesită rularea unor bucle care caută constant schimbarea distanței. În esență, are nevoie de un cronometru care rulează concomitent pentru a emite un semnal „ridicat” pentru ca LED-ul să se aprindă în timp ce cronometrul trebuie să fie resetat odată ce a fost detectată o nouă mișcare, ceea ce este aproape imposibil de implementat pe Vivado pe baza domeniului de cunoștințe a clasei. Mai mult, am folosit un Arduino pentru că nu ar fi fezabil să folosim HC-SR04 cu placa Basys 3, deoarece placa furnizează doar 3,3 V, în timp ce senzorul necesită o sursă de alimentare de 5 V. Pentru implementarea mișcării de detectare, este codarea efectivă, spre deosebire de CAD în VHDL.

Am folosit funcția incorporată de impulsuri pentru senzor pentru a prelua timpul trecut între sunetul emis inițial de la senzor și sunetul care revine la lovirea unui obiect. Apoi folosim viteza sunetului și intervalul de timp pentru a calcula distanța dintre obiect și senzor. Din aceasta, stocăm distanța actuală și o urmărim. Verificăm distanța la fiecare 150ms. De asemenea, am folosit biblioteca elapsedmil pentru a rula un temporizator intern în interiorul arduino pentru a ține evidența timpului scurs. Dacă detectăm o modificare a distanței, care corespunde unei mișcări, cronometrul este resetat la zero și va menține lumina aprinsă până când au trecut 3 secunde. Ori de câte ori senzorul detectează o altă mișcare, cronometrul este resetat la 0 și semnalul pentru lumina LED va fi "ridicat" pentru următoarele 3 secunde. Am atașat o copie a codului nostru Arduino de mai jos.

Pasul 5: Cum se potrivesc componentele noastre

Cum se potrivesc componentele noastre!
Cum se potrivesc componentele noastre!
Cum se potrivesc componentele noastre!
Cum se potrivesc componentele noastre!
Cum se potrivesc componentele noastre!
Cum se potrivesc componentele noastre!

După cum puteți vedea în „Basys3: Pmod Pin-out Diagram *” și în fotografia plăcii Arduino Uno, am evidențiat și etichetat porturile pe care le-am folosit.

1. LED-ul și placa Basys 3

LED-ul este conectat în serie cu rezistorul de 100Ω. -Sirul alb conectează rezistorul la pinul PWR al plăcii Basys 3. -Sirul galben conectează LED-ul la pinul H1 al plăcii Basys 3.

2. Senzorul de mișcare și Arduino Uno

-Cablul portocaliu conectează Vcc (puterea) senzorului de mișcare la pinul 5V al plăcii Arduino Uno.-Firul alb conectează pinul Trig al senzorului de mișcare la pinul 10 al plăcii Arduino Uno. senzorul de mișcare la pinul 9 al plăcii Arduino Uno.-Firul negru conectează pinul GND al senzorului de mișcare la pinul GND al plăcii Arduino Uno.

[Sârmele pe care le-am folosit erau prea scurte pentru a ajunge la componente, astfel erau interconectate]

3. Placa Basys 3 și Arduino Uno

Firul galben conectează pinul A14 al plăcii Basys 3 la pinul 6 al plăcii Arduino Uno.

* Această diagramă a fost preluată din „Manualul de referință al plăcii FPGA Basys 3 ™” al Digilent, care poate fi găsit aici.

Pasul 6: demonstrație

Pasul 7: E timpul să-l testați

Felicitări! Ați ajuns la sfârșitul proiectului nostru de senzor de mișcare și lumină contracontrolată! Vă mulțumesc foarte mult pentru că ați citit postarea noastră Instructables. Acum este timpul să încercați să construiți singur acest proiect. Dacă urmați fiecare pas cu atenție, ar trebui să aveți un senzor de mișcare și o lumină contracontrolată care funcționează similar cu a noastră! Vă dorim mult noroc în construirea acestui proiect și sperăm că poate contribui la economisirea energiei electrice, precum și a resurselor naturale!

Recomandat: