De mogelijkheden van uw Raspberry Pi uitbreiden met een ADC-converter: wat u moet weten

De Raspberry Pi is een uitstekend apparaat voor diverse elektronische projecten, maar door een ADC-converter te gebruiken, kunt u de mogelijkheden ervan uitbreiden om analoge signalen te meten en met een breder scala aan apparaten te communiceren.

De Raspberry Pi mist standaard analoge ingangen. Dit brengt het in het nadeel ten opzichte van op microcontrollers gebaseerde borden zoals de Arduino.

Maar wanhoop niet: er zijn genoeg opties om te overwegen. Je kunt aan de slag met een Raspberry Pi en een externe ADC. In deze handleiding geven we u een uitgebreid overzicht van het gebruik van een ADC-converter met een Raspberry Pi, waarbij we ons concentreren op de belangrijkste stappen en potentiële voordelen. Lees verder en ontdek hoe u het beste uit uw apparaat kunt halen en het effectief in uw elektronische projecten kunt integreren. Verifiëren Wat is een analoog naar digitaal converter (ADC)? Begrijp zijn werk en het belang ervan in het tijdperk van digitale technologie.

De mogelijkheden van uw Raspberry Pi uitbreiden met een ADC-converter: wat u moet weten | 1onFITi82-PkYWVm4XyVXRw-DzTechs | Framboos Pi

Waarom zou je vermeldingen willen toevoegen?

De echte wereld zit vol met verschijnselen die gemakkelijk kunnen worden beschreven met behulp van spanning, als je over de juiste circuits beschikt. Zet deze elektrische spanningen om in digitale vorm en u kunt ze registreren, verwerken en gebruiken om parameters en andere apparaten te besturen.

Misschien wilt u de vochtigheid van uw bodem, de temperatuur van uw kas of het gewicht van uw hamster in de gaten houden. Misschien wil je een volumeregelaar aan je Pi toevoegen, een equalizer bouwen of een geheel nieuwe joystick ontwerpen. De mogelijkheden zijn min of meer onbeperkt.

ADC-opties

Dus welke ADC is het beste voor beginners?

Een van de meest populaire en eenvoudige opties zijn chipsets MCP3004MCP3008) van Microchip. Je krijgt vier (of acht) 10-bits kanalen, die tot 200k SPS kunnen lezen. Aan de andere kant zijn er de ADS111x-apparaten van Texas Instruments, die 16 bits lezen bij 860 SPS. Daarom is er een afweging tussen snelheid en nauwkeurigheid (en natuurlijk prijs).

Veel microcontrollers worden geleverd met ingebouwde ADC-converters. De ATMega die je in de gemiddelde Arduino aantreft, biedt verschillende 10-bits kanalen, plus al het andere. Hierdoor kan de Arduino analoge ingangen leveren waar de Raspberry Pi dat niet kan. Als je al een Arduino bij je installatie hebt betrokken en 10 bits voldoende precisie is, is dit misschien wel de gemakkelijkste methode.

Hier houden we het simpel, met de ADS1115 van Adafruit. Verifiëren De voor- en nadelen van het gebruik van een Arduino-kloon in uw projecten.

De mogelijkheden van uw Raspberry Pi uitbreiden met een ADC-converter: wat u moet weten | 1UfuVNUimKqFWk5TgJmVMqw-DzTechs | Framboos Pi

Wat is een programmeerbare versterkingsversterker?

Deze chip wordt geleverd met een aantal interessante functies, waaronder een Programmable Gain Amplifier (PGA). Hiermee kunt u het gewenste waardenbereik digitaal aanpassen, tot op een fractie van een spanning. Met het aantal waarden dat 16 bits kan vertegenwoordigen, kun je hiermee verschillen detecteren die zo klein zijn als een paar microvolt.

Het voordeel hiervan is dat je de winst in het midden kunt veranderen. Andere chips, zoals de MCP3004, hanteren een andere aanpak; Hij wordt geleverd met een extra pin, waarvoor u een referentiespanning kunt opgeven.

Hoe zit het met multiplexen?

Een multiplexer (of mux) is een schakelaar waarmee je met één ADC meerdere ingangen kunt lezen. Als uw ADC-chip meerdere ingangspoorten heeft, vindt er enige interne multiplexing plaats. De mux van de ADS1115 biedt vier ingangen, die u via interne registers kunt selecteren.

Administratief verwerken

De ADS1115 biedt deze opties, plus nog een paar andere. U kunt de multiplexer manipuleren, de versterking aanpassen, de ingebouwde comparator activeren, de bemonsteringsfrequentie wijzigen en het apparaat in de energiezuinige slaapmodus zetten, allemaal door op een paar toetsen te tikken.

Maar waar zijn die sleutels? Ze bestaan ​​in het pakket, in de vorm van zeer kleine stukjes geheugen die registers worden genoemd. Om een ​​bepaalde functie te activeren, stelt u eenvoudigweg de betreffende bit in op 1 in plaats van op 0.

Kijkend naar een gegevensblad ADS111xU zult merken dat deze modellen worden geleverd met vier registers, inclusief configuratieregisters die het gedrag van het apparaat bepalen.

De mogelijkheden van uw Raspberry Pi uitbreiden met een ADC-converter: wat u moet weten | 1AQdZtwVqA6rDq_bgVIbDhA-DzTechs | Framboos Pi

De bits 14 tot en met 12 besturen bijvoorbeeld de multiplexer. Met deze drie bits kun je kiezen uit acht configuraties. Het gewenste getal hier is “100”, wat het verschil geeft tussen de nulinvoer en het minimum. Aan de andere kant regelen de bits 7 tot en met 5 de bemonsteringssnelheid. Als u het maximum van 860 samples per seconde wilt, kunt u dit instellen op “111”.

Zodra u weet welke opties u wilt instellen, heeft u twee bytes om naar de ADC te sturen. Als u later hier of daar een enkele bit wilt instellen, kunt u deze afzonderlijk afhandelen met behulp van bitoperatoren.

Dit is waar het verwarrend kan worden. In dit geval vertegenwoordigt het binaire getal geen waarde, maar eerder de waarden van de afzonderlijke transformatoren. U kunt deze variabelen uitdrukken als één groot getal, in decimaal of hexadecimaal. Maar als u stress wilt vermijden, moet u zich aan de binaire versie houden, die gemakkelijker te lezen is.

Draden aansluiten

U kunt deze adapter rechtstreeks op het enkele paneel aansluiten. Het accepteert positieve spanningsingangen tussen 2 en 5.5 volt, wat betekent dat de 3.3 volt-rail op de Raspberry Pi prima zal werken.

Verbind de SDA- en SCL-ingangen met hun tegenhangers op de RPi en doe dezelfde dingen met aarde en 3.3V. Plaats een voltmeter tussen de aarde- en spanningslijnen en steek vervolgens de middelste draad in de eerste ingang van de ADC. Dat is alles wat u nodig heeft om aan de slag te gaan!

Omgaan met I2C

Verschillende ADC's werken via verschillende protocollen. In het geval van de ADS1115 zullen we I2C gebruiken.

In het volgende voorbeeld wordt interactie met de ADC uitgevoerd met behulp van Python. Maar voordat u dat doet, moet u het instellen. Recente releases van Raspberry Pi OS hebben dit heel eenvoudig gemaakt. Ga naar Voorkeuren > Raspberry Pi-configuratie. Schakel vervolgens op het tabblad Interfaces I2C in.

De mogelijkheden van uw Raspberry Pi uitbreiden met een ADC-converter: wat u moet weten | 1sCKiaZSZS7E8yWa5E_izcg-DzTechs | Framboos Pi

Om te controleren of alles werkt, opent u Terminal en voert u het volgende uit:

sudo i2cdetect -y 1

Met deze opdracht wordt een mesh uitgevoerd. Ervan uitgaande dat alles werkt en u het correct hebt aangesloten, ziet u een nieuwe waarde in het raster verschijnen. Dit is het adres van uw ADC. Houd er rekening mee dat het een hexadecimale waarde is, dus u moet er ‘0x’ voor zetten als u deze in de onderstaande code gebruikt. En hier is 0x48:

De mogelijkheden van uw Raspberry Pi uitbreiden met een ADC-converter: wat u moet weten | 1pfkumhzqge2jV1xuPrEy8A-DzTechs | Framboos Pi

Zodra u het adres heeft, kunt u de SMBus-bibliotheek gebruiken om I2C-opdrachten te verzenden. Je zult hier te maken krijgen met twee methoden. De eerste is schrijf_woord_data(), dat drie argumenten accepteert: het apparaatadres, het register waarnaar u schrijft en de waarde die u wilt schrijven.

De tweede is lees_woord_data(), Die alleen apparaatadres en geschiedenis accepteert. De ADC leest de spanningen continu uit en slaat het resultaat op in het schakelregister. Met deze methode kunt u de inhoud van dit record ophalen.

U kunt het resultaat een beetje verfraaien en vervolgens afdrukken. Neem een ​​korte pauze voordat u terugkeert naar het begin van de lus. Zo voorkom je dat je overspoeld wordt met data.

from smbus import SMBus
import time
addr = 0x48
bus = SMBus(1)

# set the registers for reading
CONFIGREG = 1
CONVERSIONREG = 0

# set the address register to point to the config register
# write to the config registers
bus.write_word_data(addr, CONFIGREG, (0b00000100 << 8 | 0b10000010)) 

# define the top of the range
TOP = 26300

while True:
    # read the register
    b = bus.read_word_data(addr, CONVERSIONREG)

    # swap the two bytes
    b = ((b & 0xFF) << 8) | ((b >> 8) & 0xFF)
    
    # subtract half the range to set ground to zero
    b -= 0x8000

    # divide the result by the range to give us a value between zero and one
    b /= TOP

    # cap at one
    b = min(b, 1)

    # bottom is zero
    b = max(b, 0)

    # two decimal places
    b = round(b, 2)
    print(b)
    time.sleep(.01)

Je bent bijna klaar. Stel het bereik van de waarden die u krijgt in op de waarde die u verkiest, en kap deze vervolgens af tot het gewenste aantal decimalen. U kunt de afdrukfunctie zo aanpassen dat er alleen een nieuwe waarde wordt afgedrukt als deze afwijkt van de vorige waarde.

Omgaan met lawaai

Tenzij je opstelling echt mooi, netjes en opgeruimd is, zul je wat ruis opmerken. Dit is het inherente nadeel van het gebruik van 16 bits in plaats van slechts tien: die kleine hoeveelheid ruis zal meer opvallen.

Door de aangrenzende ingang (Ingang 1) met aarde te verbinden en de modus zo te schakelen dat u de eerste en tweede ingang vergelijkt, kunt u stabielere resultaten verkrijgen. Je kunt ook lange ruisverzamelende kabels vervangen door kleinere, en een paar condensatoren toevoegen terwijl je deze aanpassing doorvoert. De waarde van uw potentiometer kan ook een verschil maken.

Er zijn ook software-opties. U kunt een voortschrijdend gemiddelde maken of kleine wijzigingen eenvoudigweg negeren. Het nadeel is dat de aanvullende code rekenkosten met zich meebrengt. Als je voorwaardelijke instructies schrijft in een taal op hoog niveau, zoals Python, en elke seconde duizenden samples neemt, zullen deze kosten snel oplopen. Verifiëren Raspberry Pi en Sense HAT Gids voor temperatuurbewaking: de beste stappen en tips.

veelgestelde vragen

Q1. Wat is een ADC-converter en hoe werkt deze met Raspberry Pi?

Een ADC (Analog-to-Digital Converter) is een apparaat dat analoge signalen omzet in digitale signalen. Een ADC kan op een Raspberry Pi worden aangesloten, zodat deze analoge signalen van bronnen zoals sensoren en omgevingsvariabelen kan lezen.

Vraag 2. Wat zijn de belangrijkste voordelen van het gebruik van een ADC-converter met Raspberry Pi?

  • Breid de meetmogelijkheden uit: Hiermee kunt u analoge signalen gebruiken, zoals licht, temperatuur, geluid en meer.
  • Hogere nauwkeurigheid: Het omzetten van analoge signalen naar digitaal zorgt voor een grotere nauwkeurigheid bij de metingen.
  • Ondersteuning van een verscheidenheid aan apparaten: Het kan worden gebruikt met een breed scala aan elektronische apparaten en Raspberry Pi-projecten.

Q3. Hoe sluit ik een ADC-converter aan op een Raspberry Pi?

De ADC-converter kan via de GPIO-interface met de juiste kabels en connectoren op de Raspberry Pi worden aangesloten. U moet voorzichtig zijn en de communicatiegids volgen die bij de ADC-converter is geleverd.

Q4. Kan ik de ADC-converter gebruiken met alle versies van Raspberry Pi?

Ja, de ADC kan worden gebruikt met de meeste versies van Raspberry Pi. Mogelijk moet u echter overwegen om de adapter aan te sluiten op de juiste GPIO-poort voor uw specifieke hardwareversie.

Vraag 5. Is voor het gebruik van een ADC-converter programmeerervaring vereist?

Het hangt af van de omvang van het project. In eenvoudige gevallen kunnen kant-en-klare bibliotheken worden gebruikt. Voor sommige projecten kunnen echter programmeervaardigheden nodig zijn om de gegevens effectief te kunnen gebruiken.

We gaan verder met verschillende mogelijke volgende stappen

Metingen doen via I2C is heel eenvoudig en vrijwel hetzelfde geldt voor andere methoden, zoals SPI. Hoewel het lijkt alsof er aanzienlijke verschillen zijn tussen de beschikbare ADC-opties, is de waarheid dat als je er eenmaal één hebt draaien, het gemakkelijk is om de kennis op de andere toe te passen.

Dus waarom gaan we niet verder? Sluit meerdere potentiometers met elkaar aan, of probeer licht, geluid of temperatuur af te lezen. Breid de controller uit die je zojuist hebt gemaakt en creëer een Raspberry Pi-opstelling die echt functioneel is! Je kunt nu bekijken Potentiële uitdagingen bij het zelf hosten van uw Raspberry Pi-projecten.

Scroll naar boven