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
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.