1.15 NPN Transistor Switch ============================== Now let's explore transistors - the fundamental building blocks of all digital electronics! A transistor acts like an **electronic switch** that can be controlled by a small signal to switch much larger currents. We're using an **S8050 NPN transistor**. Think of it as a water valve: a small control signal at the "base" can turn on/off a much larger current flow between "collector" and "emitter". This lets our tiny Pico control bigger devices like motors, lights, or fans! Component List ^^^^^^^^^^^^^^^ - Raspberry Pi Pico W x1 - MicroUSB cable x1 - 830 Tie-Points Breadboard x1 - Jumper Wire Several - Resistor 220Ω, 1KΩ, 10KΩ x1 - LED x1 - Transistor S8050 x1 Component knowledge ^^^^^^^^^^^^^^^^^^^^ :ref:`Transistor ` """"""""""""""""""""""""""""""""""" How our transistor switch works: **Control Logic:** - Button pressed → GP14 reads HIGH → GP15 outputs HIGH → Transistor turns ON → LED lights up - Button released → GP14 reads LOW → GP15 outputs LOW → Transistor turns OFF → LED goes dark **Why use a transistor?** Instead of connecting the LED directly to the Pico, the transistor acts as a "relay" that can handle higher currents safely, protecting our microcontroller. Connect ^^^^^^^^^ .. image:: img/3.connect/1.15.png Code ^^^^^^^ .. note:: * Open the ``1.15_npn_transistor_switch.py`` file under the path of ``Ultimate-Starter-Kit-for-Pico-W\Python\1.Project`` or copy this code into Thonny, then click "Run Current Script" or simply press F5 to run it. * Don't forget to click on the "MicroPython (Raspberry Pi Pico)" interpreter in the bottom right corner. .. 1.15.png After running the code, press the button to toggle the LED on and off. The serial monitor shows detailed transistor switching status, including press counts and whether the "high current device" (LED) is active or inactive. Perfect for learning transistor switching principles! The following is the program code: .. code-block:: python """ Transistor Switch Control Uses a button to control a transistor switch that can drive higher current devices like motors or lights. """ import machine import utime # Pin definitions BUTTON_PIN = 14 # button input pin TRANSISTOR_PIN = 15 # transistor control pin CHECK_DELAY = 50 # button check interval in milliseconds # Variables for button state tracking button_pressed = False last_button_state = False device_on = False press_count = 0 # Initialize pins button = machine.Pin(BUTTON_PIN, machine.Pin.IN) transistor = machine.Pin(TRANSISTOR_PIN, machine.Pin.OUT) def setup(): """Initialize the system""" global device_on print("=== Transistor Switch Control ===") print("Press button to toggle device ON/OFF") print("Transistor acts as electronic switch") print() # Ensure device starts OFF transistor.value(0) device_on = False print("Device: OFF (Ready)") print() def handle_button_control(): """Handle button press and transistor control""" global button_pressed, last_button_state, device_on, press_count # Read current button state button_pressed = bool(button.value()) # Detect button press (transition from LOW to HIGH) if button_pressed and not last_button_state: # Toggle device state device_on = not device_on press_count += 1 # Control transistor switch transistor.value(1 if device_on else 0) # Display status print(f"Button pressed (#{press_count}) - Device: {'ON' if device_on else 'OFF'}") if device_on: print("Transistor conducting - High current device active") else: print("Transistor off - High current device inactive") print() # Update last button state for next comparison last_button_state = button_pressed def main(): """Main function""" setup() try: while True: # Check button and control transistor handle_button_control() # Small delay for stable operation utime.sleep_ms(CHECK_DELAY) except KeyboardInterrupt: print("\nTransistor control stopped.") print(f"Total button presses: {press_count}") # Turn off device safely transistor.value(0) print("Device turned OFF - System safe.") if __name__ == "__main__": main() Phenomenon ^^^^^^^^^^^ .. video:: img/5.phenomenon/1.15.mp4 :width: 100%