Raspberry Pi Pico als weerstandsmeter

Raspberry Pi Pico als weerstandsmeter met behulp van de A-Vision Experiment assist

Het principe

Een waarde van een weerstand kan op verschillende manieren worden berekend. Volgens de wet van Ohm (I = V/R) wordt de waarde van een weerstand berekend als R = V/I.

Om de waarde van een weerstand te meten, hebben we een constante voeding (V) en een nauwkeurige referentieweerstand nodig.

Met behulp van het volgende schema kunnen we de weerstandswaarde berekenen.

Het gebruik van een referentiespanning van 3,3 Volt geeft een constante stroom (I) door de weerstanden. Deze stroom kan worden berekend door de 'meetspanning' te meten, zodat we de spanningsval over de bekende referentieweerstand weten.

Hierbij wordt ervan uitgegaan dat de stroom die door het meetcircuit wordt getrokken bijna niets bedraagt.

Dan kan de onbekende weerstandswaarde nu als volgt worden berekend:

calculate current

calculate unkown resistor

De waarde I vervangen door de berekende stroom formule.

substitute current

Door dit verder te vereenvoudigen krijgen we de volgende formule om de onbekende weerstand te berekenen.

final formula

De Raspberry Pi Pico aansluiten

Het volgende schema toont de verbinding met een Raspberry Pi Pico

In dit schema hebben we enkele extra's toegevoegd voor betere prestaties en nauwkeurigheid.

Er wordt geen aparte powersupply gebruikt, alle benodigde stroom komt van de USB aangesloten op de computer.

Software installeren op de Pico

Ten eerste is een STOP-knop toegevoegd om een eenvoudigere installatie van software op de Raspberry Pi Pico mogelijk te maken.
Hoe dit werkt is als volgt.

  1. Als u op de STOP-toets drukt, worden de programma('s) op de Pico gestopt.
  2. Druk tijdens het indrukken van de STOP-knop ook op de BOOTSEL-knop op de Pico.
  3. Laat vervolgens de STOP-knop los, hiermee wordt de Pico in een USB-schijfmodus opgestart.
  4. Nu kunt u de software naar het Pico USB-schijf kopiëren, dit zal de Pico automatisch resetten.

Schakelen tussen referentieweerstanden

Om de meetnauwkeurigheid te verbeteren, zijn twee P-Channel MOSFET's toegevoegd die het mogelijk maken om tussen twee referentieweerstanden te schakelen. Eén van 10kOhm voor het meten van weerstanden tot ongeveer 15kOhm, en één van 100kOhm voor het meten van weerstanden groter dan 15kOhm.

De omschakeling is gebaseerd op de gemeten spanning, wanneer deze meer dan 2,1 V bereikt, schakelt deze over naar de 100kOhm referentieweerstand en wanneer deze onder 0,4V zakt, schakelt het over naar de 10kOhm.

Dit resulteert in een nauwkeuriger meetresultaat.

Monitoring van het resultaat

De software stuurt de resultaten via de seriële interface (GPIO0 als TxD en GPIO1 als RxD).

De Txd (GPIO0) wordt aangesloten op de RxD op de USB naar SERIAL connector op de Experiment assist board, en de RxD (GPIO1) wordt aangesloten op de TxD op de USB naar SERIAL connector op de Experiment assist board.

Ook moet de GND van de USB naar SERIAL connector op de Experiment assist board worden aangesloten op de GND van de Raspberry Pi Pico.

Verbetering van de nauwkeurigheid

Boven een spanningsmeting van 2,1V en lager dan 0,4V wordt de nauwkeurigheid minder. Dit kan worden verbeterd door extra referentieweerstanden en automatisch schakelen toe te voegen op basis van deze gemeten waarden.

Met behulp van het bovenstaande schema zijn de metingen het meest nauwkeurig tussen 1,5kOhm en 150kOhm.

Gebruikte softwaretools

Windows 10 Raspberry Pi Pico C++ ontwikkeling

Om de Raspberry Pi Pico C++ ontwikkelomgeving op een Windows 10 systeem te installeren hebben wij gebruik gemaakt van de procedure zoals beschreven op-

https://notenoughtech.com/featured/c-c-and-micropython-sdk-for-raspberry-pi-pico-on-windows/

USB naar SERIAL uitlezen

Voor het monitoren van de resultaten via de USB naar SERIAL op de Experiment assist board, hebben we Mputty gebruikt, dit kan worden gedownload van-

https://ttyplus.com/downloads/

De volgende configuratie wordt gebruikt:

Drivers voor de USB naar SERIAL op het Experiment assist board worden geleverd bij het Experiment assist board zelf.

Overzicht Raspberry Pi Pico weerstandmeter op een Experiment assist board

Overzicht Raspberry Pi Pico weerstandmeter op een Experiment assist board

Het gebruik van het Experiment assist board samen met 400-pins breadboard maakt experimenteren hiermee heel eenvoudig.

De monitor is aangesloten op het ingebouwde USB naar SERIAL circuit, dit voorkomt dat u opnieuw verbinding moet maken met de USB-poort telkens wanneer de Pico in de USB-schijfmodus wordt gezet.

De code

De code is niet echt zo complex, het is in feite het lezen van de gemiddelde meetspanning en vervolgens het toepassen van de formule op de meting.

In pseudocode is het als volgt-

> Initialisatie. 
> Herhaal voor altijd:
  1. Meet de gemiddelde spanning over XX-monsters.
  2. Selecteer referentieweerstand op basis van gemeten spanningswaarde.
  3. Formule toepassen om onbekende weerstandswaarde te berekenen.
  4. Uitvoer metingen via UART.

De volledige C-code is online beschikbaar op https://github.com/A-Vision-Software/raspberry-pi-project-examples/tree/main/resistormeter

 


MAX7219 8x8 dot-matrix analoge klok

MAX7219 8x8 dot-matrix, licht gevoelige, analoge klok

MAX7219 8x8 analoge klokVoor dit project gaan we een MAX7219 8×8 dot-matrix display aansturen (analoge klok). De intensiteit gaan we aansturen aan de hand van een lichtmeting.

We maken het aansturingsprogramma met Python 3.


Installatie

Je hebt nodig-

Voordat je begint even dit-

De hardware aansturing van de MAX7129 maakt gebruik van de SPI interface, en de aansturing van de ADS1015 gebruikt de I²C interface.
Om deze te kunnen gebruiken moeten ze worden aangezet op de Raspberry Pi. Dit kan worden gedaan met het raspi-config programma op de Raspberry Pi.
We zullen ook SSH aanzetten op de Raspberry Pi om via Windows de Raspberry Pi te kunnen benaderen/programmeren.

Verder wordt in deze uitleg gebruik gemaakt van het Windows programma Thonny voor het programmeren met Python.

MAX7219 8×8 dot-matrix display

Voor het aansturen van de MAX7219 8×8 dot-matrix display maken we gebruik van de LUMA Display drivers voor MAX7219.
Het is belangrijk deze te installeren en te testen alvorens dit project verder te programmeren.

Voor de installatie wordt verwezen naar. – https://luma-led-matrix.readthedocs.io/en/latest/install.html
Na installatie wordt aangeraden om met behulp van het test programma examples/matrix_demo.py te controleren of het goed functioneert.

ADS1015 analoog naar digitaal omzetter

Voor het uitlezen van de ADS1015 wordt gebruik gemaakt van de Python Package adafruit-ads1x15. Deze is eenvoudig te installeren door de instructies te volgen op. – https://learn.adafruit.com/raspberry-pi-analog-to-digital-converters/ads1015-slash-ads1115#python-package-index-install-2002658-11
Ook hiervoor wordt aangeraden met het testprogramma examples/simpletest.py te controleren of het goed functioneert.


De MAX7219 analoge klok

Vanzelfsprekend is het een uitdagin om een analoge klok te presenteren op een 8×8 dot-matrix display. En omdat een 8×8 display geen centrum punt heeft hebben we gekozen voor een 7×7 presentatie.

Uitgaande van positie 0,0 voor de LED links-onder hebben we een centrum punt op positie 4,4. Vanuit daar wordt er een korte lijn gemaakt voor de uren presentatie. En een lange lijn voor de minuten presentatie.

Omdat we niet elke minuut kunnen weergeven is ervoor gekozen alleen de 0,5,10,15,20 … 55 minuten weergave te tonen.

MAX7219 clock center
Centrum punt van de klok

MAX7219 clock 5.00h
Klok 5.00 uur

MAX7219 clock 6.55h + second
Klok 6.55 uur met seconde LED

 

 

 

 

 

 

 

 

 

 

Voor elke wijzer positie (0 t/m 12) maken we een subroutine in Python voor het weergeven van de korte en lange lijn (voorbeeld hieronder).

def eleven(draw,small=False):
    if small:
        draw.line((4, 4, 6, 3), fill="white")
    else:
        draw.line((4, 4, 7, 2), fill="white")

We maken ook een subroutine om voor elk getal (0 t/m 12) de juiste subroutine aan te roepen.

def number(draw, n=0, small=False):
    if n == 0:
        zero(draw,small)
    if n == 1:
        one(draw,small)
    if n == 2:
        two(draw,small)
    if n == 3:
        three(draw,small)
    if n == 4:
        four(draw,small)
    if n == 5:
        five(draw,small)
    if n == 6:
        six(draw,small)
    if n == 7:
        seven(draw,small)
    if n == 8:
        eight(draw,small)
    if n == 9:
        nine(draw,small)
    if n == 10:
        ten(draw,small)
    if n == 11:
        eleven(draw,small)
    if n == 12:
        twelve(draw,small)

Nu we dat voor elkaar hebben kunnen we aan de hand van de tijd de juiste wijzers (lijnen) aansturen. Hiervoor zijn twee subroutines gemaakt, één voor de grote wijzer en één voor de kleine wijzer.

def big_hand(draw):
    now = datetime.datetime.now()
    h = now.hour
    m = now.minute
    s = now.second 
    number(draw, round(m/5))
    if (s % 2) == 0:
        draw.point((0, 0), fill="black")
    if (s % 2) == 1:
        draw.point((0, 0), fill="white")

def small_hand(draw):
    now = datetime.datetime.now()
    h = now.hour
    m = now.minute
    s = now.second 
    if h >= 12:
        h = h - 12
    number(draw, round(h + m/60), True)

We verwerken deze code wordt daarna allemaal in de hoofdroutine (zie volledige code).

Meten van hoeveelheid licht.

ADS1015 LDR

De licht hoeveelheid wordt gelezen met een LDR (licht gevoelige weerstand). Deze wordt daarvoor aangesloten op een analoge ingang module (ADS1015).

We sluiten de LDR aan tussen de GND en de analoge ingang AD0. En de 100Kohm weerstand sluiten we aan tussen de analoge ingang AD0 en de +5V. Hierdoor krijgt de analoge ingang een spanning afhankelijk van de lichtinval op de LDR.
Hoe meer licht op de LDR, hoe minder de spanning op de analoge ingang.

Zie aansluitschema rechts.

Voor het uitlezen van de lichtwaarde en aansturen van de LED display intensiteit wordt een aparte subroutine gemaakt.

def brightness():
    light = adc.read_adc(0, gain=1)
    if light >= 512:
        light = 512
    b = (16 - round(light/16))*16
    if b >= 256:
        b = 255
    if b < 0:
        b = 0
    device.contrast(b)

Deze subroutine nemen we ook in de hoofdroutine op. Daardoor wordt iedere keer de LED display intensiteit aangepast.

Het mooie van de gebruikte adafruit-ads1x15 Python Package is dat we niet zelf I²C routines hoeven te programmeren. Dat maakt het implementeren weer een stukje eenvoudiger.

De volledige code voor de MAX7219 analoge klok kun je downloaden vanf GitHub.

 

MAX7219 analoge klok experimenteer set CL001

We hebben een experimenteer set beschikbaar gemaakt zodat je direct kunt beginnen met het maken van dit project.

Het experimenteer set CL001 kun je vinden in onze webshop.


12-24V Raspberry Pi interface (Versie 1.0)

Raspberry Pi 12-24V interface HAT manual

Preparations

This Raspberry Pi interface HAT is using several GPIO pins and an I²C device with a fixed address.

To ensure that this device will work for your system, make sure that these do not clash with GPIO and I²C devices that are already in use.

Used GPIO pins

PurposeDirectionGPIO header pin no.BCM GPIO no.WiringPi no.
Digital outputsOUTPUT7,29,31,36,11,124-6, 16-187,21,22,27,0,1
Digital inputsINPUT15,16,18,22,37,1322-273,4,5,6,25,2
Analog convert alertINPUT26711

Used I²C addresses

PurposeAddressDevice
4x Analog input0x48ADS1115

Installation

The Raspberry Pi 12-24V interface HAT is equipped with a 40p header, which means that you can place this on top of your Raspberry Pi.

After having added the interface HAT you can enable the ADS1115 analog inputs in the config file (/boot/config.txt) by adding the following under the [all] section

dtoverlay=ads1115
dtparam=cha_enable
dtparam=chb_enable
dtparam=chc_enable
dtparam=chd_enable

For more information refer to https://github.com/raspberrypi/linux/blob/rpi-4.9.y/arch/arm/boot/dts/overlays/README#L210

Make sure you have enabled the I2C interface on your Raspberry using raspi-config (see https://www.raspberrypi.org/documentation/configuration/raspi-config.md for more information).

After a reboot, you will find the device file entries in the folder /sys/bus/i2c/devices under a newly created folder for the ADS1115 device. For example, a folder named 1-0048 in which you will find a file called ‘name’. Check the contents of this file (using cat name) to make sure it is related to the ADS1115.

Drivers

No specific drivers are required for this HAT as uses the standard GPIO pins.

When not using the ADS1115 as described above, please use either standard python libraries to read the analog inputs or standard I²C drivers.