Robotyka w domu przy użyciu Raspberry Pi Pico. Budowanie autonomicznych robotów przy użyciu elastycznego kontrolera Raspberry Pi Pico i języka Python - Danny Staple

Kup ebooka

89.99 zł
76.49 zł (76,49 zł najniższa cena z 30 dni)

-
Proszę czekać

Robotyka w domu przy użyciu Raspberry Pi Pico

Budowanie autonomicznych robotów przy użyciu elastycznego kontrolera Raspberry Pi Pico i języka Python

Danny Staple

Przekład: Mariusz Rogulski i Witold Sikorski

APN Promise 2023

Mojej wspaniałej żonie Carol, która z miłością i inspiracją wspierała wszystkie moje eksperymenty z robotyką oraz tolerowała salon wypełniony robotami. Moim dzieciom, Helenie i Jonathanowi, za wszystkie ich pomysły i entuzjazm oraz za to, że zachęcały mnie do robienia sobie czasami przerw i zabawy z nimi!

- Danny Staple

Robotyka w domu przy użyciu Raspberry Pi Pico

Original English language edition ? 2023 Packt PublishingAll rights reserved.

Authorised translation from the English language edition book Robotics at Home with Raspberry Pi PicoISBN ISBN 978-1-80324-607-9, published by Packt Publishing.

? Polish edition by APN PROMISE SA, Warszawa 2023

APN PROMISE SA, ul. Domaniewska 44a, 02-672 Warszawatel. +48 22 35 51 600;e-mail: wydawnictwo@promise.pl

Wszystkie prawa zastrzeżone. Żadna część niniejszej książki nie może być powielana ani rozpowszechniana w jakiejkolwiek formie i w jakikolwiek sposób (elektroniczny, mechaniczny), włącznie z fotokopiowaniem, nagrywaniem na taśmy lub przy użyciu innych systemów bez pisemnej zgody wydawcy.

Książka ta przedstawia poglądy i opinie autorów. Przykłady firm, produktów, osób i wydarzeń opisane w niniejszej książce są fikcyjne i nie odnoszą się do żadnych konkretnych firm, produktów, osób i wydarzeń, chyba że zostanie jednoznacznie stwierdzone, że jest inaczej. Ewentualne podobieństwo do jakiejkolwiek rzeczywistej firmy, organizacji, produktu, nazwy domeny, adresu poczty elektronicznej, logo, osoby, miejsca lub zdarzenia jest przypadkowe i niezamierzone.

Wszystkie nazwy handlowe i towarowe występujące w niniejszej publikacji mogą być znakami towarowymi zastrzeżonymi lub nazwami zastrzeżonymi odpowiednich firm odnośnych właścicieli.

APN PROMISE SA dołożyła wszelkich starań, aby zapewnić najwyższą jakość tej publikacji. Jednakże nikomu nie udziela się rękojmi ani gwarancji. APN PROMISE SA nie jest w żadnym wypadku odpowiedzialna za jakiekolwiek szkody będące następstwem korzystania z informacji zawartych w niniejszej publikacji, nawet jeśli APN PROMISE została powiadomiona o możliwości wystąpienia szkód.

ISBN: 978-83-7541-524-7 (druk), 978-83-7541-525-4 (ebook)

Przekład: Mariusz Rogulski i Witold SikorskiKorekta: Ewa Swędrowska

Skład i łamanie: MAWART Marek Włodarz

Spis treści

Wprowadzenie

Część 1: Podstawy - Wprowadzenie do robotyki z Raspberry Pi Pico

1

Planowanie robota z użyciem Raspberry Pi Pico

Wymagania techniczne

Co to jest Raspberry Pi Pico i dlaczego nadaje się do robotyki?

Mikrokontroler obsługujący język Python

Interfejsy Raspberry Pi Pico dla czujników i urządzeń

Co to jest CircuitPython?

Planowanie robota z użyciem Raspberry Pi Pico

Ogólny zarys planowania robota

Uwaga na temat kompromisów

Wybieranie podwozia robota

Wybór systemów zasilania

Wykorzystanie pinów

Test dopasowania robota na Raspberry Pi Pico

Tworzenie pierwszego elementu do testu dopasowania

Silniki

System zasilania

Tworzenie przybliżonego podwozia

Rozmieszczanie elementów do testu

Zalecana lista zakupów dla podstaw robota

Części robota i gdzie je znaleźć

Pracownia dla robota i otwarte warsztaty

Podsumowanie

Ćwiczenia

Materiały uzupełniające

2

Przygotowywanie Raspberry Pi Pico

Wymagania techniczne

Załadowanie CircuitPythona do Raspberry Pi Pico

Przygotowanie biblioteki CircuitPython dla Pico

Kodowanie dla Pico - pierwsze kroki

Pobieranie edytora Mu

Włączanie diody LED Pico za pomocą CircuitPythona

Miganie diodą za pomocą kodu

Lutowanie listwy pinowej do Raspberry Pi Pico

Podsumowanie

Ćwiczenia

Materiały uzupełniające

3

Projektowanie podwozia robota w programie FreeCAD

Wymagania techniczne

Wprowadzenie do programu FreeCAD

Ekran FreeCADa

Wybieranie środowiska pracy

Ustawienia FreeCADa

Wykonywanie szkiców podwozia robota w programie FreeCAD

Przygotowanie dokumentu

Szkicowanie zarysu podwozia

Tworzenie głównego szkicu dla elementów znajdujących się powyżej

Szkicowanie otworów dla silnika

Planowanie lokalizacji kółka kulowego

Modelowanie części podwozia na podstawie szkiców

Modelowanie płyty podwozia

Modelowanie pozostałych części

Rozwiązywanie problemów z modelem

Modelowanie trójwymiarowego mocowania dla kółka kulowego

Wykonywanie rysunków technicznych w programie FreeCAD

Konfiguracja strony

Dodawanie części do rysunku

Przygotowanie rysunku do druku

Podsumowanie

Ćwiczenia

Materiały uzupełniające

4

Budowanie robota na bazie Pico

Wymagania techniczne

Wycinanie części ze styrenu

Przenoszenie wymiarów z CAD na arkusz z tworzywa sztucznego

Nacinanie plastikowego arkusza

Wykańczanie i szlifowanie płyty podwozia

Montaż podwozia robota

Mocowanie kółka kulowego i koszyka na baterie

Mocowanie silników i kół

Podłączanie Raspberry Pi Pico w robocie

Łączenie Pico i sterownika silnika z płytką stykową

Dodawanie baterii

Podłączenie silników i enkoderów

Włączenie zasilania robota

Podsumowanie

Ćwiczenia

Materiały uzupełniające

5

Sterowanie silnikami za pomocą Raspberry Pi Pico

Wymagania techniczne

Jazda w przód i w tył

Testowanie poszczególnych silników za pomocą CircuitPythona

Sterowanie kołami po linii prostej

Sterowanie dwoma silnikami

Wprowadzenie do sterowania prędkością za pomocą modulacji szerokości impulsów

Jazda szybciej i wolniej

Skręcanie w trakcie ruchu

Jazda po zaplanowanej trasie

Połączenie ruchów po linii prostej i skrętów

Wady takiego sposobu jazdy

Podsumowanie

Ćwiczenia

Materiały uzupełniające

Część 2: Łączenie Raspberry Pi Pico z prostymi czujnikami i wyjściami

6

Pomiar ruchu za pomocą enkoderów na Raspberry Pi Pico

Wymagania techniczne

Enkodery i odometria

Pomiary absolutne i względne

Rodzaje enkoderów

Dane w impulsach z enkodera

Podłączanie enkoderów w robocie z Raspberry Pi Pico

Badanie silników

Sprawdzanie podłączenia

Programowanie PIO w Raspberry Pi Pico

Wprowadzenie do programowania PIO

Wprowadzenie do PIOASM

Wykrywanie wejścia za pomocą PIO

Instrukcje i rejestry PIO

Tworzenie licznika z PIO

Pomiar impulsów enkodera odpowiadających ruchowi

Tworzenie w PIO prostej pętli wykrywania zmian

Tworzenie dwukierunkowego licznika z PIO

Tworzenie kodu enkodera do wielokrotnego użytku

Pomiar zliczeń dla ustalonego czasu

Podsumowanie

Ćwiczenia

Materiały uzupełniające

7

Planowanie i zakup większej liczby komponentów

Wymagania techniczne

Wprowadzenie do czujników

Typy czujników analogowych

Impulsy o zmiennym czasie

Czujniki korzystające z magistrali danych

Schemat blokowy robota

Wybór typów komponentów

Czujniki odległości

Inercyjna jednostka pomiarowa

Moduły Bluetooth

Podsumowanie użycia pinów dla modułów

Planowanie, co i gdzie dodać

Plan umiejscowienia Bluetooth i IMU

Plan umiejscowienia czujników odległości

Lista zakupów - części i gdzie je znaleźć

Przygotowywanie robota

Projektowanie półki

Wycinanie półki

Projektowanie wsporników przednich czujników

Wycinanie wsporników czujnika

Przygotowanie płyty podwozia

Składanie robota

Podsumowanie

Ćwiczenia

Materiały uzupełniające

8

Mierzenie odległości w celu wykrywania obiektów za pomocą Pico

Wymagania techniczne

Na czym polega wykrywanie odległości

Lutowanie listew pinowych i mocowanie ich do robota

Lutowanie listew pinowych

Montaż czujników

Wprowadzenie do komunikacji I2C

Komunikacja z pojedynczym czujnikiem odległości

Podłączanie czujników odległości

Teoria działania VL53LX

Odczyt w CircuitPythonie z pojedynczego czujnika odległości

Rozwiązywanie problemów

Podłączanie dwóch czujników odległości

Rozwiązywanie problemów

Budowanie unikacza ścian z użyciem Raspberry Pi Pico

Przygotowywanie biblioteki robota

Zasada postępowania w omijaniu ścian

Kod do unikania ścian z czujnikami odległości

Rozwiązywanie problemów

Podsumowanie

Ćwiczenia

Materiały uzupełniające

9

Zdalne sterowanie robotem Raspberry Pi Pico z użyciem Bluetooth LE

Wymagania techniczne

Możliwości bezprzewodowego połączenia z robotem

Podłączenie Bluetooth LE do Raspberry Pi Pico

Dodawanie modułu Bluetooth do robota

Podłączanie płytki rozszerzeniowej Bluetooth do Raspberry Pi Pico

Łączenie się z modułem Bluefruit LE za pośrednictwem UART

Łączenie ze smartfonem

Rozwiązywanie problemów z modułem Bluefruit

Przesyłanie sygnału z czujnika Bluetooth LE do Raspberry Pi Pico

Graficzne prezentowanie danych

Sterowanie robotem za pomocą Bluetooth LE

Wyświetlamy to, co dostaliśmy

Tryb sterowania przyciskami

Dekodowanie pakietów sterujących z przycisków w celu sterowania robotem

Rozwiązywanie problemów

Podsumowanie

Ćwiczenia

Materiały uzupełniające

Część 3: Dodawanie kolejnych zachowań robotycznych do Raspberry Pi Pico

10

Użycie algorytmu PID do podążania wzdłuż ścian

Wymagania techniczne

Wprowadzenie do algorytmu PID

Sterowanie i informacja zwrotna

Sterowanie dwustawne

Mierzenie odległości z regulacją proporcjonalną

Rozwiązywanie problemów

Użycie całki do postępowania z małymi odległościami

Postępowanie z oscylacjami za pomocą pochodnej

Użycie PID do podążania wzdłuż ścian

Zmiana umiejscowienia czujnika

Kod do podążania wzdłuż ścian

Rozwiązywanie problemów

Dostrajanie PID - wykorzystanie wykresów do dostrajania PID

Sterowanie prędkością silnika

Komponent związany ze wzmocnieniem

Regulacja współczynnika różniczkowania

Regulacja współczynnika całkowania

Końcowe uwagi dotyczące dostrajania

Podsumowanie

Ćwiczenia

Materiały uzupełniające

11

Sterowanie ruchem z użyciem enkoderów przez Raspberry Pi Pico

Wymagania techniczne

Konwersja zliczeń enkoderów na prędkość

Luźne śrubki i nakrętki

Geometria koła robota

Geometria enkodera

Pomiar prędkości poszczególnych kół

Naprawienie zakłóceń enkodera

Użycie PID do utrzymywania prędkości i linii prostej

System sterowania prędkością

Kod sterujący prędkością

Strojenie regulatora prędkości PID

Pokonywanie podanej odległości

Zasada działania

Kod do sterowania odległością i prędkością

Podsumowanie

Ćwiczenia

Materiały uzupełniające

12

Wykrywanie orientacji za pomocą IMU i Raspberry Pi Pico

Wymagania techniczne

Co to jest IMU i jak go wybrać

Komponenty IMU

Wybór modułu IMU

Podłączenie IMU do robota

Przygotowanie BNO055

Mocowanie BNO055

Łączenie BNO055 z Raspberry Pi Pico

Konfiguracja oprogramowania i łączenie się

Rozwiązywanie problemów

Kalibracja i uzyskiwanie odczytów

Kod do kalibracji

Proces kalibracji

Zachowanie "zawsze kieruj się ku północy"

Kod w CircuitPythonie dla zachowania "zawsze kieruj się ku północy"

Rozwiązywanie problemów

Zachowanie powodujące wykonanie określonego skrętu

Podsumowanie

Ćwiczenia

Materiały uzupełniające

13

Określanie położenia za pomocą metody Monte Carlo

Wymagania techniczne

Tworzenie obszaru treningowego dla naszego robota

Co zrobimy

Jak wykonamy arenę

Wskazówki dotyczące cięcia

Modelowanie przestrzeni

Reprezentowanie areny i pozycji robota w postaci liczb

Obsługa areny z poziomu robota

Biblioteka Bleak

Tworzenie biblioteki opakowującej Bluetooth LE

Wyświetlanie danych z robota na ekranie komputera

Używanie czujników do śledzenia pozy względnej

Ustawianie pozy

Wyświetlanie póz

Poruszanie się z unikaniem kolizji

Poruszanie pozami z użyciem enkoderów

Prawdopodobieństwa ruchu póz

Lokalizowanie za pomocą Monte Carlo

Generowanie wagi póz na podstawie pozycji

Repróbkowanie póz

Inkorporacja czujników odległości

Tuning i udoskonalanie modelu Monte Carlo

Podsumowanie

Ćwiczenia

Materiały uzupełniające

14

Kontynuujemy podróż - kolejny robot

Wymagania techniczne

Podsumowanie tego, czego nauczyliśmy się z tej książki

Podstawy robotyki z Raspberry Pi Pico

Rozszerzanie robota Raspberry PI Pico za pomocą czujników

Napisanie kodu zachowań Raspberry PI Pico w języku Circuit Python

Planowanie rozszerzeń naszego robota

Czujniki do dodania

Interakcja z robotem

Podwozie i rozszerzenia postaci

Rozszerzenia elektroniki

Jakie wyjścia można dodać

Rozszerzanie kodu i zachowań

Planowanie kolejnego robota

Postać, kształt i podwozie

Elektronika i czujniki

Kod i zachowanie

Sugestia dalszych obszarów nauki

Elektronika

Projekt i wytwarzanie

Zawody robotów i społeczności w dziedzinie robotyki

Systemy i kod w robotyce

Podsumowanie

Ćwiczenia

Materiały uzupełniające

Polecamy także

Wprowadzenie

Robotyka to rozwijająca się dziedzina z zastosowaniami w każdej dziedzinie życia. Może się wydawać, że robotyka i związane z nią technologie są domeną dobrze wyposażonych laboratoriów uniwersytetów i firm high-tech. Jednak wielu aspektów robotyki - budowy i programowania - można się nauczyć i ćwiczyć je we własnym domu.

Główne obszary należące do robotyki to:

Konstrukcje - projektowanie i budowanie mechanicznych platform Elektronika - czujniki, silniki i układy sterujące Oprogramowanie - kod dla bibliotek, interakcji czujników i zachowań

Ta książka ma na celu omówienie po trochu każdego obszaru, zwracając uwagę na podstawę w postaci projektu CAD, tworzenie fragmentów i składanie komponentów sprzętowych. Wprowadza nieco podstaw elektroniki cyfrowej, takich jak połączenia i magistrale danych. Jej celem jest zagłębienie się w czujniki i kod potrzebny do tworzenia interesujących zachowań z ich wykorzystaniem.

Istnieją książki o robotyce, które oferują teoretyczne wprowadzenie do robotyki, jednak celem tej pozycji książkowej jest zabranie Czytelnika w podróż pełną praktyki, zabawy i eksperymentów. Książka zawiera objaśnienia krok po kroku i ilustracje ułatwiające zrozumienie tematyki.

Budowanie własnych robotów w domu to świetny sposób na zdobycie umiejętności technologicznych. To doświadczenie technologii, które zastępuje nieprzeniknioną magię doświadczeniem w świecie rzeczywistym i pewnością siebie, aby można było budować więcej - każdy, kto zdobędzie nieco praktyki, też może zostać czarodziejem robotyki.

Dla kogo jest ta książka

Książka jest przeznaczona dla tych, którzy potrzebują praktycznego, krok po kroku wprowadzenia do projektowania, budowania i programowania robotów przy użyciu popularnego języka programowania Python. Jest ona również dla tych, którzy chcieliby uzyskać wprowadzenie do 3D w CAD-zie, sprzętu i czujników używanych w robotyce oraz zachowań robotów, które wykorzystują czujniki i sprzęt.

Ta książka będzie wartościowa dla twórców, uczniów i programistów, którzy chcą budować roboty w swoich domach lub warsztatach. Nie wymaga specjalistycznego warsztatu, a wszelkie potrzebne umiejętności i narzędzia zostaną wyjaśnione w odpowiednich jej częściach.

Ci, którzy wcześniej mieli do czynienia z kodem, również uznają tę książkę za przydatną. Nie trzeba mieć żadnego doświadczenia z elektroniką czy tworzeniem różnych rzeczy. Spodziewaj się za to, że zdobędziesz pierwsze doświadczenia, ćwicząc techniki opisane w tej książce.

Oczekujemy, że będziesz posiadał chęci pogłębienia wiedzy i odrobinę odwagi w przeprowadzaniu eksperymentów z robotyką. Niezbędne jest praktyczne zastosowanie przedstawionych przykładów. Maksymalne wykorzystanie tej książki oznacza gotowość do stworzenia prawdziwego robota i przetestowania go.

O czym jest ta książka

Rozdział 1, Planowanie robota z użyciem Raspberry Pi Pico, przedstawia Raspberry Pi Pico w odniesieniu do innych głównych kontrolerów stosowanych w robotyce. Pokazuje zalety środowiska programistycznego CircuitPython i prowadzi przez proces tworzenia ogólnego planu budowy robota opartego na Pico. Rozdział ten zawiera listę zakupów sprzętu dla robota z pierwszej połowy książki, omawiając części i kompromisy przy ich wyborze.

Rozdział 2, Przygotowywanie Raspberry Pi Pico, przeprowadzi przez proces instalacji CircuitPython na Pico, a następnie przedstawia pierwsze kroki w pisaniu kodu w tym narzędziu. Omówi również lutowanie złączy szpilkowych (pinów) w Raspberry Pi Pico, dzięki czemu będzie można łączyć się z częściami robota.

Rozdział 3, Projektowanie podwozia robota w programie FreeCAD, przedstawia program FreeCAD przy okazji przekształcania ogólnego planu w projekt 3D w CAD-zie. Prezentuje, jak wykonać rysunki z projektu budowy części robota.

Rozdział 4, Budowanie robota na bazie Pico, pokazuje, w jaki sposób można wykorzystać rysunki CAD wraz z ręcznymi narzędziami do stworzenia części robota poprzez cięcie i wiercenie w kawałkach plastiku. Rozdział poprowadzi również poprzez montaż części, a następnie przez poprowadzenie przewodów i podłączenie elektroniki. W tym rozdziale robot zostanie po raz pierwszy podłączony do zasilania!

Rozdział 5, Sterowanie silnikami za pomocą Raspberry Pi Pico, wprowadza do sterowania silnikami za pomocą CircuitPython i Raspberry Pi Pico, pokazując, w jaki sposób można używać silników do wykonywania ruchów w linii prostej i skrętów oraz jak można kontrolować prędkość. W rozdziale tym pokazano, jak to połączyć w zaprogramowane sekwencje ruchu.

Rozdział 6, Pomiar ruchu za pomocą enkoderów na Raspberry Pi Pico, wprowadza pierwszy w książce robotyczny czujnik z enkoderami kół, pokazując, jak w kodzie wykryć ruch koła. W tym rozdziale omówiono urządzenie peryferyjne Raspberry Pi Pico PIO jako potężny sposób zarządzania tymi czujnikami.

Rozdział 7, Planowanie i zakup większej liczby komponentów, przygotowuje do następnej części książki, przedstawiając czujniki odległości, Bluetooth LE i inercyjną jednostkę pomiarową (ang. inertial measurement unit, IMU). Zawiera również porady dotyczące wyboru urządzeń i sposobu ich mocowania. Rozdział zawiera listę zakupów potrzebnych do dalszej części książki. Odświeżymy projekt części we FreeCAD, aby móc wykonać mocowania czujników, a następnie użyjemy narzędzi do ich wycięcia.

Rozdział 8, Mierzenie odległości w celu wykrywania obiektów za pomocą Pico, przeprowadzi przez dodawanie i podłączanie dwóch czujników odległości do robota. Rozdział zawiera informacje na temat komunikacji I2C, a następnie pokazuje, jak zaprogramować robota do komunikacji z czujnikami. W kolejnym kroku zbudujemy kod dla robota, aby autonomicznie omijał ściany.

Rozdział 9, Zdalne sterowanie robotem Raspberry Pi Pico z użyciem Bluetooth LE, zawiera porównanie możliwości połączeń bezprzewodowych i pokazuje, dlaczego Bluetooth LE był odpowiednim wyborem projektowym. Podłączymy moduł Bluetooth LE do robota, a następnie do przesyłania danych z czujnika przez to połączenie i wyświetlania danych wyjściowych na smartfonie rozszerzymy dotychczasowy kod. Zobaczymy również, jak sterować robotem z poziomu smartfona.

Rozdział 10, Użycie algorytmu PID do podążania wzdłuż ścian, zawiera wprowadzenie do algorytmu PID, podstawowego w robotyce bloku składowego sterowania zachowaniem na podstawie czujników/wyjść. Zbudujemy demonstrację podążania wzdłuż ścian z użyciem czujnika odległości, a następnie pokażemy, jak dostroić PID z użyciem wykresów na smartfonie za pośrednictwem Bluetooth LE.

Rozdział 11, Sterowanie ruchem z użyciem enkoderów przez Raspberry Pi Pico, ponownie omawia enkodery, pokazując, jak przekonwertować ich dane wyjściowe na jednostki zrozumiałe dla człowieka. Dowiemy się, jak połączyć te czujniki z algorytmem PID, aby móc sterować prędkością silnika i jechać po linii prostej. Następnie zaprogramujemy robota tak, żeby przejechał określoną odległość po linii prostej z określoną prędkością.

Rozdział 12, Wykrywanie orientacji za pomocą IMU i Raspberry Pi Pico, wprowadza IMU, czujnik, który pozwala określić orientację robota. Rozdział ten zawiera przewodnik dotyczący podłączania czujnika i jego kalibracji. Użyjemy IMU z algorytmem PID do uzyskania zachowania, w którym robot będzie zawsze skierowany na północ. Na koniec rozdziału pokażemy, jak zaprogramować robota, aby wykonał określony skręt z użyciem IMU.

Rozdział 13, Określanie położenia za pomocą metody Monte Carlo, pokaże, jak zaprogramować robota w celu określenia jego prawdopodobnej lokalizacji na arenie. W tym rozdziale do zbudowania areny z płyty piankowej użyjemy rzutów i zamodelujemy ją w kodzie. Pokażemy, jak zwizualizować tę przestrzeń w komputerze za pomocą Bluetooth LE z Matplotlib. Następnie dowiemy się o ruchach robotem na podstawie danych wejściowych z czujników. W rozdziale pokazano, w jaki sposób wiele zachowań robota może ze sobą współpracować w pewnym kontekście. Przedstawimy wprowadzenie do używania w ruchach robota algorytmów prawdopodobieństwa, tworzenia prognoz i ich udoskonalania.

Rozdział 14, Kontynuujemy podróż - kolejny robot, zawiera podsumowanie tematów poznanych w książce, wraz z informacjami o tym, jak zagłębić się w każdy z nich. Ten rozdział zawiera pomysły i obszary badawcze, w których można rozszerzyć poszczególne aspekty robota, a następnie dalsze sugestie dotyczące budowania bardziej ambitnych robotów i rozwijania swoich umiejętności. Rozdział poleca również społeczności związane z robotyką, w których warto uczestniczyć.

Aby jak najlepiej wykorzystać tę książkę

Będzie potrzebna znajomość kilku podstaw Pythona, takich jak zmienne, pętle, wyrażenia warunkowe i funkcje. Dla przedstawionych w tej książce aspektów związanych z budowaniem robotów zalecane jest dobrze oświetlone i wentylowane miejsce na biurku. Pomocny będzie dostęp do narzędzi ręcznych, aczkolwiek w dalszej części zamieścimy informację, jakie narzędzia należy zakupić. Przykładowy kod robota został przetestowany w CircuitPython 7.2.0 na Raspberry Pi Pico, natomiast powinien działać również z nowszymi wersjami. Przykłady kodu komputerowego zostały przetestowane w Pythonie 3.9.

Oprogramowanie/sprzęt omówiony w książce

Wymagania dotyczące systemu operacyjnego

Thonny > 3.3 lub Mu Editor > 1.1

macOS, Linux lub Windows

Python 3.7 lub nowszy

macOS, Linux lub Windows

Matplotlib 3.6.1 lub nowszy

macOS, Linux lub Windows

NumPy 1.23.4 lub nowszy

macOS, Linux lub Windows

Bleak (biblioteka BLE Pythona) 0.19.0 lub nowsza

macOS, Linux lub Windows

Wolny port USB

macOS, Linux lub Windows

Smartfon/tablet z Bluetooth LE (Bluetooth > 4.0)

iOS lub Android

Adafruit Bluefruit LE Connect > 3.3.2

iOS lub Android

Laptop z obsługą Bluetooth LE (lub klucz sprzętowy BLE)

macOS, Linux lub Windows

FreeCAD

macOS, Linux lub Windows

Raspberry Pi Pico

CircuitPython > 7.2.0

Raspberry Pi Pico

Thonny jest dostarczany z wbudowaną instalacją Pythona 3.x. Do instalowania pakietów w Thonny Pythonie można użyć menu Narzędzia | Otwórz powłokę systemową.

W przypadku korzystania z cyfrowej wersji tej książki radzimy wpisywać kod samodzielnie lub skorzystać z kodu w repozytorium GitHuba dla tej książki (link znajduje się w następnym punkcie). Pomoże to uniknąć potencjalnych błędów związanych z kopiowaniem i wklejaniem kodu.

Pomoc do tej książki można znaleźć w:

Zgłaszaniu błędów w repozytorium książki w GitHubie pod adresem https://github.com/PacktPublishing/Robotics-at-Home-with-Raspberry-Pi-Pico Wysyłając pytanie przez Discord na https://discord.gg/2VHYY3FkXV

Pobieranie plików z przykładowym kodem

Pliki z przykładowym kodem dla tej książki można pobrać z GitHub pod adresem https://github.com/PacktPublishing/Robotics-at-Home-with-Raspberry-Pi-Pico. Jeśli pojawi się aktualizacja kodu, zostanie ona wprowadzona w repozytorium GitHuba.

Dysponujemy również innymi pakietami kodu z naszego bogatego katalogu książek i filmów. Są one dostępne pod https://github.com/PacktPublishing/. Sprawdź je!

Pobieranie kolorowych grafik

Udostępniamy również plik PDF zawierający kolorowe zrzuty ekranu i diagramy użyte w tej książce. Można go pobrać pod tym adresem: https://packt.link/7x3ku.

Przyjęte konwencje

W tej książce zastosowano kilka konwencji w odniesieniu do tekstu.

Kod w tekście: wskazuje wyrażenia z kodu w tekście, nazwy tabel bazy danych, nazwy folderów, nazwy plików, rozszerzenia plików, ścieżki, fikcyjne adresy URL, dane wprowadzone przez użytkownika i nazwy użytkowników na Twitterze. Oto przykład: "Aby uruchomić ten kod, należy wysłać bibliotekę pio_encoders.py, zaktualizowany plik robot.py, a następnie Measure_fixed_time.py".

Blok kodu zostanie przedstawiany w następujący sposób:

import time

import board

import digitalio

led = digitalio.DigitalInOut(board.LED)

led.direction = digitalio.Direction.OUTPUT

while True:

led.value = True

time.sleep(0.5)

led.value = False

time.sleep(0.5)

Gdy będziemy chcieli zwrócić uwagę na określoną część bloku kodu, odpowiednie linie lub elementy zostaną pogrubione:

>>> print("Hello, world!")

Hello, World!

>>>

Wszelkie podawanie danych wejściowych lub wyjścia w wierszu poleceń będą zapisywane w następujący sposób:

code.py output:

4443 4522

Pogrubienie: oznacza nowy termin, ważne pojęcie lub słowa widoczne na ekranie. Na przykład będą pogrubiane słowa w menu lub oknach dialogowych. Oto przykład: "Uruchom Mu Editor, a gdy uruchomi się, kliknij przycisk Mode. Wybierz CircuitPython."

Wskazówki lub ważne uwagi

Wyglądają tak.

Kontakt

Opinie naszych czytelników są zawsze mile widziane.

Ogólna opinia: Jeśli masz pytania dotyczące dowolnego aspektu tej książki, wyślij do nas wiadomość e-mail na adres customercare@packtpub.com i w temacie wiadomości podaj tytuł książki.

Errata: Chociaż dołożyliśmy wszelkich starań, aby zapewnić prawidłowość naszych treści, błędy się zdarzają. Jeśli znalazłeś błąd w tej książce, bylibyśmy wdzięczni, gdybyś nam to zgłosił. Odwiedź stronę www.packtpub.com/support/errata i wypełnij formularz.

Piractwo: Jeśli w Internecie natkniesz się na jakiekolwiek nielegalne kopie naszych utworów w jakiejkolwiek formie, będziemy wdzięczni za podanie adresu lokalizacji lub nazwy strony internetowej. Prosimy o kontakt pod adresem copyright@packt.com z linkiem do materiału.

Jeśli chcesz zostać autorem: Jeśli jest temat, w którym jesteś ekspertem i jesteś zainteresowany napisaniem lub współtworzeniem książki, odwiedź stronę authors.packtpub.com.

Twórcy

O autorze

Danny Staple jest konstruktorem robotów i programistą. Od 2000 roku jest zawodowym inżynierem oprogramowania, zawodowo korzysta z Pythona oraz regularnie uczestniczy w projektach open source.

W domu Danny buduje roboty od 2004 roku i ma szafę pełną projektów, w tym roboty na kółkach, z kamerami, gąsienicami czołgowymi, nogami i ramionami wykonanymi z plastiku, tektury, metalu, tkanin, pudełek na drugie śniadanie czy zmodyfikowanych zabawek.

Danny jest autorem programu Learn Robotics Programming, opublikowanego w 2021 r. przez Packt Publishing oraz autorem artykułów dla magazynu dla The MagPi. Prowadzi kanał robotyki Orionrobots na YouTube'ie, a także zabiera swoje roboty na takie wydarzenia, jak Pi Wars czy Arduino Day. Danny jest także mentorem w CoderDojo KU, gdzie pokazuje dzieciom, jak programować w Pythonie, a także prowadzi kluby robotyki Lego.

Chciałbym podziękować społecznościom Pi Wars i Adafruit za odpowiedzi na moje trudne pytania, Mike'owi Moncrieffe'owi za sprawdzenie dla mnie diagramów, a mojemu zespołowi recenzentów za świetne informacje zwrotne uwzględnione w tej książce.

O recenzencie

Leo White jest zawodowym inżynierem oprogramowania i absolwentem University of Kent. Interesuje się elektroniką, drukiem 3D i robotyką. Najpierw zaczął programować na Commodore 64, a później napisał kilka aplikacji dla Acorn Archimedes. W ramach swojej codziennej pracy obecnie programuje dekodery. Wykorzystując jako podstawę Raspberry Pi, zmechanizował zabawki dla dzieci i sterował ramionami robotów, blogując w międzyczasie o swoich doświadczeniach i procesach. Prowadził prezentacje na Raspberry Jams i zgłaszał różne roboty do konkursu Pi Wars.

Część 1: Podstawy - Wprowadzenie do robotyki z Raspberry Pi Pico

W tej części wykonamy pierwsze kroki w poznawaniu Raspberry Pi Pico, następnie zaplanujemy i zbudujemy na jego bazie robota oraz napiszemy dla niego pierwszy kod, który wprawi go w ruch.

Ta część zawiera następujące rozdziały:

Rozdział 1, Planowanie robota z Raspberry Pi Pico Rozdział 2, Przygotowanie Raspberry Pi Pico Rozdział 3, Projektowanie podwozia robota w programie FreeCAD Rozdział 4, Budowanie robota na bazie Pico Rozdział 5, Sterowanie silnikami za pomocą Raspberry Pi Pico

1

Planowanie robota z użyciem Raspberry Pi Pico

Planując, stwarzamy największą szansę na powodzenie misji. Chcemy budować roboty w osiągalny sposób. Zacznijmy od planu! Wykorzystamy ten plan do zbadania, dlaczego Raspberry Pi Pico świetnie się do tego nadaje i sporządzimy listę zakupów!

W tym rozdziale poznamy możliwości Raspberry Pi Pico. Odkryjemy CircuitPython i dowiemy się, dlaczego jest to świetny język dla Raspberry Pi Pico. Dodatkowo, zaplanujemy projekt robota i poznamy kompromisy w dokonywaniu wyborów dotyczących robota już na wczesnym etapie projektu. Sprawdzimy, czy wszystko w naszym robocie pasuje do siebie, opracowując potrzebne części i narzędzia, a także przedstawiając sugestie, jak je zdobyć.

Na końcu rozdziału będziemy mieli zarówno plan, jak i części, dzięki którym będziemy gotowi do zbudowania robota. Ponadto, będziemy znali wstępny proces przydatny w przypadku tworzenia innych robotów i przygotowania się do odniesienia sukcesu z nimi.

W tym rozdziale omówimy następujące główne tematy:

Co to jest Raspberry Pi Pico i dlaczego nadaje się do robotyki? Co to jest CircuitPython? Planowanie robota z użyciem Raspberry Pi Pico Test dopasowania robota z Raspberry Pi Pico Zalecana lista zakupów dla podstaw robota

Wymagania techniczne

W miarę postępów w tym rozdziale będziemy zajmować się niezbędnym sprzętem oraz listą zakupów. Dlatego w tym podrozdziale skupimy się tylko na tym, czego będziemy potrzebować fizycznie i na komputerze, aby móc rozpocząć.

Będziemy potrzebować:

Trochę cienkiego kartonu Linijkę, ołówek i nożyczki Dobrą przeglądarkę internetową z dostępem do Internetu

Co to jest Raspberry Pi Pico i dlaczego nadaje się do robotyki?

Sercem każdego robota jest kontroler. Zwykle jest to urządzenie komputerowe, które jest odpowiedzialne za wykonywanie kodu robota w celu realizacji jego zadań i zachowań. Wybór kontrolera jest kluczowym wyborem w projektowaniu robotów. Można albo wychodzić z założenia Mam ten kontroler, co mogę z nim zrobić? albo z założenia Które kontrolery mają możliwości, których potrzebuję dla tego konkretnego robota?

W tym punkcie przyjrzymy się bliżej temu, co Raspberry Pi Pico oferuje jako kontroler i kompromisom, jakie zawiera. Zbadamy, dlaczego jest on przydatny w robotyce i dlaczego może być częścią większego, bardziej interesującego systemu.

Dodatkowo, zagłębimy się w szczegóły jego interfejsów i tego, w jaki sposób będą one dla nas przydatne.

Mikrokontroler obsługujący język Python

Zacznijmy od przyjrzenia się Raspberry Pi Pico i odkrycia, co zawiera. Poniższe zdjęcie przedstawia Raspberry Pi Pico:

Rysunek 1.1 - Raspberry Pi Pico

Raspberry Pi Pico, jak pokazano na rysunku 1.1, to mikrokontroler RP2040 na płycie zaprojektowanej dla Raspberry Pi. Ten mikrokontroler jest małym modułem obliczeniowym zaprojektowanym tak, aby gładko współpracował ze sprzętem. Po prawej stronie posiada złącze USB służące do zasilania lub programowania za pomocą komputera. Dioda LED jest przydatna do debugowania. Ponadto, blisko krawędzi znajduje się wiele pinów wejścia/wyjścia (ang. input/output, IO), które służą do podłączania komponentów. To właśnie za ich pomocą we/wy dzieje się magia, jeśli chodzi o sterowanie robotami!

Kontrolery używają pinów IO do zapisu i odczytu z dołączonego sprzętu. W celu wymiany danych z innymi urządzeniami mogą grupować piny w magistrale (które omówimy bardziej szczegółowo później). Dodatkowo, na wyjściach mogą generować różne kształty fali w celu sterowania silnikami i diodami LED.

Brzmi to bardzo podobnie jak w przypadku innych modeli Raspberry Pi. Jest to jednak zupełnie inna klasa komputerów. Raspberry Pi Pico ma więcej wspólnego z płytką Arduino. Przyjrzyjmy się bliżej na poniższym diagramie, co oznacza ta różnica:

Rysunek 1.2 - Płytki z mikrokontrolerami vs. komputery jednopłytkowe

Rysunek 1.2 pokazuje, że chociaż płytki z mikrokontrolerami, takie jak Raspberry Pi Pico i Arduino, mogą wyglądać podobnie do komputerów jednopłytkowych (ang. single-board computers, SBC), takich jak Raspberry Pi 4 lub BeagleBone, różnią się w kluczowych obszarach. Dla przykładu, różnią się pamięcią masową, szybkością procesora, kosztem, złożonością oprogramowania i tym, jak blisko sprzętu działa oprogramowanie.

Chociaż Raspberry Pi Pico doskonale nadaje się do kontrolowania sprzętu, takiego jak roboty, to nie nadaje się już tak dobrze do zadań wymagających dużej ilości pamięci lub procesora, takich jak sztuczna inteligencja czy rozpoznawanie obrazów. Istnieje rodzaj systemów robotów znany jako koń i jeździec, który łączy SBC (na przykład Raspberry Pi 4) odpowiedzialny za złożone przetwarzanie z mikrokontrolerem (na przykład Pico) odpowiedzialnym za sterowanie sprzętem.

Niska złożoność oznacza, że czas uruchamiania kodu na mikrokontrolerze jest bardzo krótki, co oznacza, że nasz kod nie musi współistnieć z innym oprogramowaniem w systemie operacyjnym. Przyjrzyjmy się poniższemu schematowi blokowemu:

Rysunek 1.3 - Uruchamianie kodu na Raspberry Pi w porównaniu z Pico

Powyższy diagram przedstawia architekturę oprogramowania w Raspberry Pi w porównaniu z Raspberry Pi Pico. Pokazuje, że komputer z systemem Linuks, taki jak Raspberry Pi, ma dodatkowe warstwy oprogramowania wraz z konkurującymi aplikacjami działającymi równolegle z naszym kodem.

Oprócz tego kontrolery mają przerwania. Za ich pomocą można powiadomić kod, że coś się zmieniło, na przykład stan pinów IO. Znajdziemy je także w innych modelach Raspberry Pi, ale ponownie są one kontrolowane przez ten natrętny system operacyjny. W Pico i innych mikrokontrolerach mamy większą kontrolę nad tym, co się dzieje. A gdy coś się zmienia na pinach IO, umożliwia stworzenie responsywnego kodu z przewidywalnym czasem reakcji.

Jak więc Raspberry Pi Pico wypada w porównaniu z Arduino Uno? Poniższa tabela przedstawia szczegóły z ich specyfikacji i kart katalogowych:

Specyfikacja

Raspberry Pi Pico

Arduino Uno

Liczba cyfrowych pinów IO

26

14

Liczba analogowych pinów IO

4

6

Procesor

Dwurdzeniowy RP2040, taktowanie 133 MHz

Jednordzeniowy ATmega, taktowanie 16 MHz

Pamięć flash (przechowywanie kodu)

2 MB

32 kB (plus 1 kB EPROM)

RAM (pamięć do uruchamiania kodu)

264 kB

2 kB

Tabela 1.1 - Porównanie Pico z Arduino Uno

Powyższa tabela pokazuje, że Raspberry Pi Pico ma szybszy procesor wielordzeniowy, a także więcej pamięci masowej i cyfrowych pinów IO. Ponadto, Raspberry Pi Pico ma unikalny system programowalnych IO (ang. programmable IO, PIO), oferujący wyjątkową elastyczność w organizowaniu danych do i z tych pinów. Oficjalne płytki Pico są również tańsze niż oficjalne płytki Arduino.

Innym miejscem, w którym Raspberry Pi Pico wypada korzystniej w porównaniu z Arduino, jest możliwość użycia Pythona (CircuitPython lub MicroPython). Wiele mikrokontrolerów, takich jak Arduino, do programowania wymaga C/C++, co może być trudne dla początkujących. Python jest łatwiejszy do zrozumienia, pozwala na tworzenie złożonych i interesujących struktur danych, a także można uzyskać dostęp do wielu bibliotek kodu.

W skrócie, kluczowe cechy Raspberry Pi Pico są następujące:

Mikrokontroler - charakteryzuje się niskim poborem mocy, a ponadto jest mały w porównaniu z SBC. Posiada kontrolowalne i elastyczne możliwości związane z IO. Niski koszt w porównaniu z wieloma płytkami z mikrokontrolerami i większością SBC. Możliwość programowania w języku Python.

Wiele właściwości, które są przypisane Raspberry Pi Pico, wynika z RP2040 - głównego układu Pico, dostępnego również w formach innych niż w Raspberry Pi Pico.

Elastyczność IO jest najciekawszą cechą Raspberry Pi Pico, więc przyjrzyjmy się temu bliżej.

Interfejsy Raspberry Pi Pico dla czujników i urządzeń

Raspberry Pi Pico posiada wiele interfejsów do podłączania sprzętu, a także unikalny system PIO. W tym punkcie przyjrzymy się każdemu typowi interfejsu.

Cyfrowy pin IO to podstawowy system IO w Raspberry Pi Pico. Wyjście może być włączone lub wyłączone, co świetnie nadaje się do włączania i wyłączania diod LED, natomiast nie można kontrolować ich jasności. W analogiczny sposób wejście może również wykrywać stany włączenia lub wyłączenia. Raspberry Pi Pico ma 26 takich pinów.

Modulacja szerokości impulsu (ang. pulse-width modulation, PWM) jest wypełnieniem sygnału w celu sterowania wyjściami, takimi jak diody LED i silniki - w tym silniki prądu stałego, silniki krokowe i silniki serwo. Piny PWM wysyłają impulsy fali prostokątnej ze zmiennym (modulowanym) współczynnikiem włączenia-wyłączenia (szerokością impulsów). Zmiana szerokości impulsu powoduje zmianę jasności diody LED, prędkości silnika lub pozycji silnika serwo. Raspberry Pi Pico posiada 16 kanałów PWM, dzięki czemu może sterować wieloma takimi urządzeniami jednocześnie. Tego typu piny PWM do napędzania silników wymagają dodatkowego urządzenia dostarczającego moc.

Piny wejść analogowych wykrywają wartości napięcia między masą (GND) a 3,3V. Jest to dobre do współpracy z prostymi czujnikami, takimi jak czujniki światła, joysticki, suwaki/pokrętła, czujniki temperatury i mierzącymi natężenia prądów (przy użyciu nieco bardziej rozbudowanych obwodów). Raspberry Pi Pico ma trzy takie wejścia.

Uniwersalny asynchroniczny nadajnik-odbiornik (ang. universal asynchronous receiver-transmitter, UART) steruje portem szeregowym. Może wysyłać strumienie danych do i z urządzeń za pomocą dwóch pinów: pinu nadawczego TX i pinu odbiorczego RX. Dzięki temu jest w stanie wysyłać/odbierać dane, które są bardziej skomplikowane niż tylko zmieniający się poziom napięcia. Raspberry Pi Pico posiada dwa niezależne interfejsy UART.

Pico ma dwa kontrolery magistrali Serial Peripheral Interface (SPI). SPI wykorzystuje cztery piny, jak pokazano na poniższym schemacie:

Rysunek 1.4 - Użycie magistrali SPI w Raspberry Pi Pico

Powyższy diagram przedstawia użycie magistrali SPI Raspberry Pi Pico do podłączenia dwóch urządzeń - na przykład wyświetlaczy lub czujników. Magistrala zawiera linię nadawczą (TX), znaną również jako Controller Out/Peripheral In (COPI) lub Microcontroller Out/Sensor In (MOSI) do przesyłania danych z kontrolera, linię odbiorczą (RX), znaną również jako Controller In/Peripheral Out (CIPO) lub Microcontroller In/Sensor Out (MISO) do odbierania danych z powrotem przez kontroler, SCK (zegar do synchronizacji sygnału) i Chip Select (CSEL/CS) - linia wyboru układu podrzędnego. SPI wykorzystuje wskazywanie układu podrzędnego, aby umożliwić komunikację z wieloma urządzeniami, jak pokazano przerywanymi liniami dla CS Urządzenia 1 i CS Urządzenia 2. Szczegółowe informacje na temat aktualnych akronimów SPI znajdują się w https://makezine.com/article/maker-news/mosi-miso-and-140-years-of-wrong/.

Inter-Integrated Circuit (I2C) to magistrala danych przeznaczona do komunikacji między układami scalonymi, takimi jak czujniki, urządzenia pamięci i urządzenia wyjściowe. Magistrala I2C ma linię danych (która jest często nazywana SDA - Serial Data) i linię zegara (która jest często nazywana SCL - Serial Clock), utrzymując w ten sposób synchronizację. Kilka urządzeń może współdzielić magistralę I2C, wysyłając/odbierając dane, posługując się adresami, tak jak te na poniższym diagramie:

Rysunek 1.5 - Magistrale I2C w Raspberry Pi Pico

Rysunek 1.5 pokazuje Pico oraz kilka podrzędnych urządzeń peryferyjnych połączone przez dwie niezależne magistrale I2C, które można przypisać do różnych konfiguracji pinów, przy czym niektóre urządzenia mają ten sam adres, ale są połączone do różnych magistral I2C. Ponadto, I2C może adresować rejestry (takie jak lokalizacje pamięci) w urządzeniach. Później użyjemy I2C do komunikacji z czujnikami.

Oprócz tego Raspberry Pi Pico posiada PIO. PIO to funkcja unikalna dla Pico. PIO składa się z dwóch bloków z czterema maszynami stanowymi. W każdym z bloków można wykonywać prosty kod niezależnie od głównego procesora i kontrolować jeden lub więcej pinów w celu wysyłania lub odbierania przez nie danych. Maszyna jednostanowa może kontrolować wszystkie piny, jeśli byłoby to użyteczne dla kodu. Dodatkowo każda maszyna stanowa jest wyposażona w bufory do przechowywania danych, dopóki nie będzie można ich przetransferować. Poniżej przedstawiono przykładowy schemat blokowy systemu PIO:

Rysunek 1.6 - System PIO w Raspberry Pi Pico

Powyższy diagram pokazuje dwa moduły PIO wewnątrz Pico. Każdy posiada pamięć do przechowywania kodu, dzięki czemu można mieć dwie niezależne funkcje. W każdym module PIO znajdują się maszyny stanowe, które mogą niezależnie wykonywać kod z tej pamięci lokalnej.

Ponieważ maszyny stanowe PIO działają niezależnie, a ich instrukcje dotyczą przenoszenia danych do/z pinów, mogą tworzyć interfejsy dla różnych rodzajów sprzętu. Dla przykładu, czy mamy jakieś urządzenie z nietypowym protokołem? Użyjmy PIO. Czy potrzebujemy szybkiego zliczania niezależnego od głównego procesora? Użyjmy PIO. Na bazie PIO ludzie stworzyli wyjścia Video Graphics Array (VGA), zatem jest ono w stanie szybko i kompleksowo obsługiwać dane. Dodatkowo od PIO możemy również otrzymywać przerwania, dzięki czemu możemy zostać poinformowani, gdy coś się wydarzy.

Przedstawiliśmy całkiem sporo systemów IO. Podsumujmy je w tabeli w następujący sposób:

Nazwa

Kierunek

Liczba możliwych do użycia

Typowe zastosowania

Cyfrowe piny IO

We/wy

26

Włączanie/wyłączanie diod LED. Wykrywanie naciśnięć przycisków.

PWM

Wy

16

Sterowanie różnymi wyjściami, takimi jak prędkości silnika.

Analogowe piny IO

We

3

Odczyt różnych napięć z czujników.

UART

We/wy

2

Wysyłanie/odbieranie złożonych pakietów danych.

SPI

We/wy

2

Wysyłanie/odbieranie złożonych pakietów danych.

I2C

We/wy

2

Wysyłanie/odbieranie złożonych pakietów danych.

PIO

We/wy

2 x 4

Złożone sterowanie pinami cyfrowymi - w tym pakiety danych, zliczanie impulsów i przesuwanie taktowanych danych. Protokoły nie obsługiwane przez inne szyny danych. Niezależne sterowanie w czasie pinami wyjściowymi.

Tabela 1.2 - System PIO w Raspberry Pi Pico

Te protokoły współdzielą piny, więc użycie magistrali I2C zużywa 2 piny z puli 26 pinów.

Skoro już omówiliśmy cechy i interfejsy Raspberry Pi Pico, przyjrzyjmy się, jak będziemy w tej książce go programować, używając CircuitPython.

Co to jest CircuitPython?

Wiele mikrokontrolerów do programowania wymaga C/C++ lub asemblera - jak na przykład popularny ekosystem Arduino. Jednak w robotyce Python szybko staje się językiem de facto. Jest używany do sztucznej inteligencji i nauki o danych oraz doskonale nadaje się do szybkiego wypróbowywania nowych pomysłów. Przyjrzyjmy się, dlaczego jest on przydatny, a konkretnie, dlaczego wybrałem CircuitPython dla tej książki.

Python nie wymaga kroku kompilacji. Pisanie i eksperymentowanie z kodem ułatwia szybkie otrzymywanie informacji zwrotnej na temat kodu oraz pętli REPL (read-eval-print) w Pythonie. REPL pozwala zobaczyć, czy coś działa, zanim pomysły wprowadzimy na stałe w kodzie. Oto sesja REPL z CircuitPython:

Adafruit CircuitPython 6.2.0 on 2021-04-05; Raspberry Pi Pico with rp2040

>>> print("Hello, world!")

Hello, world!

Powyższa sesja pokazuje print wykonany w REPL na Raspberry Pi Pico. W dalszej części zbadamy, jak używać REPL do niektórych eksperymentów z Pico. Posiada on nawet wbudowaną pomoc, jednak w Pico, ze względu na rozmiar, nie została pozostawiona cała pomoc.

Python ma inne rzeczy, które pomagają, takie jak możliwość bezpośredniego zwracania wielu wartości z funkcji. Python ma wywołania funkcji i klasy, takie jak w C++, natomiast funkcje mogą być używane jako dane, a odwołania do nich mogą być przechowywane w zmiennych. Poza tym Python zawiera elementy programowania funkcyjnego, które pozwalają programistom łączyć ze sobą narzędzia w celu przetwarzania strumieni danych.

Do obsługi błędów Python używa wyjątków, dzięki czemu można wybrać sposób reagowania na nie lub obserwować ich postać, co może doprowadzić nas bezpośrednio do problemu.

MicroPython to oryginalny port języka Python do uruchamiania na urządzeniach z małą pamięcią, takich jak mikrokontrolery. Pracuje nad nim społeczność, a CircuitPython został zbudowany na nim.

W CircuitPython Raspberry Pi Pico montuje się jako urządzenie pamięci masowej USB, zatem można kopiować swój kod i biblioteki, z których korzysta nasz kod, bezpośrednio do Pico. Dzięki temu jest proste komponowanie kodu z wielu bibliotek lub korzystanie z innych usług. Wystarczy skopiować kod z poprawną nazwą, aby uruchomić go po ponownym włączeniu Raspberry Pi Pico.

CircuitPython dysponuje ogromną biblioteką do obsługi urządzeń, takich jak diody LED Neopixel, Bluetooth, różne czujniki, wyświetlacze i inne. Ta biblioteka działa nie tylko z Pico, ale i na wielu innych kontrolerach obsługiwanych przez CircuitPython. Znajomość tych komponentów biblioteki będzie zatem przydatna podczas pracy z innymi kontrolerami.

Teraz, gdy wybraliśmy język i kontroler, za pomocą których będziemy budować roboty w tej książce, nadszedł czas, aby zacząć planować robota!

Planowanie robota z użyciem Raspberry Pi Pico

Zrobiliśmy już pewne rozpoznanie na cele naszej misji zbudowania robota. Zanim rozpoczniemy naszą przygodę z budowaniem robota, sporządzimy ogólny plan tego, co chcemy zrobić, a następnie udoskonalimy go. Podejmiemy ważne decyzje, które będziemy mogli później przeanalizować, gdy rozpoczniemy proces budowy robota.

Ogólny zarys planowania robota

Planując robota, musimy wziąć pod uwagę kilka rzeczy:

Co będziemy chcieli robić za pomocą tego robota? Po co on będzie? Jaki styl robota będzie odpowiedni? Jakie rodzaje czujników lub wyjść będą nam potrzebne? Jaki będzie miał przybliżony kształt i rozmiar?

Po udzieleniu odpowiedzi na te pytania możemy podjąć dalsze decyzje dotyczące tego, co zbudujemy. Te nie wymagają wielu szczegółów. Robotyka jest pełna ciekawych zwrotów, co sprawia, że przeskakiwanie między pomysłami jest kuszące. Dysponując zarysem planu i pracując zgodnie z nim, możemy dotrzymać powziętych zamierzeń dotyczących budowy robota, oszczędzając rozpraszanie uwagi i fajne pomysły na kolejnego robota a nawet na trzy!

Co będziemy chcieli robić za pomocą tego robota? Do czego może służyć?

Czy robot rozwiąże jakiś problem, posprząta kuchnię, zbada przestrzeń, dostarczy paczki, zachwyci gości na konferencji lub weźmie udział w konkursie robotów?

Robot, którego zbudujemy w tej książce, ma kilka celów:

Poznanie Raspberry Pi Pico i jego możliwości Wypróbowanie czujników Napisanie algorytmów kierowanych nieco wyzwaniami w zawodach robotów Poruszanie się po znanej przestrzeni Zbudowanie niestandardowego podwozia, które można dostosować do przyszłych pomysłów Utrzymanie wszystkiego na tyle prostym, aby stanowiło dobry początek

Mając na uwadze te cele, możemy przyjrzeć się konkretnym szczegółom.

Jaki styl robota będzie odpowiedni?

Istnieje wiele stylów robotów. Dla naszego celu powinniśmy wybrać jeden, prawdopodobnie najprostszy z możliwych. Spójrzmy na poniższy diagram, gdzie są przedstawione różne style robotów:

Rysunek 1.7 - Różne style robotów

Pierwszy styl robota to ramię robota stosowane w przemyśle. Budowanie ich jest fascynujące i przyjemne. Jednak nie spełniają one naszych celów, jakim jest zbudowanie podwozia robota do wypróbowania czujników.

Kolejna ramka pokazuje drona quadkoptera - bezzałogowy statek powietrzny (UAV). Są one skomplikowane w budowie i programowaniu, więc nie spełniają naszego celu, jakim jest utrzymanie prostoty.

Trzecia ramka przedstawia chodzącego robota - sześcionoga. Wymagają one sterowania wieloma silnikami serwo. Ich zużycie energii i złożoność sprawiają, że są nieodpowiednim wyborem w naszym przypadku, ale ekscytującą opcją dla kolejnego robota!

Czwarta ramka przedstawia robota kołowego. Roboty kołowe mogą być prostymi robotami z napędem na dwa koła (2WD) z rolką, tak jak ten. Takie jak tego typu platformy łazikowe 2WD spełniają nasze cele związane z budową podwozia oraz poznaniem czujników i algorytmów. Można je później uczynić bardziej interesującymi, dodając gąsiennice, koła mecanum, wózki wahaczowe lub indywidualnie sterowane koła, co pozwali im również dostosowywać się do celu.

Rekomenduję, aby kontynuując w trakcie tej książki pracę z łazikiem 2WD pamiętać o innych wariantach przy późniejszym konstruowaniu robotów!

Jakie rodzaje czujników lub wyjść będą nam potrzebne?

Jednym z naszych celów jest wypróbowanie różnych czujników. Robot stworzony do nawigacji w przestrzeni będzie wymuszał czujniki, których będziemy używać. Wszystkie one będą przyczyniać się do lokalizowania robota.

Na czujniki odpowiednie do tego celu składają się:

Czujniki odległości: co znajduje się przed robotem? W jakiej odległości znajdują się najbliższe obiekty? Możemy potrzebować więcej niż jednego tego typu sensora. Enkodery: Jak porusza się robot? Jak daleko się przemieścił? Inercyjna jednostka pomiarowa (IMU): Czy robot się obrócił? Jakie jest jego położenie względem północy?

Wraz z tymi czujnikami będziemy mieć proste wyjścia - silniki, za pomocą których będziemy napędzać koła. Jako późniejsze rozszerzenie moglibyśmy również dodać Bluetooth, aby uzyskać informacje zwrotne na temat statusu naszego robota. Nie musimy jeszcze tego wszystkiego planować, ale zostawmy na to miejsce, abyśmy mogli później rozbudować robota.

Jaki będzie miał przybliżony kształt i rozmiar?

W tym momencie mamy już pomysł na robota z napędem na 2 koła. Wiemy, że prawdopodobnie będzie musiał zawierać następujące elementy:

Raspberry Pi Pico Parę silników z kółkami i rolkę Wiele innych czujników, a później Bluetooth Zasilanie systemu, w tym akumulatory i konwersję napięcia Płytkę stykową do połączenia tego wszystkiego razem

Chociaż nie chcemy, aby robot był zbyt duży, będziemy potrzebowali trochę miejsca na działanie. Zacznijmy od przybliżonego oszacowania 150 mm x 200 mm.

Odpowiedzieliśmy więc na kilka pytań dotyczących tego, czego chcemy. W następnych kilku punktach zagłębimy się w planowanie tego robota, przyglądając się różnym aspektom planowania i wyborom, których dokonamy. Pierwszym z nich jest rozważenie kompromisów.

Uwaga na temat kompromisów

Wszystkie projekty wymagają kompromisów. Prawda jest taka, że żaden projekt nie pasuje do wszystkich przypadków i zwykle żaden projekt nie jest doskonały, ale powinien być wystarczająco dobry w tych aspektach, dla których został przewidziany. Aby sobie w tym pomóc, będziemy musieli podejmować decyzje i czytać karty katalogowe części.

Jednym z przykładów są rozmiary i waga - wspomnieliśmy już, że nie chcemy dużego robota. W końcu mamy ograniczony rozmiar stołu warsztatowego, a większe roboty wymagają większej mocy, większych silników i większych akumulatorów. Ponadto musielibyśmy pracować z twardszymi i prawdopodobnie trudniejszymi do cięcia materiałami. W innym kontekście i dla innego przeznaczenia być może bardziej odpowiedni byłby większy i cięższy robot. Tak więc pierwszym kompromisem jest to, aby robot był niewielki, ale nie za mały - to znaczy, aby był prosty.

Zasugerowaliśmy Raspberry Pi Pico, a jego przewagą w stosunku do Raspberry Pi jest na przykład mniejsza waga, niższy koszt i pobierana moc.

Ale co z kompromisami w zakresie czujników? Każdy czujnik występuje w wielu typach, które omówimy w odpowiednich rozdziałach. Różnią się one ceną, funkcjami i złożonością.

W wielu aspektach możemy zamienić większą złożoność na mniejszą wagę lub cenę czy większą funkcjonalność za wyższą cenę.

Wybieranie podwozia robota

Mamy wiele opcji dla naszego podwozia robota 2WD. Ponownie, wszystko zależy od tego, czego chcemy się nauczyć lub co osiągnąć. Postawiliśmy sobie za cel zbudowanie elastycznego podwozia. Oto kilka dobrych możliwości, aby to uzyskać:

Zakup gotowej platformy - tzw. chassis kit, Adaptacja pudełka na drugie śniadanie lub zabawki Ręczne zrobienie podstawy Wydrukowanie 3D lub laserowe wycięcie podwozia

Gotowe platformy są łatwą opcją, ale mają ograniczoną elastyczność. Wiele z nich jest wyposażonych w silniki, koła, akumulatory, a nawet sterownik silnika zaprojektowany dla określonego głównego kontrolera. W ten sposób mogą zaoszczędzić czas i pieniądze, pozwalając skupić się całkowicie na kodzie i czujnikach, ale oferują mniej okazji do nauki aspektów projektowych. Często trudno jest znaleźć platformę o odpowiednim kształcie i rozmiarze, a gdy stają się większe, szybko stają się droższe.

Na podwozie robota można także zaadaptować pudełko na drugie śniadanie - dobrą okazją do zdobycia umiejętności projektowania może być wycięcie otworów montażowych na silniki, czujniki, płyty i inne komponenty. Jednak wtedy trzeba zmieścić elektronikę i sprzęt robota w ograniczonej przestrzeni. Pamiętajmy, że sprawę mogą komplikować zakrzywione boki pudełek na drugie śniadanie.

Tworzenie podwozia od podstaw oferuje dużą elastyczność. Można nauczyć się projektowania w CAD-zie i posługiwania się narzędziami ręcznymi. Ponadto, należy dokonywać wyborów dotyczących rodzaju i grubości materiału, dzięki czemu będziemy w stanie lepiej zrozumieć tworzenie mocniejszych robotów. Można wtedy nauczyć się również, jak dopasować czujniki i rozszerzyć robota, jeśli zrobi się zbyt ciasno. Wymaga to więcej czasu i cierpliwości niż w przypadku gotowej platformy, ale profity z tego tytułu są tego warte.

Druk 3D i cięcie laserowe wymagają precyzyjnych projektów, a także drogich i specjalistycznych narzędzi lub usług. Po zagłębieniu się w robotykę i wyjściu poza prostego robota 2WD, tworząc ciekawsze kształty i mocowania czujników, prawdopodobnie będzie to ważny obszar eksploracji. Przy braku biegłości w zakresie narzędzi ręcznych znalezienie usługi cięcia laserowego tych samych części pozwoli osiągnąć dobre wyniki, ale może być kosztowne.

W tej książce, aby zapoznać się z projektowaniem i narzędziami ręcznymi, co jednocześnie da nam dużą elastyczność, skorzystamy z wariantu budowania od podstaw. Nauczymy się umiejętności CAD, które można przenieść do druku 3D. Nauczymy się wycinać i wiercić w elementach, korzystając również z niektórych gotowych części, aby zaoszczędzić czas.

Dodatkowo ustalimy rozmiar naszego projektu na około 150 mm x 200 mm i zmodyfikujemy go w razie potrzeby. Ale co z silnikami?

Wybieranie silników

Nasz silnik 2WD wymaga dwóch głównych silników napędowych. Moglibyśmy wziąć pod uwagę silniki krokowe, które wykonują ruch za każdym razem, gdy otrzymują impuls, chociaż wprowadzają one nieco dodatkowej złożoności - być może jest to pomysł do zachowania na przyszłość. Właściwym wyborem wydają się silniki prądu stałego, które obracają się w sposób ciągły, gdy są zasilane. Będą musiały być nastawione tak, aby miały wystarczającą moc do poruszania robotem, ale nie były zbyt szybkie i trudne do kontrolowania.

Powinniśmy postarać się, aby te silniki były małe i zasilane niskim napięciem. Ponieważ raczej nie będziemy chcieli budować dodatkowej przekładni, sensowne wydają się motoreduktory. W zakresie rozmiarów, na których nam zależy, istnieje kilka możliwości. Pierwsza z nich to żółty silnik TT z plastikowymi zębatkami - jednak te silniki nie są dobrej jakości i zajmują sporo miejsca. Inną możliwością jest użycie silników serwo, które są przystosowane do ciągłego obracania - jednak mogą być dość drogie.

Niewielką, powszechną, wysokiej jakości, ale niedrogą opcją są motoreduktory N20 lub mikrometalowe. Dzięki dostępnym modelom z fabrycznie zamontowanymi enkoderami można zaoszczędzić miejsce i siły. W celu przymocowania ich do naszego robota można użyć zwykłych plastikowych wsporników. Dzięki temu są również wygodne w użyciu.

Kółka robota

W przypadku robota z napędem 2WD istnieje kilka wariantów układu kół. Jedną z możliwości jest posiadanie dwóch kół napędowych wraz z dwoma kołami zapasowymi luźnymi (czyli bez zasilania). Jednak te koła mogą się wlec, co utrudnia obracanie robota. Powszechnym sposobem jest posiadanie trzeciego koła jako rolki - albo kółka kulowego, która może toczyć się w dowolnym kierunku, albo koła obrotowego, takiego jak w wózku na zakupy. Ze względu na rozmiar robota, dobrym pomysłem wydaje się być kółko kulowe (tzw. ball caster).

Same koła powinny mieć piastę kompatybilną z wybranymi przez nas silnikami. Odpowiednia powinna być para kół N20 o średnicy 60-100 mm.

Mamy więc przybliżony rozmiar naszego robota i wiemy, jaki wybrać kontroler, silniki i niektóre czujniki. Kolejnym elementem do wyboru są systemy zasilania.

Wybór systemów zasilania

Z robotem nie ma zabawy bez niezależnego zasilania - przez co rozumiem własne źródło zasilania bez konieczności podłączania go do kontaktu w ścianie. Zwykle oznacza to baterie. Dodatkowo, potrzebuje sposobów na zapewnienie zasilania elektroniki sterującej, czujników, zewnętrznych płytek i silników. Zapoznajmy się z poniższym diagramem, aby zobaczyć zarys dystrybucji mocy w robocie z napędem 2WD:

Rysunek 1.8 - Dystrybucja mocy w robocie z napędem 2WD

Na rysunku 1.8 grubsze linie pokazują bezpośrednie połączenia zasilania z baterii. Podwozie 2WD będzie musiało napędzać co najmniej dwa silniki, które są energochłonnymi urządzeniami wymagającymi podłączenia do baterii.

Ten robot musi zasilać także Raspberry Pi Pico i inne czujniki. Ponieważ zamierzamy dodać Bluetooth, powinniśmy przewidzieć na to zapas mocy. Tak więc druga gruba linia prowadzi do regulatora, dostarczającego odpowiednią moc dla tych systemów - napięcie z baterii prawdopodobnie by je zniszczyło. Cieńsze linie ciągłe pokazują moc regulowaną.

Pico będzie wysyłał/odbierał elektroniczne sygnały sterujące, oznaczone na powyższym schemacie cienkimi przerywanymi liniami. Będę one przekazywane również do sterownika silnika. Sterownik silnika będzie dostarczał z baterii do silnika moc sterowaną sygnałami PWM wysyłanymi do niego przez Pico. Moc dostarczana do silników jest zaznaczona grubymi przerywanymi liniami na diagramie po lewej stronie.

W tym momencie musimy wziąć pod uwagę kilka kwestii. Potrzebujemy na wejściu napięcia odpowiedniego dla silników i do napędzania regulatora. Potrzebujemy regulatora, który poradzi sobie z wymaganiami dotyczącymi mocy dla Pico, czujników i Bluetooth, a także potrzebne nam są baterie, które mogą dostarczyć wystarczającą ilość prądu do ich napędzania.

Obliczanie zapotrzebowania na moc

Zacznijmy od tego, co wiemy - 5V to dobre napięcie wyjściowe dla regulatora, a w razie potrzeby Pico może dalej obniżyć je do 3,3V. Regulator na 5V prawdopodobnie wymaga 7V lub więcej.

Ważna uwaga

Napięcie mierzy ciśnienie elektryczne. Prąd mierzy szybkość przepływu energii elektrycznej. Połączenie obu pokazuje pobór mocy przez system. Gdy jest znane napięcie jako zamiennik mocy w watach, może zostać użyty prąd wyrażony w amperach lub miliamperach.

Spójrzmy na specyfikacje motoreduktorów N20. Przeprowadźmy wyszukiwanie w Internecie karty katalogowej silnika N20. Poszukajmy dokumentu PDF. Zwykle zawierają one zdjęcie lub schemat produktu, a następnie specyfikację i tabele charakterystyk. Szukając napięcia znamionowego, otrzymamy 6V. Jednak w dalszej części karty katalogowej zwykle znajduje się tabela wiążąca prędkość silnika i napięcie. Bazując na podstawach silników i regulatora, sensowne wydaje się napięcie wejściowe 7V-12V.

Nasza elektronika nie działa z samym napięciem i do działania wymaga natężenia. Tak więc regulator będzie musiał obsłużyć minimalne wymagania dotyczące natężenia. W tym celu będziemy musieli zerknąć na karty katalogowe i specyfikacje innych komponentów. Dołączymy czujniki. W przypadku Bluetooth dołączymy płytkę Bluetooth Low Energy (BLE) o niskim poborze mocy, wykorzystując pomiary najwyższych natężeń prądu z https://learn.adafruit.com/introducing-the-adafruit-bluefruit-le-uart-friend/current-measurements.

W celu ich uwzględnienia wybierzemy wartości dla najgorszego przypadku. Zacznijmy od przejrzenia kart katalogowych i zebrania wartości w tabeli w następujący sposób:

Komponent

Wymagane natężenie prądu

Raspberry Pi Pico

Do 100 mA

Adafruit Bluefruit LE UART Friend

Do 15,2 mA (aktywny Bluetooth)

Czujniki - odległości, IMU i enkodery

Oszacowanie szczytu na 50 mA

Tabela 1.3 - Wymagania dotyczące zapotrzebowania na moc przez urządzenie

Chapter 3 specyfikacji Raspberry Pi Pico (którą można znaleźć pod adresem https://datasheets.raspberrypi.com/pico/pico-datasheet.pdf) przedstawia specyfikację elektryczną, z natężeniem szczytowym nieco poniżej 92 mA (miliampery - miara natężenia). W ramach marginesu zaokrąglimy to do 100 mA.

Płytka Bluetooth Adafruit pobiera tylko 15,2 mA, gdy jest w pełni aktywna, zatem możemy to obficie zaokrąglić do 20 mA. Czujniki potrzebują natężenia dodatkowo około 50 mA, aby móc je nakarmić.

Możemy dodać te szacunki razem, aby określić minimalne wymagane natężenie. Na podstawie tych danych i szacunków każdy regulator zdolny do dostarczenia ponad 400 mA będzie wystarczający.

Wybór regulatora

Sterowniki silników i zasilacze mogą być całkowicie odrębnymi zagadnieniami, co oferuje dużą elastyczność, ale może zająć więcej miejsca. Istnieją płytki przeznaczone dla Raspberry Pi Pico, które umożliwiają sterowanie silnikami przy jednoczesnym zasilaniu Raspberry Pi Pico. Jednak czy dostarczą 400 mA?

Kilka zgrabnych płytek dla silników dla Raspberry Pi Pico oferuje Kitronik - mały silnik, wraz z większą płytką robotyczną z wyjściami do silników serwo i miejscem do prototypowania. Jednak zgodnie z kartą katalogową płytki zasilanie dla Pico przewiduje 100 mA dla urządzeń peryferyjnych, co w naszym przypadku będzie niewystarczające.

Teraz rozumiemy, że potrzebujemy regulatora, który jest w stanie dawać 5V, przy co najmniej 400 mA. Potrzebujemy czegoś małego i prostego. Odpowiednim komponentem do tego celu jest uniwersalny regulator napięcia z baterii (ang. Universal Battery Eliminator Circuit, UBEC). Mogą one obsłużyć 3A. Puścimy to przez pin VSYS w Pico.

Wybór sterownika silnika

Sugerowane silniki są małe. Silniki mają prąd utyku - to znaczy moc, którą pobierają, gdy próbują się poruszyć i zablokować logiczne maksimum. W przypadku N20 ich karta katalogowa sugeruje 350 mA przy 6V. Może to być trochę więcej, może 550 mA. Sterownik silnika musi dostarczyć na kanał nieco powyżej tego szczytu - sterowniki silnika, które nie są w stanie dostarczyć takiego obciążenia do silnika, zwykle idą z dymem! Przyjrzyjmy się następującym dwóm popularnym prostym sterownikom silnika:

Rysunek 1.9 - Sterownik silnika L298N a obok niego TB6612fng

Po lewej stronie rysunku 1.9 widać bardzo popularny L298N - wyszukiwanie w Internecie sugeruje, że dostarcza on 2A na kanał. Są małe, niedrogie i łatwe do znalezienia. Jest to jednak urządzenie z logiką 5V. Logika Raspberry Pi Pico pracuje na poziomie 3,3V, więc może nie działać poprawnie z tym kontrolerem bez konwersji poziomów logicznych.

Po prawej stronie znajduje się kolejny dobry wybór, Toshiba TB6612fng. Dostarcza on 1,2A na kanał, czyli nieco mniej niż układ pokazany wcześniej, jednak wciąż wystarczająco dużo. Do sterowania silnikami obsługuje napięcia do 15V, poziomy logiczne w zakresie od 3V do 5V, więc dla Raspberry Pi Pico nie będzie wymagać konwerterów poziomów logicznych. Podobnym jest moduł od SparkFun, który będzie dobrze działał z Pico i jest wystarczająco mały, aby zmieścić się na płytce stykowej obok niego.

Dodatkowo, na płytce stykowej pomiędzy bateriami a sterownikiem silnika i regulatorem powinniśmy zaplanować wyłącznik zasilania. Wspominając o bateriach, ich wybór nas jeszcze czeka.

Wybór baterii

Potrzeba nam też czegoś, z czego będzie odbywał się przepływ przez regulator mocy - baterii.

Chociaż możemy (i powinniśmy, na bardziej zaawansowanym etapie) rozważać baterie litowo-jonowe, stosowane w samochodach zdalnie sterowanych, najprostszym możliwym rozwiązaniem są baterie AA. Dla wybranego przez nas silnika i regulatora, osiem baterii AA da 12V. Można je łatwo kupić i wymienić, jednak w stosunku do ich mocy wyjściowej zajmują dość dużo miejsca. Nasze silniki nie wymagają dużego prądu, więc te baterie będą wystarczająco dobre.

W tym momencie, gdy przeanalizowaliśmy już nasze wymagania dotyczące zasilania i niektóre potencjalne rozwiązania, przyjrzymy się, które piny zostaną użyte w naszym Raspberry Pi Pico i ponadto upewnijmy się, że nasze plany dotyczące sprzętu nie będą ze sobą kolidować.

Wykorzystanie pinów

Nasz Raspberry Pi Pico ma wiele pinów IO, natomiast musimy sprawdzić, czy wszystkie komponenty, które zamierzamy do niego podpiąć, będą mogły być do niego podłączone jednocześnie.

Przyjrzyjmy się ponownie specyfikacji Pico na stronie https://www.raspberrypi.com/documentation/microcontrollers/raspberry-pi-pico.html:

26 wejść-wyjść ogólnego przeznaczenia (ang. General Purpose Input/Output, GPIO). 2 x UART, 2 x SPI i 2 x SPI

Sterownik silnika zajmie dwa piny na silnik. Oprócz tego wiemy, że te silniki są wyposażone w enkodery, każdy z dodatkowymi dwoma pinami. Oznacza to, że do tej pory wykorzystalibyśmy 8 z 26 pinów IO. To powinno dać nam dużo miejsca na ekspansję.

W tym momencie, gdy zweryfikowaliśmy podstawy naszej koncepcji, przejdziemy do testu dopasowania - przybliżonego sposobu, w jaki zbudujemy robota.

Test dopasowania robota na Raspberry Pi Pico

Gdy już sprawdziliśmy, czy damy radę zasilić nasz system, musimy upewnić się, że w robocie wszystko będzie dopasowane. Na tym etapie mamy ogólne wyobrażenie o tym, gdzie będą poszczególne komponenty, czy nasze podwozie będzie wystarczająco duże i czy projekt robota ma szansę zadziałać.

Kluczową kwestią dla testu dopasowania jest to, że nie jest ono szczegółowe. Aby sprawdzić, czy komponenty będą pasować, warto użyć najprostszej metody, czy to układając wycięte prostokąty z papieru, czy używając prostego oprogramowania.

Zróbmy z papieru lub kartonu kilka prostych kart. W tym podrozdziale będziemy potrzebować kart, ołówka, linijki i nożyczek. Świetne byłyby karty z pudełka od płatków śniadaniowych, ale papier też się do tego celu nada.

Do testu dopasowania często wystarczą prostokąty. Celem jest określenie, czy wszystko zmieści się w określonej przestrzeni oraz ustawienie komponentów. Szczegóły nie są istotne. W przypadku dużych robotów konieczne może się okazać wykonanie modelu w zmniejszonej skali. Ponieważ ten robot jest mały, można wykonać części w skali 1:1. Ma to dodatkową zaletę - jeśli w swoim posiadaniu mamy już komponenty, to można ich użyć.

Tworzenie pierwszego elementu do testu dopasowania

Ponownie będziemy potrzebować kart katalogowych dla swoich komponentów - tym razem, aby zacząć patrzeć na ich fizyczne rozmiary. W celu wykonania testu dopasowania, wystarczy utworzyć obwiednie dla komponentów i upewnić się, że jest na nie wystarczająco dużo miejsca.

Zacznijmy od płytki stykowej i Pico. Ponieważ Pico będzie znajdował się na tej płytce, możemy zwyczajnie zamodelować jej rozmiar. Polecam 400-pinową płytkę stykową, która jest również nazywana half-plus. Aby wyszukać wymiary płyty stykowej half-plus, można skorzystać z wyszukiwarki, wpisując half plus płytka stykowa wymiary i kliknąć przycisk Grafika. To, czego poszukujemy, to schemat przedstawiający zewnętrzne wymiary płytki, jak zaprezentowany poniżej:

Rysunek 1.10 - Wymiary płytki stykowej

Powyższy schemat pokazuje, czego można się spodziewać po rysunku/obrazku pod względem wymiarów, który w tym przypadku dotyczy płytki stykowej. Mierzy ona 84 mm wzdłuż górnej części i 56 mm wzdłuż prawej strony. Należy zauważyć, że w całej książce używam milimetrów i w razie potrzeby konwertuję je z innych jednostek. Projektując robota, należy trzymać się jednego systemu miar!

Możemy wziąć kartkę lub karton i narysować ołówkiem prostokąt o wymiarach 84 mm na 56 mm. Nie musi on być zbyt dokładny - wystarczy przybliżenie rzędu 5 mm. Pokazuje to poniższe zdjęcie:

Rysunek 1.11 - Wykonany element odpowiadający płytce stykowej dla testu dopasowania

Jak pokazuje powyższe zdjęcie, zwyczajnie go rysujemy. Dodatkowo, aby można go było później zidentyfikować, piszemy na nim płytka stykowa (bread board na zdjęciu) wraz z jej wymiarami 84 x 56. Miejmy go pod ręką, aby można było z niego później skorzystać.

Następnie możemy wyciąć go nożyczkami. Zwykle wykonuję nadmiarowe, zgrubne cięcie, a następnie drugie precyzyjniejsze i dopasowane cięcie.

Ten prostokąt z odpowiednimi wymiarami jest naszym pierwszym elementem dla testu. W kolejnym kroku będziemy potrzebować elementu dla silnika.

Silniki

Silniki, których używamy, to N20. Jeśli umieścimy je na spodzie robota, jak to często bywa w przypadku tego typu projektów, musimy wziąć pod uwagę sposób, w jaki ich przewody przejdą przez podwozie. Łatwiej jest umieścić je na górnej stronie, tak aby przewody silnika mogły być skierowane do góry.