Raspberry Pi - Optische IR-sleufsensor (snelheidssensor)
Deze tutorial legt uit hoe u met een Raspberry Pi de pulsen van een optische IR-sleufsensor (snelheidssensor) uitleest met een kort Python-script. U kent dit onderdeel misschien ook als vorkvormige optische sensor (photo interrupter of opto interrupter). Hij ziet wanneer iets door de smalle opening gaat. Met dat ene signaal kan de Raspberry Pi voorwerpen tellen, of vertellen hoe snel een wiel of een motoras draait. We leren hier:
- Wat er in de U-vormige IR-sensor gebeurt als de opening vrij is en als hij geblokkeerd is
- Hoe u de IR-sleufsensor aansluit op de GPIO-header van een Raspberry Pi 4 op 3,3V
- Hoe u de Raspberry Pi programmeert om elk voorwerp te tellen dat door de sleuf gaat
- Hoe u de Raspberry Pi programmeert om de snelheid van een motor in tpm (RPM) te meten met een encoderschijf en een GPIO event callback
Wij raden aan:
- Gebruik een rotary encoder als u een draaiknop wilt die met de hand wordt gedraaid en ook de draairichting aangeeft.
- Gebruik een infrarood obstakelsensor als het voorwerp voor de sensor staat, een paar centimeter ver weg, en niet in een sleuf past.

Hardware Benodigd
Of u kunt de volgende kits kopen:
| 1 | × | DIYables Sensorkit (18 sensoren/displays) |
Over de optische IR-sleufsensor (snelheidssensor)
Kijk van opzij naar de module en u ziet de letter U. De twee armen van de U staan tegenover elkaar, met een opening van 5,9 mm ertussen. Een arm bevat een infrarood-LED. De andere arm bevat een NPN-fototransistor. De LED schijnt de hele tijd over de opening, en de fototransistor let op dat licht.
| Optische IR-sleufsensor (snelheidssensor) | |
|---|---|
| Type sensor | fotoelektrisch met sleuf (IR-LED + NPN-fototransistor) |
| Breedte van de sleuf | 5,9 mm |
| Bedrijfsspanning | 3,3V tot 5V DC |
| Uitgang | digitaal (TTL), LOW bij geblokkeerd, HIGH bij vrij |
| Signaalverwerking | ingebouwde Schmitt-trigger |
| Montage | M3-schroefgaten aan beide uiteinden |
| Pinnen | 3 (VCC, GND, OUT) |
Mensen gebruiken deze sensor voor taken zoals:
- De snelheid (tpm) meten van een motor met een encoderschijf
- Een eenvoudige toerenteller bouwen
- Voorwerpen of pulsen tellen
- Afstand meten door te tellen hoe vaak een wiel draait
- Snelheidsfeedback geven voor de wielen van een robot
- Een eindpositie of een beginpositie (home) detecteren
Hoe het werkt

De OUT-pin volgt de lichtstraal:
- Lege opening: het infrarode licht bereikt de fototransistor, dus OUT blijft HIGH.
- Iets ondoorzichtigs in de opening (een stuk karton, of een tand van een encoderschijf): het licht kan er niet doorheen, dus OUT zakt naar LOW.
Er zit ook een Schmitt-trigger op het bord. Hij maakt van het ruwe signaal een schone 0 of 1 zonder getril aan de randen. Hierdoor heeft uw Python-script geen debounce-code nodig.
Twee kleine punten om te onthouden:
- Doorzichtig plastic of glas kan het IR-licht doorlaten, dus de sensor ziet het misschien niet. Gebruik ondoorzichtige voorwerpen.
- Enkele modules van andere makers werken andersom. Als uw module "geblokkeerd" meldt terwijl de opening leeg is, wissel dan LOW en HIGH in het eerste script om. Het tpm-script telt een flank voor elke tand, dus het geeft in beide gevallen de juiste snelheid.
De pinout van de optische IR-sleufsensor (snelheidssensor)

De module heeft drie pinnen:
- VCC: Deze pin moet worden verbonden met de voedingsspanning (3,3V tot 5V). Gebruik op de Raspberry Pi 3,3V.
- GND: Deze pin moet worden verbonden met de massa (0V)
- OUT: Deze pin stuurt het digitale signaal naar een GPIO-ingangspin van de Raspberry Pi
※ Notiz:
De volgorde van de pinnen op een module kan verschillen tussen fabrikanten, en zelfs tussen productiebatches. Gebruik daarom altijd de labels die op de module staan. Kijk goed!
Bedradingsschema

Deze afbeelding is gemaakt met Fritzing. Klik om de afbeelding te vergroten.
Om uw bekabelingsopstelling te vereenvoudigen en te organiseren, raden we het gebruik van een Schroevenklemaansluiting-shield voor Raspberry Pi aan. Deze shield zorgt voor veiligere en beter beheerbare verbindingen, zoals hieronder weergegeven:

- VCC-pin van de sensor naar 3,3V van de Raspberry Pi (pin 1)
- GND-pin van de sensor naar GND van de Raspberry Pi (pin 6 of een andere GND-pin)
- OUT-pin van de sensor naar GPIO17 van de Raspberry Pi (pin 11)
WARNING
Voed deze sensor niet vanaf de 5V-pin van de Raspberry Pi. De OUT-pin gaat even hoog als de VCC-spanning. Met 5V op VCC zou OUT 5V naar GPIO17 sturen, maar de GPIO-pinnen van de Raspberry Pi accepteren alleen 3,3V. Als u de sensor op 3,3V voedt, blijft het OUT-signaal veilig.
Opstelling van de encoderschijf voor snelheidsmeting
Het tweede script heeft een encoderschijf nodig. Dit is een ronde schijf met sleuven langs de rand.
- Bevestig de schijf op de motoras of op het wiel.
- Monteer de sensor met de M3-schroefgaten, zodat de rand van de schijf in de opening loopt.
- Controleer dat de tanden van de schijf door de sleuf gaan zonder de armen van de sensor te raken.
U kunt de schijf met de hand laten draaien, of u kunt de motor laten draaien. De bedrading van de motor hoort niet bij deze pagina. Om een motor met de Raspberry Pi aan te sturen, zie de Raspberry Pi - DC Motor tutorial.
Programmeren voor de Raspberry Pi om voorwerpen te detecteren en te tellen met de optische IR-sleufsensor
Dit eerste script controleert GPIO17 steeds opnieuw in een lus. Het print alleen een regel als de status van de pin verandert. Elke keer dat de opening geblokkeerd raakt, gaat de teller met een omhoog.
Snelle Stappen
- Zorg dat u Raspbian of een ander compatibel besturingssysteem voor Raspberry Pi op uw Pi hebt geïnstalleerd.
- Zorg dat uw Raspberry Pi met hetzelfde lokale netwerk is verbonden als uw pc.
- Zorg dat uw Raspberry Pi met internet is verbonden als u libraries moet installeren.
- Als u de Raspberry Pi voor het eerst gebruikt, zie hoe u de Raspberry Pi instelt
- Verbind uw pc via SSH met de Raspberry Pi met de ingebouwde SSH-client op Linux en macOS of PuTTY op Windows.
- Controleer of de RPi.GPIO library is geïnstalleerd. Als die ontbreekt, installeer hem met deze commando's:
- Sluit de sensor aan op de Raspberry Pi zoals in het bedradingsschema hierboven.
- Maak een Python-scriptbestand OpticalSpeedSensor.py en voeg de volgende code toe:
- Sla het bestand op en start het script met dit commando:
- Schuif een stuk karton, of uw vinger, in de opening en trek het er weer uit. Doe dit een paar keer.
- Controleer de resultaten in de terminal.
De terminal blijft stil zolang er niets verandert. Een nieuwe regel verschijnt alleen op het moment dat de opening geblokkeerd raakt of weer vrij wordt. Het script blijft kijken totdat u in de terminal op Ctrl + C drukt. Het ruimt dan de GPIO-pin op voordat het stopt.
Programmeren voor de Raspberry Pi om de motorsnelheid (tpm) te meten met de optische IR-sleufsensor
Als een schijf snel draait, komen de pulsen heel snel. Een eenvoudige lus zoals hierboven kan er enkele missen. Dit script vraagt daarom aan RPi.GPIO om de pin op de achtergrond te bewaken met GPIO.add_event_detect(). Elke FALLING-flank (het moment dat een tand de opening blokkeert) roept een kleine functie aan die een bij een teller optelt. Zo geeft elke tand precies een telling.
Eens per seconde leest het script de teller, zet hem terug op nul en berekent de snelheid:
- Een volledige omwenteling van een schijf met 20 sleuven geeft 20 pulsen.
- Pulsen in 1 seconde × 60 = pulsen in 1 minuut.
- Pulsen in 1 minuut ÷ 20 = omwentelingen in 1 minuut, en dat is de tpm (RPM).
De waarde 20 staat in SLOTS_PER_TURN. Dat is het aantal sleuven van de gewone encoderschijf die bij TT-tandwielmotoren wordt verkocht. Als uw schijf een ander aantal sleuven heeft, pas dan deze constante aan.
Snelle Stappen
- Doe dezelfde voorbereiding als in het eerste voorbeeld: SSH naar de Raspberry Pi, installeer RPi.GPIO en houd dezelfde bedrading.
- Plaats de encoderschijf, zoals getoond in de opstelling van de encoderschijf hierboven.
- Maak een Python-scriptbestand OpticalSpeedSensorRPM.py en voeg de volgende code toe:
- Sla het bestand op en start het script met dit commando:
- Draai de schijf met de hand, of zet de motor aan.
- Controleer de resultaten in de terminal. De onderstaande regels komen van een motor die met ongeveer 300 tpm draait:
In tegenstelling tot het eerste script print dit script elke 1 seconde een regel (door de time.sleep(1) regel), ook als de schijf stilstaat. In dat geval toont het 0 pulsen en 0,00 tpm. De metingen blijven komen totdat u in de terminal op Ctrl + C drukt. Het script ruimt dan de GPIO-pin op en stopt.
Extra kennis
Optische sleufsensor versus obstakelsensor versus rotary encoder
Alle drie de onderdelen sturen pulsen of AAN/UIT-signalen naar de Raspberry Pi, dus ze zijn makkelijk te verwarren. Laten we vergelijken waarvoor elk is gemaakt:
| Optische IR-sleufsensor (snelheidssensor) | IR-obstakelsensor | Rotary encoder | |
|---|---|---|---|
| Wat hij meet | een voorwerp in een opening van 5,9 mm | een voorwerp ervoor, een paar centimeter ver weg | hoe ver en welke kant een knop is gedraaid |
| Hoe hij meet | lichtstraal over de opening wordt geblokkeerd | gereflecteerd infrarood licht | twee signalen die niet in fase zijn |
| Beste gebruik | tpm, tellen, wielomwentelingen, beginpositie | obstakels detecteren voor robots | draaiknop voor de gebruiker |
| Geeft richting aan | nee | nee | ja |
Het is duidelijk dat de optische sleufsensor de juiste keuze is als het bewegende deel door de opening kan gaan en u snelheid of een exacte telling nodig hebt. Als het voorwerp erbuiten blijft, gebruik dan de obstakelsensor. Als een persoon aan een knop draait en de richting telt, gebruik dan de rotary encoder.
Het aantal sleuven op de encoderschijf kiezen
Laten we een schijf met weinig sleuven en een schijf met veel sleuven vergelijken:
- Meer sleuven geven meer pulsen per omwenteling. De tpm-waarde krijgt fijnere stappen en reageert beter bij lage snelheid. Met 20 sleuven en een venster van 1 seconde verandert elke extra puls het resultaat met 3 tpm (60 ÷ 20).
- Minder sleuven geven minder pulsen per seconde. Dit is makkelijker te volgen voor de Raspberry Pi als de motor heel snel draait, maar het resultaat verandert in grotere stappen.
Welke schijf u ook gebruikt, schrijf het echte aantal sleuven in SLOTS_PER_TURN. Anders is de tpm-waarde fout.
Afstand meten met wielomwentelingen
Als de encoderschijf samen met een wiel draait, kunt u ook uitrekenen hoe ver het wiel heeft gerold:
- Omtrek van het wiel = π × diameter van het wiel
- Afstand = aantal omwentelingen × omtrek van het wiel
- Aantal omwentelingen = totaal aantal pulsen ÷ SLOTS_PER_TURN
Een wiel met een diameter van 65 mm rolt bijvoorbeeld ongeveer 204 mm per omwenteling. Na 10 omwentelingen is het dus ongeveer 2 meter verder.
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.