Arduino UNO R4 - Optische IR-sleufsensor (snelheidssensor)
In deze gids leren we hoe u de optische IR-sleufsensor (snelheidssensor) gebruikt met de Arduino UNO R4. In detail leren we:
- Hoe de U-vormige IR-sleufsensor een object ziet tussen zijn twee armen.
- Hoe u de snelheidssensor aansluit op de Arduino UNO R4.
- Hoe u een programma schrijft voor de Arduino UNO R4 om elk object te tellen dat door de sleuf gaat.
- Hoe u een programma schrijft voor de Arduino UNO R4 om de motorsnelheid (tpm, RPM) te meten met een encoderschijf en een interrupt.
Benodigde Hardware
Of u kunt de volgende kits kopen:
| 1 | × | DIYables STEM V4 IoT Starterskit (Arduino inbegrepen) | |
| 1 | × | DIYables STEM V4B IoT Starterskit (Arduino inbegrepen) | |
| 1 | × | DIYables Sensorkit (18 sensoren/displays) |
Over de Optische IR-sleufsensor (snelheidssensor)
Deze kleine module heeft een U-vorm. Men noemt hem ook een photo interrupter of opto interrupter (vorkvormige optische sensor). Één arm bevat een infrarood-LED. De andere arm bevat een NPN-fototransistor. Ze staan tegenover elkaar over een opening van 5.9 mm. De sensor vertelt de Arduino UNO R4 één simpel ding: is de opening leeg, of zit er iets in?
| Optische IR-sleufsensor (snelheidssensor) | |
|---|---|
| Sensortype | sleufvormig foto-elektrisch (IR-LED + NPN-fototransistor) |
| Sleufbreedte | 5.9 mm |
| Bedrijfsspanning | 3.3V tot 5V DC |
| Uitgang | digitaal (TTL), LOW als geblokkeerd, HIGH als vrij |
| Signaalconditionering | ingebouwde Schmitt-trigger |
| Montage | M3-schroefgaten aan beide uiteinden |
| Pinnen | 3 (VCC, GND, OUT) |
Veelvoorkomende toepassingen:
- De motorsnelheid (tpm, RPM) meten met een encoderschijf, zoals een toerenteller.
- Objecten of pulsen tellen.
- Afstand meten door wielomwentelingen te tellen.
- Wielsnelheid terugkoppelen naar een robot.
- Een eindpositie of een beginpositie (home) detecteren.
Pinout
De module heeft drie pinnen:
- VCC-pin: verbind met 5V op de Arduino UNO R4 (de module accepteert 3.3V tot 5V).
- GND-pin: verbind met GND (0V).
- OUT-pin: digitale uitgang, verbind met een ingangspin van de Arduino UNO R4.
De volgorde van de pinnen kan per batch veranderen. Lees altijd de labels die op uw module zijn gedrukt.
Hoe Het Werkt
De IR-LED schijnt de hele tijd door de sleuf.
- Sleuf is leeg: het licht bereikt de fototransistor, dus de OUT-pin is HIGH.
- Sleuf is geblokkeerd door iets ondoorzichtigs (een kaart, een vinger, een tand van een encoderschijf): het licht kan er niet door, dus de OUT-pin is LOW.
De ingebouwde Schmitt-trigger maakt van het ruwe lichtniveau een schone 0 of 1. Het signaal trilt niet, dus u hebt geen software-debounce nodig.
Twee kleine dingen om te weten:
- Doorzichtig plastic of glas kan IR-licht doorlaten. Gebruik ondoorzichtige objecten.
- Sommige modules van andere makers werken andersom. Als uw board "geblokkeerd" aangeeft terwijl de sleuf leeg is, wissel dan gewoon LOW en HIGH om in de eerste code. De RPM-code telt één flank per sleuf, dus werkt met beide types.
Bedradingsdiagram
Er zijn maar drie draden nodig: VCC naar 5V, GND naar GND, en OUT naar pin 2 van de Arduino UNO R4. De UNO R4 is een 5V-board, dus 5V-voeding is hier prima, en het OUT-signaal blijft op een veilig niveau.
Zie De beste manier om Arduino Uno R4 en andere componenten van stroom te voorzien.
We gebruiken pin 2 omdat die een interrupt kan uitvoeren. De tweede code heeft dit nodig.
Hoe Te Programmeren Voor de Optische IR-sleufsensor (snelheidssensor)
Controleer of de sleuf geblokkeerd is (polling):
- Stel de pin die verbonden is met de OUT-pin in als ingang:
- Lees de pin. LOW betekent geblokkeerd, HIGH betekent vrij:
- Vergelijk met de vorige meting, zodat u alleen handelt als de toestand verandert:
Snelle pulsen tellen (interrupt):
- Maak een teller. Markeer hem als volatile, omdat de interrupt hem verandert:
- Schrijf een kleine functie die één bij de teller optelt:
- Voer die functie uit elke keer dat het signaal van HIGH naar LOW valt (één tand komt in de sleuf):
- Kopieer en reset de teller één keer per seconde terwijl de interrupts gepauzeerd zijn, en reken dan de pulsen om naar tpm (RPM):
Waarom deze formule? Bij een schijf met 20 sleuven geeft één volledige omwenteling 20 pulsen. Pulsen in 1 seconde × 60 geeft pulsen per minuut. Deel door 20 en u krijgt omwentelingen per minuut (tpm, RPM).
Arduino UNO R4 Code - Object in de Sleuf Detecteren
Deze sketch controleert de OUT-pin steeds opnieuw. Hij print alleen een regel als de toestand verandert, en telt er één bij een teller op elke keer dat de sleuf geblokkeerd wordt.
Snelle Stappen
Volg deze instructies stap voor stap:
- Als dit uw eerste keer is met de Arduino Uno R4 WiFi/Minima, raadpleeg dan de tutorial over het instellen van de omgeving voor Arduino Uno R4 WiFi/Minima in de Arduino IDE.
- Verbind de componenten volgens het meegeleverde diagram.
- Verbind het Arduino Uno R4 board met uw computer via een USB-kabel.
- Start de Arduino IDE op uw computer.
- Selecteer het juiste Arduino Uno R4 board (bijv. Arduino Uno R4 WiFi) en COM-poort.
- Kopieer de bovenstaande code en plak deze in de Arduino IDE.
- Klik op de Upload knop om de code naar de Arduino UNO R4 te versturen.
- Open de Serial Monitor en stel hem in op 9600 baud.
- Schuif een stukje karton (of uw vinger) in de sleuf en trek het er weer uit. Doe dit een paar keer.
- Bekijk het resultaat op de Serial Monitor.
Elke passage geeft twee regels: één als de kaart erin gaat, één als hij eruit komt. Er wordt geen regel geprint zolang er niets verandert.
Arduino UNO R4 Code - Motorsnelheid Meten (tpm, RPM)
Polling in loop() is prima voor langzame objecten. Een draaiende schijf is veel sneller, en loop() kan sommige tanden missen. Daarom telt deze sketch pulsen met een interrupt op de FALLING-flank, wat precies één telling per tand geeft. Elke seconde print hij het aantal pulsen en de snelheid in tpm (RPM).
De constante SLOTS_PER_TURN staat op 20. Dat is de gebruikelijke encoderschijf die bij TT-tandwielmotoren wordt geleverd. Heeft uw schijf een ander aantal sleuven, verander dan deze waarde.
De Encoderschijf Instellen
- Bevestig de encoderschijf op de motoras of het wiel.
- Plaats de sensor zo dat de tanden van de schijf door de sleuf gaan.
- Zorg dat de schijf de armen van de sensor niet raakt.
- U kunt de schijf met de hand laten draaien, of de motor voeden. De motor heeft zijn eigen bedrading nodig. Zie daarvoor de tutorial Arduino UNO R4 - DC Motor.
Snelle Stappen
- Houd dezelfde bedrading als eerder.
- Kopieer de RPM-code hierboven en plak deze in de Arduino IDE.
- Klik op de Upload knop.
- Open de Serial Monitor op 9600 baud.
- Laat de schijf draaien en laat hem daarna stoppen.
- Bekijk de snelheid op de Serial Monitor. Hier draait de motor met ongeveer 300 tpm (RPM):
Controleer één regel: 100 pulsen × 60 ÷ 20 = 300 tpm (RPM).
Wilt u weten hoe ver een wiel heeft bewogen? Vermenigvuldig het aantal omwentelingen met de omtrek van het wiel (π × wieldiameter).
※ Notiz:
- Houd de interruptfunctie kort. Roep Serial.print() er niet in aan.
- Elke variabele die de interrupt verandert, moet volatile zijn.
- Wilt u een object op afstand detecteren in plaats van in een sleuf? Probeer de obstakel vermijdingssensor. Hebt u een knop nodig die ook de draairichting geeft? Probeer de rotary encoder.
Video Tutorial
We overwegen het maken van videotutorials. Als u videotutorials belangrijk vindt, abonneer u dan op ons YouTube-kanaal om ons te motiveren de video's te maken.