Authorized Online Retailers:

Buy from USA Buy from UK Buy from DE Buy from IT Buy from FR Buy from ES Buy from JP

We have learned ADC analog input and PWM analog output concept in Lesson 3. This time, we use some new analog input device and PWM output device.

In this lesson, we will show you how to read analog signal from a potentiometer(adjustable resistor) through a Pico ADC pin(GP28) . We will also connect a Servo motor to GP16 which can generate PWM signal. The servo will rotate its arm when you rotate potentiometer.

  1. Raspberry Pi Pico board and microUSB cable
  2. A computer to run Thonny Python IDE
  3. Breadboard x 1
  4. Potentiometer x 1
  5. Servo motor x 1

In above circuit graph, you can see that:
Servo red wire connected to Pico Vbus pin(5V)
Servo brown wire connected to Pico GND
Servo yellow wire   connected to Pico PWM pin(GP16)
Potentiometer GND connected to Pico GND
Potentiometer VCC connected to Pico 3.3V
Potentiometer  middle pin connected to Pico ADC pin(GP28)

You can download lesson 5 python code from https://osoyoo.com/driver/pico/lesson5/pico-lesson5.py

You can use Thonny to open pico-lesson5.py and load it to Pico later.
Here is the full code with comments:

from machine import Pin, PWM,ADC #import libraries for Pin, PWM, ADC
from time import sleep

adc = ADC(Pin(28))      #set Potentiometer analog input from GP28 pin
    
servoPin = PWM(Pin(16)) #set servo pwm output to GP16 pin
servoPin.freq(50)       #set servo frequency 50

def servo(degrees):     #rotate servo arm to degrees position
    # limit degrees beteen 0 and 180
    if degrees > 180: degrees=180
    if degrees < 0: degrees=0
    # set max and min duty
    maxDuty=9000
    minDuty=1000
    # new duty is between min and max duty in proportion to its value
    newDuty=minDuty+(maxDuty-minDuty)*(degrees/180)
    # servo PWM value is set
    servoPin.duty_u16(int(newDuty))

while True:
  value=adc.read_u16()   #read Potentiometer value
  print(value)
  degree=value*180/65500 #convert Potentiometer value to a servo position angle
  servo(degree).         #rotate servo to that angle     
  sleep(0.001)

Step 1: Connect Pico board to one of USB ports in your PC
Step 2: If you haven't installed Thonny Software or don't know how to use Thonny IDE, please read lesson 1

Step 3: Now open the Thonny Python IDE, click Run to select MicroPython for Rapsberry Pi Pico as Interpreter :

Also please select the COM port which your Pico board is connected :

After that, click OK to save the setting.

Step 4: Now copy the python code to Thonny window as following:

Step 5: Click the little ► button  ,the save page will pop up as following photo ;

select Raspberry Pi Pico as destination.

Step 7:Name the file as pico-lesson5.py, then click OK

Step 8: Click the little ► button again to run the Python code.

Now you can rotate the Potentiometer, you will see the servo arm will rotate accordingly.

Learn More about parts SKU:2021005900

No. Picture Product Name Link
1 Raspberry Pi Pico Board https://osoyoo.store/products/raspberry-pi-pico-flexible-microcontroller-board-based-on-the-raspberry-pi-rp2040-dual-core-arm-cortex-m0-processor-1-pc?variant=39875307864175
2 Servo motor https://osoyoo.store/products/micro-servo-sg90-blue-for-arduino-v2-0-robot-carmodel-lacc200610?variant=31648847560815
3 Infrared Sensor Module https://osoyoo.store/products/hc-sr501-pir-motion-sensor-for-arduino?variant=31957812838511
4 RFID Module and card https://osoyoo.store/products/osoyoo-rfid-module?variant=31970646130799
5 Push Buttons and Hats https://osoyoo.store/products/push-button-and-hats-5pcs?variant=39879253131375
6 LED(6 x White, 6 x Red, 6 x Yellow, 6x Green) https://osoyoo.store/products/led-packs-for-arduino?variant=31957816442991
7 Servo motor https://osoyoo.store/products/sg90-micro-servo-for-arduino-raspberry-pi-robot?variant=31957821096047
8 Piezo Buzzer Module https://osoyoo.store/products/piezo-buzzer-module-1pcs?variant=39879251656815
9 I2C LCD Display(16×2) https://osoyoo.store/products/i2c-lcd1602-display?variant=39875437101167
10 Philips Screwdriver https://osoyoo.store/products/phillips-screwdriver?variant=31930635780207https://osoyoo.store/products/single-channel-relay-module-for-arduino-raspberry-pi?variant=31955954401391
11 Solderless Prototype Breadboard https://osoyoo.store/products/solderless-prototype-breadboard-1pcs?variant=39879255457903
12 Potentionmeter (10K adjustable resistor) https://osoyoo.store/products/potentionmeter-10k-adjustable-resistor-3pcs?variant=39879281016943
13 40Pin M to M Jumper Wires https://osoyoo.store/products/40pin-m-to-m-jumper-wires?variant=39879256539247
14 20Pin M to F Jumper wires 15cm https://osoyoo.store/products/20pin-15cm-female-to-female-cable?variant=31930663305327