Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Een eenvoudige analoge naderingssensor met digitale interface (voor Raspberry Pi) [laatste update:7 februari 2014]

Raspberry Pi heeft een Broadcom BCM2835-chip, die 26 GPIO-pinnen (general purpose input/output) aanstuurt. Er is een C-bibliotheek of RPi.GPIO python-pakket online beschikbaar dat kan worden gebruikt om de pinnen te besturen. Het RPi.GPIO-pakket is standaard inbegrepen in de meeste Raspberry Pi-systemen, zoals Raspbian, een RPi-versie van het Debian Linux-systeem.

Een nadeel van RPi, vergeleken met arduino, is dat het geen analoge pin heeft. Alle GPIO-pinnen zijn puur digitaal. Als pin A bijvoorbeeld een uitgangspin is, kan deze alleen LAAG (0V) of HOOG (3,3V) uitvoeren, weergegeven als 0 of 1. Als pin A een ingangspin is, wordt voor elke spanning onder 0,8V toegepast op pin A , het neemt het als LAAG of 0; voor elke spanning boven 1,3 V (eigenlijk verrassend laag!), wordt deze als HOOG of 1 beschouwd [ref:RPi GPIO].
In de echte wereld komt puur 0 of 1 echter zelden voor. We krijgen altijd informatie die continu waarde kan hebben in het assortiment. De temperatuur kan bijvoorbeeld 10C of 50F zijn, of 100C of 212F. Dit nummer bevat meer informatie dan alleen "koud" of "heet". Een afstand kan 2 cm of 10 m zijn, en het is niet voldoende om alleen "dichtbij" of "ver weg" te kennen.

Er zijn enkele methoden om dit nadeel te verhelpen. RPi ondersteunt de SPI- of I2C-interface, zodat we een externe analoog-naar-digitaalomzetter (ADC) kunnen gebruiken en een SPI- of I2C-interface kunnen gebruiken om een ​​quasi-analoog signaal via deze ADC's te krijgen, zoals MCP3008, TLC549, MCP23017, enz. Deze chips kost meestal een paar tientjes. Met extra commerciële sensoren kan het hele onderdeel echter meer dan $ 20 tot $ 30 kosten, en het is moeilijk om het systeem compact te maken. Voor robotprojecten heb je meestal meer dan één sensor nodig, en de kosten kunnen gemakkelijk oplopen.

In veel situaties is het zelfs mogelijk om het gebruik van deze externe apparaten te vermijden en toch analoog te krijgen signalen via de digitale pinnen!

De sleutel is om het analoge signaal om te zetten in tijdsduur. Omdat tijd altijd analoog is!

Ik bouw een eenvoudige infrarood-nabijheidssensor met behulp van verschillende infrarood-LED's, een fototransistor, een 2N3904 NPN-transistor, een 100nF keramische condensator en verschillende laagvermogenweerstanden. En ik kan wat analoog lezen.

Alle elementen behoren tot de goedkoopste op de elektronische markt.

Het maakt niet echt uit welke LED's, fototransistor of NPN-transistors worden gebruikt. Ze zijn vrijwel hetzelfde.

Het enige dat er misschien een beetje toe doet, is de condensator van 100 nF (0,1 uF). Ik heb een keramische laag met profiel gebruikt, wat waarschijnlijk niet de beste keuze is. Een klasse 1 keramiek, of filmcondensator, zal hier meer geschikt zijn.

Sluit de +5V- en GND-draden aan op een externe 5V-voeding, sluit ook de GND-draad aan op de aarde van de Raspberry Pi GPIO-pinnen. Kies een GPIO-pin, bijvoorbeeld Pin A als trigger en sluit deze aan op de Trigger-draad. Kies een andere GPIO-pin, bijvoorbeeld Pin B, als signaalingang/-uitgang en verbind deze met de OUT-draad.

Om de afstand van een object te meten, sturen we een triggersignaal om de infrarood-leds te activeren. Het licht dat door deze LED's wordt uitgestraald, wordt vervolgens gereflecteerd door het object voor de sensor. De fototransistor in het midden vangt het gereflecteerde licht op en wekt een proportionele stroom op. Deze stroom wordt gebruikt om de spanning over de condensator te integreren (I=CdV/dt). Door de tijd te meten die de condensatorspanning nodig heeft om een ​​bepaalde drempel te bereiken, hebben we een idee hoeveel stroom door de fototransistor werd gegenereerd, of equivalent, hoeveel licht werd gereflecteerd. Blijkbaar, hoe dichter het object is, hoe meer het gereflecteerde licht is. Door de timing van de sensor zorgvuldig te kalibreren, zouden we een vrij nauwkeurige meting van de afstand moeten kunnen krijgen.

Hier is de gedetailleerde volgorde van operations.1. Zet de condensator op nul

Stel eerst pin B in als een uitgangspin en stel deze in op nul.

GPIO.setup(PIN_B,GPIO.OUT)
GPIO.output(PIN_B,0)
time.sleep(0.01)

Hierdoor wordt eventuele restspanning op de condensator ontladen. Merk op dat de RC-tijd voor het ontladen van de condensator t=RC=500ohm * 100nF =50 us =0.00005 sec is. Door nul volt op pin B 200RC te houden, zorgen we ervoor dat de condensator volledig ontladen is (de restspanning moet e−200=10−87 keer de oorspronkelijke restspanning zijn).2. Stel pin B in als ingang

Nu gebruiken we pin B als invoerpin om gegevens van de fototransisto te krijgen.
GPIO.setup(PIN,GPIO.IN)

3. Laat de LED's branden

Het is tijd om de infrarood-LED's in te schakelen.

GPIO.setup(PIN_A,GPIO.OUT)
GPIO.output(PIN_A,1)

Hiermee wordt de spanning van de triggerpin ingesteld op 3,3 V. Aangezien het BE-knooppunt van 2N3904 0,7 V daalt, is de spanning over R1 2,6 V. De stroom door R1 is dan I=2.6V/4.3kΩ=0.6mA. 2N3904 versterkt deze stroom vervolgens met ~ 150 keer, wat resulteert in een stroom van ~ 100 mA van de collector naar de emitter. Elk van de LED's geleidt ongeveer 50 mA gedurende een korte tijdsperiode.4. Timing van de resterende duur van pin B LAAG

Begin te meten hoe lang het duurt voordat de condensator de drempel van RPi bereikt, zodat pin B HOOG wordt

counter=0
t1=time.clock()*1000
while(GPIO.input(PIN_B)==0)&(counter<1e4):
counter =counter+1
deltat=time.clock()*1000-t1

deltat is de tijdsduur van pin B die LAAG blijft. Aangezien deltat evenredig is met de reciproke van fototransistorstroom (of hoeveelheid gereflecteerd licht ), en de stroom van de fototransistor is ongeveer evenredig met het reciproke van de afstand , deltat is ongeveer evenredig met de afstand .
deltat∝1I∝1light∝distance

De term (counter<1e4) is om te voorkomen dat het te lang duurt om de condensator te integreren vanwege een extreem lage fototransistorstroom, of equivalent, oneindige afstand.

Voor meer details:een eenvoudige analoge naderingssensor met digitale interface (voor Raspberry Pi) laatste update 7 februari 2014]


Productieproces

  1. Meet temperaturen met een 1-draads DS18B20-sensor en Raspberry Pi
  2. 1-draads temperatuursensor DS1820 op Raspberry Pi (direct GPIO)
  3. De integratie van sensorgegevens met Raspberry Pi-microprocessor
  4. Ultrasone sensor (HC-SR04) + Raspberry Pi
  5. Lijnvolgsensor met RPi
  6. Analoge sensoren uitlezen met één GPIO-pin
  7. DIY infrarood bewegingssensorsysteem voor Raspberry Pi
  8. Analoge sensoren zonder analoge ingangen op de Raspberry Pi
  9. Raspberry Pi 1-draads digitale thermometersensor (DS18B20)
  10. Raspberry Pi digitale Hall-sensor in JAVA
  11. Geigerteller – zelfstudie stralingssensorkaart voor Raspberry Pi