CircuitPython Microcontroller Wiring
Wiring the DS3502 to communicate with your microcontroller is straightforward thanks to the I2C interface. For these examples, we can use a Metro or a Feather to measure the voltage changes as the DS3502 adjusts its resistance. The instructions below reference a Feather, but the same applies to a Metro.
- Connect the Feather 3.3V to Vcc on the DS3502
- Connect GND on the Feather to GND on the DS3502
- Connect the SCL pins on the Feather and DS3502
- Connect the SDA pins on the Feather and DS3502
- Connect RL to GND
- Connect RH to Feather 3.3V
- Connect RW to the A0 pin on the Feather, to allow us to measure the voltage
Using a STEMMA QT cable makes it super easy. Pick a cable length and plug one into a STEMMA QT capable controller and the other end into the DS3502.
Python Computer Wiring
Since there's dozens of Linux computers/boards you can use we will show wiring for Raspberry Pi. For other platforms, please visit the guide for CircuitPython on Linux to see whether your platform is supported.
Here's the Raspberry Pi wired with I2C:
- Pi 3V3 to sensor VIN
- Pi GND to sensor GND
- Pi SCL to sensor SCL
- Pi SDA to sensor SDA
- Pi GND to sensor RL
- Pi 3V3 to sensor RH
- Multimeter Positive Lead to sensor RW
- Multimeter Negative Lead to sensor GND
Note that because the Raspberry Pi does not include any pins with analog to digital converters (ADCs) to read the voltage that will change on the DS3502's RW pin, you will need to use a multimeter to measure the voltage between the RW pin and GND.
CircuitPython Installation of DS3502 Library
You'll need to install the Adafruit CircuitPython DS3502 library on your CircuitPython board.
First make sure you are running the latest version of Adafruit CircuitPython for your board.
Next you'll need to install the necessary libraries to use the hardware--carefully follow the steps to find and install these libraries from Adafruit's CircuitPython library bundle. Our CircuitPython starter guide has a great page on how to install the library bundle.
For non-express boards like the Trinket M0 or Gemma M0, you'll need to manually install the necessary libraries from the bundle:
- adafruit_ds3502.mpy
- adafruit_bus_device
- adafruit_register
Before continuing make sure your board's lib folder or root filesystem has the adafruit_ds3502.mpy, adafruit_bus_device, and adafruit_register files and folders copied over.
Next connect to the board's serial REPL so you are at the CircuitPython >>> prompt.
Python Installation of DS3502 Library
You'll need to install the Adafruit_Blinka library that provides the CircuitPython support in Python. This may also require enabling I2C on your platform and verifying you are running Python 3. Since each platform is a little different, and Linux changes often, please visit the CircuitPython on Linux guide to get your computer ready!
Once that's done, from your command line run the following command:
-
sudo pip3 install adafruit-circuitpython-ds3502
If your default Python is version 3 you may need to run 'pip' instead. Just make sure you aren't trying to use CircuitPython on Python 2.x, it isn't supported!
To demonstrate the usage of the potentiometer we'll initialize it and set the wiper value to change the voltage on the WH pin. We will then use the A0 pin to take an analog reading of the voltage on the WH pin.
Run the following code to import the necessary modules and initialize the I2C connection with the potentiometer:
from time import sleep import board import adafruit_ds3502 from analogio import AnalogIn i2c = board.I2C() ds3502 = adafruit_ds3502.DS3502(i2c) wiper_output = AnalogIn(board.A0)
With the driver initialized, we can the set the wiper value, take an ADC reading to measure the voltage, and then convert the raw ADC value to a human-readable value
ds3502.wiper = 127 print("Wiper set to %d"%ds3502.wiper) voltage = wiper_output.value voltage *= 3.3 voltage /= 65535 print("Wiper voltage: %.2f V"%voltage)
We can then change the wiper value and take another reading to see how the resulting voltage on the RW pin has changed
ds3502.wiper = 63 print("Wiper set to %d"%ds3502.wiper) voltage = wiper_output.value voltage *= 3.3 voltage /= 65535 print("Wiper voltage: %.2f V"%voltage)
# SPDX-FileCopyrightText: 2021 ladyada for Adafruit Industries # SPDX-License-Identifier: MIT from time import sleep import board from analogio import AnalogIn import adafruit_ds3502 ####### NOTE ################ # this example will not work with Blinka/rasberry Pi due to the lack of analog pins. # Blinka and Raspberry Pi users should run the "ds3502_blinka_simpletest.py" example i2c = board.I2C() # uses board.SCL and board.SDA # i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller ds3502 = adafruit_ds3502.DS3502(i2c) wiper_output = AnalogIn(board.A0) while True: ds3502.wiper = 127 print("Wiper set to %d" % ds3502.wiper) voltage = wiper_output.value voltage *= 3.3 voltage /= 65535 print("Wiper voltage: %.2f V" % voltage) print("") sleep(1.0) ds3502.wiper = 0 print("Wiper set to %d" % ds3502.wiper) voltage = wiper_output.value voltage *= 3.3 voltage /= 65535 print("Wiper voltage: %.2f V" % voltage) print("") sleep(1.0) ds3502.wiper = 63 print("Wiper set to %d" % ds3502.wiper) voltage = wiper_output.value voltage *= 3.3 voltage /= 65535 print("Wiper voltage: %.2f V" % voltage) print("") sleep(1.0)
Because the Raspberry Pi and many other similar devices do not include the hardware for measuring analog voltages, you will have to use a multimeter to measure the voltage on the RW pin.
To start, similar to above we will import the needed modules and initialize the driver
from time import sleep import board import adafruit_ds3502 i2c = board.I2C() ds3502 = adafruit_ds3502.DS3502(i2c)
Once the driver has been initialized, we can use it to set the value of the wiper
ds3502.wiper = 127
You can then use your multimeter or other voltage measuring device to check the voltage across GND and RW. It should be the same as the voltage on the RH pin which will be the voltage level of your device, most likely 3.3V
Next, change the wiper value again and measure the voltage on the RW pin
ds3502.wiper = 63
The voltage on the RW pin should be approximately half of the voltage at the RH pin, likely around 1.6V
# SPDX-FileCopyrightText: 2021 ladyada for Adafruit Industries # SPDX-License-Identifier: MIT from time import sleep import board import adafruit_ds3502 i2c = board.I2C() # uses board.SCL and board.SDA # i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller ds3502 = adafruit_ds3502.DS3502(i2c) # As this code runs, measure the voltage between ground and the RW (wiper) pin # with a multimeter. You should see the voltage change with each print statement. while True: ds3502.wiper = 127 print("Wiper value set to 127") sleep(5.0) ds3502.wiper = 0 print("Wiper value set to 0") sleep(5.0) ds3502.wiper = 63 print("Wiper value set to 63") sleep(5.0)
Text editor powered by tinymce.