Actions

KAmodRPi Pico Prototyping Platform (PL): Difference between revisions

From Kamamilabs.com - Wiki

Line 132: Line 132:
*Skrypt wykorzystuje standardowe biblioteki MicroPythona (<code>machine, neopixel</code>)<br><br>
*Skrypt wykorzystuje standardowe biblioteki MicroPythona (<code>machine, neopixel</code>)<br><br>
'''Działanie programu:'''<br>
'''Działanie programu:'''<br>
; 1. Sekwencja startowa (Self-test):
; 1. Sekwencja startowa:
: • Po uruchomieniu i inicjalizacji portu szeregowego, program wykonuje charakterystyczną sekwencję dźwiękową za pomocą buzzera, sygnalizując gotowość do pracy.
: • Po uruchomieniu i inicjalizacji portu szeregowego, program wykonuje charakterystyczną sekwencję dźwiękową za pomocą buzzera, sygnalizując gotowość do pracy.
; 2. Inteligentne sterowanie diodami LED (Sekcja Cyfrowa):
; 2. Inteligentne sterowanie diodami LED (Sekcja Cyfrowa):
Line 145: Line 145:
:• Program wysyła powitanie ''KAmodRPi Pico Prototyping Platform'' na port szeregowy (115200 bps) przy każdym restarcie, ułatwiając weryfikację połączenia z komputerem.
:• Program wysyła powitanie ''KAmodRPi Pico Prototyping Platform'' na port szeregowy (115200 bps) przy każdym restarcie, ułatwiając weryfikację połączenia z komputerem.
; 5. Mapowanie pinów w programie:
; 5. Mapowanie pinów w programie:
:• Diody LED: '''LED1-LED4 ▶ GP6, GP7, GP8, GP9'''
<center>
:Przyciski: '''SW1-SW4 GP10, GP11, GP12, GP13''' (z podciąganiem PULLUP)
{| class="wikitable"  style="width: 1000px;"
:• Fotorezystor: '''LIGHT ▶ GP27 (ADC1)'''
|-
:Buzzer: '''BUZZER ▶ GP15'''
! style="text-align: center;"|Komponent
:Potencjometr: '''POT ▶ GP26 (ADC0)'''
! style="text-align: center;"|Typ sygnału
:• Diody WS2812: '''WS2812 ▶ GP14'''
! style="text-align: center;"|GPIO
|-
| style="text-align: center;"|<b>Przyciski (SW1-SW4)</b>
| style="text-align: center;"| Digital (PULL_UP)
| style="text-align: left;"| GP10, GP11, GP12, GP13
|-
| style="text-align: center;"|<b>Diody (LED1-LED4)</b>
| style="text-align: center;"| Digital (High = ON)
| style="text-align: left;"| GP6, GP7, GP8, GP9
|-
| style="text-align: center;"|<b>WS2812 (RGB)</b>
| style="text-align: center;"| One-Wire (Serial)
| style="text-align: left;"|GP14
|-
| style="text-align: center;"|<b>Buzzer</b>
| style="text-align: center;"| PWM
| style="text-align: left;"| GP15
|-
| style="text-align: center;"|<b>Potencjometr (POT)</b>
| style="text-align: center;"| Analog (ADC)
| style="text-align: left;"| GP26
|-
| style="text-align: center;"|<b>Fotorezystor (LIGHT)</b>
| style="text-align: center;"| Analog (ADC)
| style="text-align: left;"| GP27
|-
| style="text-align: center;"|<b>I²C (Qwire)</b>
| style="text-align: center;"| I²C
| style="text-align: left;"| GP4 (SDA), GP5 (SCL)
|}
</center>
 


<center>
<center>

Revision as of 12:30, 6 February 2026

Opis

KAmodRPi Pico Prototyping Platform - Uniwersalny System Prototypowy dla Raspberry Pi Pico

KAmodRPi Pico Prototyping Platform to wielofunkcyjna płyta rozszerzeń dla modułów z serii Raspberry Pi Pico, zaprojektowana w celu usprawnienia procesów prototypowania. Urządzenie integruje najczęściej używane komponenty elektroniczne z polem stykowym, tworząc uporządkowane środowisko pracy. Dzięki wyprowadzonym złączom GPIO i wbudowanym peryferiom, użytkownik może błyskawicznie budować i testować układy bez konieczności każdorazowego przygotowywania podstawowych elementów wejścia/wyjścia.


Podstawowe parametry
  • Standardowe złącze żeńskie 2×20 pinów dla Raspberry Pi Pico, Pico W, Pico 2 (i inne pinowo zgodne z RP2040/RP2350)
  • 20-pinowe złącza męskie z wyprowadzonymi wszystkimi sygnałami RPi Pico (raster 2,54 mm)
  • Złącze I2C Qwire typu JST SH 4-pin 1 mm (kompatybilne z Qwiic / STEMMA QT)
  • Prototypowa płytka stykowa 400 punktów
  • 4 czerwone diody LED
  • 8 adresowalnych diod LED WS2812
  • 4 przyciski monostabilne
  • Wbudowany potencjometr oraz fotorezystor do testów ADC
  • Zintegrowany przetwornik piezoelektryczny do sygnalizacji dżwiękowej
  • Diody LED dla każdej linii zasilającej (3.3V, 5V, VBUS)
  • Wbudowany przycisk RESET połączony z pinem RUN mikrokontrolera
  • Napięcie zasilania: 5V (z portu USB Raspberry Pi Pico).
  • Wymiary: 85 × 140 mm


  • Obsługa mikrokontrolerów:
    • Standardowe złącze żeńskie 2×20 pinów dla Raspberry Pi Pico, Pico W, Pico 2 oraz innych modułów pinowo zgodnych z układami RP2040/RP2350.
  • Wyprowadzenia sygnałów:
    • 20-pinowe złącza męskie (goldpin) z wyprowadzonymi wszystkimi sygnałami RPi Pico (raster 2,54 mm).
  • Ekosystem I2C:
    • Złącze I2C Qwire typu JST SH 4-pin 1 mm (kompatybilne ze standardem Qwiic oraz STEMMA QT).
  • Przestrzeń prototypowa:
    • Wysokiej jakości płytka stykowa (400 punktów połączeniowych).
  • Sygnalizacja wizualna:
    • 4 czerwone diody LED.
    • 8 adresowalnych diod RGB WS2812 (standard Neopixel).
    • Dedykowane diody LED dla każdej linii zasilającej (3.3V, 5V, VBUS).
  • Interfejs użytkownika:
    • 4 przyciski monostabilne.
    • Wbudowany przycisk RESET połączony bezpośrednio z pinem RUN mikrokontrolera.
  • Sekcja pomiarowa i audio:
    • Wbudowany potencjometr oraz fotorezystor do testów przetwornika ADC.
    • Zintegrowany przetwornik piezoelektryczny do sygnalizacji dźwiękowej.
  • Zasilanie:
    • 5V (pobierane bezpośrednio z portu USB Raspberry Pi Pico).
  • Wymiary płytki: 85 × 140 mm.



Wyposażenie standardowe
Kod Opis
KAmodRPi Pico Prototyping Platform
  • Zmontowany i uruchomiony moduł
  • 6 x gumowa nóżka
Prototypowa płytka stykowa
  • Prototypowa płytka stykowa 400 punktów o wymiarach 82x55x10 mm z taśmą klejącą dwustronną
Przewody połączeniowe
  • Zestaw 40 szt. przewodów połączeniowych żeńsko-żeńskich, w różnych kolorach o długości 17 cm
Symetryczne końcówki złącz 2,54 mm
  • Złącze goldpin 1×40, męsko-męskie, symetryczne idealne do tworzenia połączeń w płytkach stykowych.

Schemat

Sekcja Analogowa (Potencjometr i Fotorezystor)

Płytka posiada dwa zintegrowane źródła sygnałów analogowych, które pozwalają na naukę i testowanie przetworników ADC (Analog-to-Digital Converter).

  • Potencjometr (POT): Pozwala na ręczną regulację napięcia w zakresie od 0 do 3,3V. Idealny do symulowania odczytów z czujników (np. temperatury), regulacji jasności diod lub sterowania serwomechanizmami.
  • Fotorezystor (LIGHT): Zmienia swoją rezystancję w zależności od natężenia oświetlenia padającego na czujnik. Pozwala na tworzenie systemów automatycznego sterowania światłem lub detekcji dnia/nocy.

Uwaga: Sygnały te należy podłączyć do pinów Pico obsługujących funkcję ADC (standardowo GP26 i GP27 oznaczone na płytce symbolem ∿).


Złącze Qwire kompatybilne z Qwiic / STEMMA QT

To nowoczesny standard komunikacyjny, który umożliwia błyskawiczną rozbudowę Twojego zestawu bez użycia lutownicy.

  • Standard: Złącze typu JST SH 4-pin 1mm kompatybilne z ekosystemem Kamod Qwire, SparkFun Qwiic oraz Adafruit STEMMA QT.
  • Komunikacja: Wykorzystuje magistralę I2C (linie SDA-GP4, SCL-GP5) oraz zasilanie 3,3V.
  • Zaleta: Pozwala na łączenie kaskadowe (szeregowe) wielu czujników, wyświetlaczy OLED czy kontrolerów silników za pomocą jednego standardowego przewodu.

Diagnostyka Zasilania (Diody LED 3.3V, 5V, VBUS)

Zestaw został wyposażony w system wizualnej kontroli napięcia, co znacząco ułatwia diagnostykę błędów w połączeniach.

  • PWR: Sygnalizuje obecność napięcia bezpośrednio z portu USB (ok. 5V).
  • 5V: Informuje o zasilaniu na szynie 5V (po bezpieczniku).
  • +3V3: Informuje o zasilaniu na szynie +3V3 (po bezpieczniku).

Wskazówka: Jeśli po podłączeniu Pico dioda +3V3 nie świeci, może to oznaczać zwarcie w budowanym przez Ciebie układzie na płytce stykowej.


Przyciski

Moduł KAmodRPi Pico Prototyping Platform wyposażony został w cztery przyciski monostabilne (SW1 – SW4) typu microswitch, przeznaczone do interakcji z użytkownikiem.

  • Działanie: Przyciski łączą piny GPIO z masą (GND).
  • Programowanie: W kodzie programu należy skonfigurować piny jako wejścia z włączonym wewnętrznym rezystorem podciągającym (Internal Pull-Up). Stan niski (0) oznacza naciśnięcie przycisku, a stan wysoki (1) jego spoczynek.
  • Zastosowanie: Tworzenie interfejsów sterowania, przełączanie trybów pracy lub wyzwalanie zdarzeń.

Diody LED

Wymagają sygnału wysokiego (High), aby się zaświecić


Diody WS2812

Płytka wyposażona jest w pasek ośmiu adresowalnych diod LED WS2812 (standard Neopixel), które pozwalają na wyświetlanie dowolnych kolorów z palety RGB.

  • Działanie: Wszystkie 8 diod sterowanych jest szeregowo za pomocą tylko jednego pinu GPIO. Każda dioda może świecić niezależnie innym kolorem i jasnością.
  • Programowanie: Wymagana jest biblioteka obsługująca protokół jednoprzewodowy (np. Adafruit NeoPixel dla Arduino lub wbudowany moduł neopixel w MicroPythonie).
  • Zastosowanie: Tworzenie efektownych iluminacji, wizualizacja danych z czujników (np. zmiana koloru w zależności od temperatury) lub sygnalizacja statusów systemu.

Przycisk RESET

Dedykowany przycisk RESET to kluczowe udogodnienie, którego brakuje w standardowym module Raspberry Pi Pico.

  • Działanie: Przycisk jest połączony na z pinem RUN mikrokontrolera oraz masą (GND). Jego naciśnięcie powoduje natychmiastowe przerwanie pracy procesora i ponowne uruchomienie programu.
  • Zaleta: Eliminuje konieczność częstego odłączania i podłączania kabla USB w celu zrestartowania układu lub przejścia w tryb wgrywania oprogramowania (w połączeniu z przyciskiem BOOTSEL na module Pico).
  • Bezpieczeństwo: Pozwala na szybkie zatrzymanie pracy urządzenia w przypadku błędnego działania prototypu.

Wymiary

Przykładowy program

Przykładowy program testowy został przygotowany zarówno w środowisku Arduino IDE jak i w MicroPythonie (uproszczona wersja), i służy do kompleksowego przetestowania wszystkich funkcji KAmodRPi Pico Prototyping Platform. Demonstruje on interakcję między czujnikami analogowymi a elementami wykonawczymi (LED, Buzzer, RGB).
Wymagania Arduino:

  • Board Manager: Raspberry Pi Pico/RP2040/RP2350
  • Biblioteki: Adafruit NeoPixel

Wymagania MicroPython:

  • Skrypt wykorzystuje standardowe biblioteki MicroPythona (machine, neopixel)

Działanie programu:

1. Sekwencja startowa
• Po uruchomieniu i inicjalizacji portu szeregowego, program wykonuje charakterystyczną sekwencję dźwiękową za pomocą buzzera, sygnalizując gotowość do pracy.
2. Inteligentne sterowanie diodami LED (Sekcja Cyfrowa)
• Tryb automatyczny: Czerwone diody LED wykonują efekt płynnego "wędrowania" (knight rider). Prędkość animacji jest dynamicznie regulowana przez fotorezystor – im jaśniej, tym szybciej diody zmieniają stan.
• Tryb ręczny: Po naciśnięciu dowolnego z 4 przycisków, animacja zostaje wstrzymana, a diody LED odpowiadają bezpośrednio stanom przycisków.
3. Interaktywny Buzzer
• Każdy z czterech przycisków przypisany jest do innej częstotliwości dźwięku (od 500 Hz do 2000 Hz). Naciśnięcie przycisku generuje sygnał dźwiękowy o unikalnym tonie.
4. Pasek LED RGB (WS2812)
• Program cyklicznie wypełnia pasek 8 diod kolorami: czerwonym, zielonym i niebieskim.
• Szybkość wypełniania paska i zmiany kolorów jest kontrolowana w czasie rzeczywistym za pomocą wbudowanego potencjometru.
5. Monitor Szeregowy
• Program wysyła powitanie KAmodRPi Pico Prototyping Platform na port szeregowy (115200 bps) przy każdym restarcie, ułatwiając weryfikację połączenia z komputerem.
5. Mapowanie pinów w programie
Komponent Typ sygnału GPIO
Przyciski (SW1-SW4) Digital (PULL_UP) GP10, GP11, GP12, GP13
Diody (LED1-LED4) Digital (High = ON) GP6, GP7, GP8, GP9
WS2812 (RGB) One-Wire (Serial) GP14
Buzzer PWM GP15
Potencjometr (POT) Analog (ADC) GP26
Fotorezystor (LIGHT) Analog (ADC) GP27
I²C (Qwire) I²C GP4 (SDA), GP5 (SCL)


Program testowy w Arduino:

//board manager potrzebuje: "Raspberry Pi Pico/RP2040/RP2350" -> https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json
//potrzebna biblioteka: Adafruit NeoPixel

#include <Adafruit_NeoPixel.h>
//#include <Wire.h>

//--------------------------------
#define LED1    6
#define LED2    7
#define LED3    8
#define LED4    9
#define LED_ON      1
#define LED_OFF     0
#define LED_ALL     4
#define LED_DELAY   8

#define SW1     10
#define SW2     11
#define SW3     12
#define SW4     13
#define SW_ON       0
#define SW_OFF      1
#define SW_ALL      4

#define POT_PIN     26
#define LIGHT_PIN   27

#define WS2812_PIN  14
#define NUMPIXELS   8
#define BUZZ_PIN    15

//--------------------------------
int led_sw_man(int delay);
int ws_man(int delay);
void buzz_show(int d);

int buttons;
int adj;
int buzz_time;


Adafruit_NeoPixel pixels(NUMPIXELS, WS2812_PIN, NEO_GRB + NEO_KHZ800);

//--------------------------------
void setup() {
  Serial.begin(115200);
  delay(2000);
  Serial.println("KAmodRPi Pico Prototyping Platform");

  pinMode(LED1, OUTPUT);
  pinMode(LED2, OUTPUT);
  pinMode(LED3, OUTPUT);
  pinMode(LED4, OUTPUT);

  pinMode(SW1, INPUT_PULLUP);
  pinMode(SW2, INPUT_PULLUP);
  pinMode(SW3, INPUT_PULLUP);
  pinMode(SW4, INPUT_PULLUP);

  pinMode(BUZZ_PIN, OUTPUT);

  pixels.begin();           // INITIALIZE NeoPixel strip object (REQUIRED)
  pixels.show();  
  buzz_show(200);
}

//--------------------------------
void loop() {

  adj = analogRead(LIGHT_PIN);
  buttons = led_sw_man(adj/16);

  if (buttons > 0) {
    buzz_time = 10;
    //digitalWrite(BUZZ_PIN, 1);
    if (buttons == 1) tone(BUZZ_PIN, 500);
    if (buttons == 2) tone(BUZZ_PIN, 1000);
    if (buttons == 4) tone(BUZZ_PIN, 1500);
    if (buttons == 8) tone(BUZZ_PIN, 2000);
    
  }
  if (buzz_time > 0){
      buzz_time--;
      //if (buzz_time == 0) digitalWrite(BUZZ_PIN, 0);
      if (buzz_time == 0) noTone(BUZZ_PIN);
  }

  adj = analogRead(POT_PIN);
  ws_man(adj/16);

  delay(10);
}

//--------------------------------
int ws_man(int delay){
  static int ws_i = 0;
  static int ws_led = 0;
  static int ws_color = 0;

  if (ws_i < delay){
    ws_i++;
  } else {
    ws_i=0;
        
    for (uint l = 0; l<NUMPIXELS; l++){
      if (ws_led >= l){
        if (ws_color == 0) pixels.setPixelColor(l, 255, 0, 0);
        if (ws_color == 1) pixels.setPixelColor(l, 0, 255, 0);
        if (ws_color == 2) pixels.setPixelColor(l, 0, 0, 255);
      }
    }
    pixels.show();   

    ws_led++;
    if (ws_led >= NUMPIXELS) {
      ws_led = 0;
      ws_color++;
      if (ws_color > 2) ws_color = 0;
    }
  }
  return 1;
}

//--------------------------------
int led_sw_man(int delay){
  static int led_i = 0;
  static int led_pos = 0;
  static int led_dir = 0;
  static int led_map[LED_ALL] = {LED1, LED2, LED3, LED4};
  
  int push_map;
  static int sw_map[SW_ALL] = {SW1, SW2, SW3, SW4};

  push_map = 0;
  for (int i=0; i<SW_ALL; i++){
    if (digitalRead(sw_map[i]) == SW_ON){
      push_map |= (1<<i);
    }
  }

  if (push_map > 0){
    for (int i=0; i<SW_ALL; i++){
      if ((push_map & (1<<i)) > 0){
        digitalWrite(led_map[i], LED_ON);
      } else {
        digitalWrite(led_map[i], LED_OFF);
      }
    }

  //no any push
  } else {
    if (led_i < delay){
      led_i++;
    } else {
      led_i=0;
      if (led_pos >= 0 && led_pos < LED_ALL)
        digitalWrite(led_map[led_pos], LED_OFF);

      if (led_dir == 0){
        led_pos++;
        if (led_pos >= LED_ALL){
          led_pos = (LED_ALL - 2);
          led_dir = 1;
        }
        
      } else {
        led_pos--;
        if (led_pos < 0){
          led_pos = 1;
          led_dir = 0;
        }
      }

      if (led_pos >= 0 && led_pos < LED_ALL){
        digitalWrite(led_map[led_pos], LED_ON);
      }
    }
  }

  return push_map;
}

//--------------------------------
void buzz_show(int d){
  tone(BUZZ_PIN, 1000); delay(d);
  noTone(BUZZ_PIN); delay(d);

  tone(BUZZ_PIN, 1000); delay(d);
  noTone(BUZZ_PIN); delay(d);

  tone(BUZZ_PIN, 1000); delay(d/4);
  noTone(BUZZ_PIN); delay(d/4);
  tone(BUZZ_PIN, 1000); delay(d);
  noTone(BUZZ_PIN); delay(d);

  tone(BUZZ_PIN, 1200); delay(d);
  noTone(BUZZ_PIN); delay(d);

  tone(BUZZ_PIN, 1100); delay(d/4);
  noTone(BUZZ_PIN); delay(d/4);
  tone(BUZZ_PIN, 1100); delay(d);
  noTone(BUZZ_PIN); delay(d);

  tone(BUZZ_PIN, 1000); delay(d/4);
  noTone(BUZZ_PIN); delay(d/4);
  tone(BUZZ_PIN, 1000); delay(d);
  noTone(BUZZ_PIN); delay(d);

  tone(BUZZ_PIN, 900); delay(d/4);
  noTone(BUZZ_PIN); delay(d/4);
  tone(BUZZ_PIN, 1000); delay(d);
  noTone(BUZZ_PIN); delay(d);
}



Uproszczona wersja przykładowego programu testowego w MicroPythonie:

import machine
import utime
import neopixel

# --- Konfiguracja PINów ---
# Diody LED i Przyciski
led_pins = [6, 7, 8, 9]
leds = [machine.Pin(p, machine.Pin.OUT) for p in led_pins]

sw_pins = [10, 11, 12, 13]
buttons = [machine.Pin(p, machine.Pin.IN, machine.Pin.PULL_UP) for p in sw_pins]

# Analogowe (Potencjometr i Fotorezystor)
pot = machine.ADC(26)
ldr = machine.ADC(27)

# Buzzer i WS2812
buzzer = machine.PWM(machine.Pin(15))
pixels = neopixel.NeoPixel(machine.Pin(14), 8)

def play_tone(freq, duration):
    if freq > 0:
        buzzer.freq(freq)
        buzzer.duty_u16(32768) # 50% wypełnienia
    utime.sleep_ms(duration)
    buzzer.duty_u16(0) # Wyłącz dźwięk

print("RPi Pico Prototyping Platform - Start Test")
play_tone(1000, 100) # Sygnał startowy

while True:
    # 1. Odczyt fotorezystora i sterowanie diodami LED
    light_val = ldr.read_u16()
    # Im ciemniej, tym szybciej mrugają diody (prosta logika testowa)
    speed = max(50, light_val // 100)
    
    # 2. Obsługa przycisków i buzzera
    for i in range(4):
        if buttons[i].value() == 0: # Przycisk wciśnięty
            leds[i].value(1)
            buzzer.freq(500 * (i + 1))
            buzzer.duty_u16(1000) # Cichy dźwięk przycisku
        else:
            leds[i].value(0)
            
    if all(b.value() == 1 for b in buttons):
        buzzer.duty_u16(0)

    # 3. Odczyt potencjometru i sterowanie RGB (WS2812)
    pot_val = pot.read_u16()
    brightness = pot_val // 256 # Skalowanie do 0-255
    
    # Ustawienie wszystkich diod na kolor zależny od potencjometru
    for i in range(8):
        pixels[i] = (brightness, 0, 255 - brightness)
    pixels.write()

    utime.sleep_ms(10)

Linki