Przewodnik MVP: węzeł kamery z zasilaniem z USB i z akumulatora
Ten przewodnik prowadzi od pierwszego testu na biurku do węzła na akumulatorze w wydrukach. Priorytetem jest test MVP: kamera śledzi obiekt, a serwa obracają kamerę.
Powiązane pliki:
- Lista części (BOM, PL) i przewodnik montażu (EN)
- Obwód akumulatora (EN)
- Schemat montażu: te same kroki jako animowany schemat, komendy do skopiowania, dziennik pomiarów
- Firmware MVP: ServoTracker
- Program na Maca: YOLOProcessing.py
Zasady zapisu: krótkie zdania, jedna czynność w kroku. OSTRZEŻENIE oznacza ryzyko obrażeń, pożaru lub uszkodzenia. UWAGA oznacza ryzyko uszkodzenia sprzętu. Złota rada to wskazówka, która oszczędza czas lub sprzęt.
0. Dziesięć zasad (przeczytaj najpierw)
- Zmieniaj połączenia tylko bez zasilania. Wyjmij też kabel USB.
- Nigdy nie łącz plusów dwóch zasilaczy. USB z Maca i zasilacz serw to dwa źródła. Ich plusy muszą być rozdzielone. Masy (GND) łącz zawsze.
- Wspólna masa. GND XIAO musi być połączone z GND serw. Bez tego serwo nie „rozumie” sygnału.
- Piny GPIO przyjmują maksymalnie 3,3 V. Nigdy nie podawaj 5 V na pin.
- Akumulator nigdy bezpośrednio do odbiornika. 12,6 V uszkodzi serwo, czujnik, kamerę i XIAO.
- Czerwona sonda w gnieździe VΩ. Sprawdź to przed każdym pomiarem.
- Najpierw zmierz zasilacz bez obciążenia. Podłącz odbiornik dopiero po poprawnym pomiarze.
- Jedna zmiana naraz. Po każdej zmianie: pomiar i krótki test.
- Prąd MG996R nie płynie przez płytkę stykową. Wyjątek: małe SG90 z USB w wariancie A.
- Fizyczny stop to odłączenie zasilania serw. Komenda programu to nie jest zabezpieczenie.
1. Plan MVP
| Etap | Co działa | Zasilanie | Części | Zaliczone, gdy |
|---|---|---|---|---|
| A — MVP biurkowy | Kamera śledzi telefon | Tylko USB z MacBooka Air | XIAO ESP32-S3, 2× SG90, XIAO ESP32-S3 Sense (kamera), płytka stykowa | Kamera podąża za telefonem przez 10 min bez resetu |
| B — MVP stołowy | To samo z MG996R | XIAO z USB, serwa z B6 (5 V) lub z UBEC | + 2× MG996R, szyna serw na płytce uniwersalnej | Jak A, a napięcie serw w ruchu ≥ 4,8 V |
| C — MVP na akumulatorze | Węzeł bez kabli | LiPo 3S → UBEC (serwa) + LM2596 (logika) | + bezpiecznik, dioda, wiązka | 15 min pracy, ogniwa ≥ 3,7 V po teście |
| D — wersja produkcyjna | Węzeł w wydrukach | Jak C | + płytka lutowana, adaptery do serw | Wszystkie pomiary z sekcji 12 od nowa |
| E — opcja po MVP | Wykrywanie w węźle, bez Maca | Jak C | + Grove Vision AI V2 z kamerą CSI | Węzeł śledzi bez Pythona (sekcja 9.8) |
Złota rada: Etap A sprawdza cały łańcuch (kamera → Python → Wi-Fi → XIAO → serwo) prawie bez ryzyka. Jeśli coś nie działa w A, przyczyna nie leży w zasilaniu ani w mechanice. Nie pomijaj A.
Czujniki (MPU-6050, GY-271, GPS) nie są potrzebne do MVP. Firmware liczy kąt kamery z pozycji serw. Dodasz czujniki po MVP (sekcja 9.6).
1.1 Które płytki do czego
| Płytka | Rola | Kiedy | Dlaczego |
|---|---|---|---|
| XIAO ESP32-S3 | Sterownik serw, węzeł 0 | Etap A | Na nim jest opisany cały przewodnik |
| XIAO ESP32-S3 Sense (kamera OV3660) | Kamera, węzeł 0 | Etap A | Programujesz go kablem USB-C, bez podstawki MB. Na Macu działa od razu. |
| XIAO ESP32-C3 | Sterownik serw, węzeł 1 | Po MVP | Ten sam rozmiar i układ pinów co S3. ServoTracker sam wybiera piny (sekcja 9.7). |
| ESP32-CAM (OV2640) | Kamera, węzeł 1 | Po MVP | Potrzebuje podstawki ESP32-CAM-MB do programowania |
| Grove Vision AI V2 | Wykrywanie obiektu w węźle, bez Maca | Etap E, po MVP | Opcja na później (sekcja 9.8). Nie zmieniaj dwóch rzeczy naraz. |
| ESP32 z zestawu startowego | Zapas, ćwiczenia | — | XIAO C3 pasuje lepiej do tej samej płytki i tego samego firmware |
| ReSpeaker Lite (z przylutowanym XIAO ESP32-S3) | Nie używasz w tym projekcie | — | Nie wylutowuj XIAO. Małe pola lutownicze łatwo zerwać. |
| XIAO RP2350 / RP2040 | Nie używasz w tym projekcie | — | Nie ma Wi-Fi. Węzeł dostaje komendy przez Wi-Fi (UDP). |
Złota rada: Sense jako kamera usuwa najtrudniejszy krok dla początkującego: wgrywanie programu do ESP32-CAM przez podstawkę MB. Do testu MVP nie musisz już nic kupować, oprócz kabli USB-C do danych.
Dlaczego nie jedna płytka Sense do kamery i serw? To możliwe, bo piny D0–D7 są wolne. Ale wymaga nowego, połączonego firmware, Sense mocniej się grzeje, a przewody serw muszą iść do ruchomej głowicy. Do MVP użyj dwóch płytek i gotowych programów.
2. Bezpieczeństwo
2.1 Mac i USB
- Mac chroni swoje porty. Przy przeciążeniu wyłącza port i pokazuje komunikat o wyłączonych urządzeniach USB. Wtedy odłącz kabel, zmniejsz obciążenie i podłącz ponownie.
- OSTRZEŻENIE: Nie podłączaj zewnętrznego zasilania (B6, UBEC, LM2596) do pinu 5V XIAO, gdy XIAO jest podłączone do Maca. Prąd może popłynąć wstecz do portu Maca.
- UWAGA: Nie zasilaj MG996R z USB. Według Tower Pro zablokowany MG996R pobiera 1,4 A. Klony często pobierają więcej.
- Używaj kabli do transmisji danych. Kabel „tylko do ładowania” nie pokaże płytki w
make ports. - Zakładaj maksymalnie ok. 1 A na port. Apple nie podaje jednej gwarantowanej wartości dla takich urządzeń.
2.2 Akumulator LiPo
- OSTRZEŻENIE: Ładuj tylko ładowarką B6 w programie LiPo BALANCE, 3S, maksymalnie 2,2 A. Podłącz przewód balansera. Zostań przy ładowarce. Połóż pakiet w torbie LiPo na niepalnej powierzchni.
- OSTRZEŻENIE: Nie dopuść do zwarcia. Zdejmij pierścionki i zegarek. Lutuj XT60 tylko bez akumulatora. Nigdy nie wkładaj pigtailu XT60 z gołymi końcami przewodów do akumulatora, nawet „na próbę”.
- Nie ładuj i nie używaj pakietu spuchniętego, uszkodzonego lub gorącego.
- Kończ pracę przy 3,5 V na ogniwo (alarm P309). Nigdy nie zostawiaj ogniwa poniżej 3,0 V.
- P309 też pobiera prąd. Odłączaj go po pracy. Zostawiony na noc rozładowuje pakiet.
- Nie używasz pakietu przez kilka dni? Użyj programu STORAGE w B6 (ok. 3,8 V na ogniwo).
- Jeśli pakiet dymi lub się pali: odsuń się i nie wdychaj dymu. Jeśli ogień się rozprzestrzenia, dzwoń pod 112. Ładuj tylko tam, gdzie pożar niczego nie zapali.
- W węźle mocuj pakiet rzepem lub opaską, nie samą taśmą. Prowadź przewody z dala od zębów przekładni. Przecięta izolacja oznacza zwarcie.
2.3 Lutowanie
- Grot ma ponad 300 °C. Odkładaj lutownicę zawsze do podstawki.
- Wietrz pomieszczenie. Dym pochodzi z topnika.
- Zakładaj okulary przy obcinaniu nóżek elementów. Ucięte końcówki odskakują.
- Nigdy nie lutuj układu z podłączonym zasilaniem lub akumulatorem.
- Myj ręce po lutowaniu.
2.4 Mechanika
- Trzymaj palce z dala od przekładni, gdy serwa mają zasilanie. Tryb wyszukiwania może ruszyć sam.
- MG996R ma ok. 9 kg·cm. Przekładnia z drukarki może przyciąć palec.
- Ramię pochylenia z MG996R może opaść po odłączeniu zasilania. Podtrzymaj je.
- Nie obracaj wału serwa siłą. Plastikowe zębatki SG90 łatwo się łamią.
2.5 Ciepło XIAO Sense
- UWAGA: XIAO ESP32-S3 Sense mocno się grzeje przy nadawaniu obrazu. Seeed zmierzył do 63,6 °C bez radiatora i 53,5 °C z dwoma radiatorami. Nie dotykaj tylnej strony płytki w czasie pracy.
- Załóż radiator z zestawu. Nie przyklejaj go klejem termoprzewodzącym AG TermoGlue: ten klej łączy na stałe.
- PLA mięknie w ok. 55–60 °C. Nie kładź Sense bezpośrednio na wydruku. Zostaw szczelinę powietrza (dystanse).
- Niższa rozdzielczość (QVGA) to mniej ciepła i mniejsze opóźnienie.
2.6 Czego unikać
| Błąd | Skutek | Zamiast tego |
|---|---|---|
| Serwo zasilane z pinu 3V3 XIAO | Reset XIAO, przegrzany stabilizator | Serwo z 5 V (USB 5V, B6, UBEC) |
| Zasilacz zewnętrzny na pin 5V przy podłączonym USB | Prąd wsteczny do Maca | Tylko jedno źródło na pinie 5V; dioda w wariancie C |
| Czerwona sonda w gnieździe A/mA przy pomiarze napięcia | Zwarcie przez miernik, spalony bezpiecznik, przy LiPo pożar | Czerwona sonda zawsze w VΩ |
| Kondensator odwrotnie | Grzeje się, puchnie, może pęknąć | Pasek „−” na obudowie do GND |
| Moduł czujnika wpięty wzdłuż jednego rzędu płytki | Wszystkie piny zwarte | Każdy pin w innym rzędzie |
| Długie, cienkie przewody do MG996R | Spadki napięcia, drgania | Krótkie przewody 20–22 AWG |
| Ruch 0–180° w zamontowanym mechanizmie | Serwo uderza w ogranicznik, zablokowanie, maksymalny prąd | Wąskie limity, poszerzaj co 50 µs |
Wyłączony detektor brownout (ID0.txt, linia 102) |
Ukryte problemy z zasilaniem | Napraw zasilanie; detektor zostaw włączony |
| Hasło Wi-Fi w repozytorium | Hasło publicznie na GitHubie | Plik secrets.h (git go ignoruje) |
| Serwo lub rezystor 10 kΩ do GND na D0, D8 lub D9 XIAO ESP32-C3 | To piny startowe. Płytka nie uruchamia programu albo nie przyjmuje wgrywania. | Serwa na D2 i D3 (sekcja 9.7) |
| Zasilacz zewnętrzny na pin 5V Sense bez diody | Prąd wsteczny do Maca, gdy podłączysz USB | Dioda D1' jak dla XIAO (sekcja 7.5) |
| Wyginanie taśmy kamery Sense | Pęknięta taśma, błąd Camera init failed |
Kamera i płytka rozszerzeń jako jedna całość, mocowana sztywno |
| Dwie zmiany naraz | Nie wiesz, co pomogło | Jedna zmiana, test, zapis |
3. Multimetr: jak mierzyć w tym projekcie
3.1 Ustawienie
Masz dwa mierniki: Aneng AN870 i FNIRSI S1. Używaj jednego, żeby wyniki były porównywalne.
- Włóż czarną sondę do gniazda COM.
- Włóż czerwoną sondę do gniazda VΩ. Nie używaj gniazd A, mA ani 10A.
- Wybierz funkcję ręcznie. Nie używaj automatycznego wykrywania funkcji. - Napięcie stałe: symbol V z linią prostą (⎓). - Rezystancja: Ω. - Ciągłość: symbol głośnika lub diody. Miernik piszczy przy połączeniu.
- Sprawdź miernik: w trybie ciągłości zetknij sondy. Miernik musi zapiszczeć.
Złota rada: Kup końcówki krokodylkowe do sond. Przypnij czarną sondę na stałe do GND. Wtedy mierzysz jedną ręką i nie zwierasz sąsiednich pinów.
3.2 Zasady pomiaru
- Napięcie mierzysz między dwoma punktami. Czarna sonda na GND, czerwona na punkcie mierzonym.
- Mierz przy odbiorniku. Napięcie na złączu serwa mówi więcej niż napięcie na zasilaczu, bo uwzględnia spadek na przewodach.
- Rezystancję i ciągłość mierz tylko bez zasilania. Odłącz USB i akumulator.
- Przed zmianą połączeń zmierz napięcie szyny. Musi być poniżej 0,1 V. Kondensator trzyma ładunek po wyłączeniu.
- Kondensator przy pomiarze Ω daje odczyt, który rośnie. To normalne. Stały odczyt bliski 0 Ω to zwarcie.
- Ujemny odczyt oznacza odwrócone sondy lub odwrócone przewody. Zatrzymaj się i sprawdź.
3.3 Czego miernik nie pokaże
Miernik pokazuje średnią z kilkuset milisekund. Spadek napięcia trwający kilka milisekund jest dla niego niewidoczny. Taki spadek wystarczy do resetu ESP32. Objawy krótkich spadków to: reset, drgania serwa, przerwy w obrazie. Gdy je widzisz, a miernik pokazuje 5 V, i tak szukaj problemu z zasilaniem.
3.4 Punkty pomiarowe
Kody używane w całym przewodniku. Zapisuj wyniki w karcie pomiarów (sekcja 12).
| Kod | Czarna sonda | Czerwona sonda | Stan | Wynik poprawny | Jeśli źle |
|---|---|---|---|---|---|
| M-USB | GND XIAO | Pin 5V XIAO | XIAO na USB | 4,75–5,25 V | Inny kabel lub port |
| M-3V3 | GND XIAO | Pin 3V3 XIAO | XIAO na USB | 3,2–3,4 V | Odłącz wszystko od XIAO, sprawdź ponownie |
| M-SIG | GND | Rząd e22 (pan) lub e28 (tilt) | Przed i po active |
0 V przed; ok. 0,2–0,3 V po (orientacyjnie, średnia z impulsów) | 3,3 V stale: błąd programu lub pinu |
| M-SERWO | GND serwa przy złączu | + serwa przy złączu | Spoczynek / ruch | A: 4,75–5,25 V, w ruchu ≥ 4,6 V. B, C: 4,9–5,1 V, w ruchu ≥ 4,8 V | Krótsze przewody, kondensator, mocniejsze zasilanie |
| M-ZASIL | Wyjście − zasilacza | Wyjście + zasilacza | Bez obciążenia | B6/UBEC: 4,9–5,1 V. LM2596 logiki: 5,1–5,3 V | Ustaw ponownie, nie podłączaj odbiornika |
| M-BAT | GND (gwiazda) | TP-B za bezpiecznikiem | Akumulator podłączony | Start testu ≥ 11,1 V. Koniec przy 10,5 V | Naładuj |
| M-OGNIWA | — | P309 na złączu balansera | Akumulator podłączony | Każde 3,5–4,2 V, różnica ≤ 0,1 V | Ładowanie z balansem; pakiet z dużą różnicą wycofaj |
| M-XIAO-BAT | GND XIAO | Pin 5V XIAO | Wariant C, USB odłączone | 4,7–5,0 V (za diodą) | Sprawdź diodę i LM2596 |
| M-CAM | GND kamery | Pin 5V kamery | Wariant C | ESP32-CAM: 5,1–5,3 V. Sense (za diodą D1'): 4,7–5,0 V | Sprawdź LM2596 logiki i diodę D1' |
| M-I2C | GND | SDA (rząd 14) i SCL (rząd 16) | Czujniki podłączone, USB | 3,2–3,4 V | Powyżej 3,4 V: odłącz czujnik natychmiast |
| M-OFF | GND szyny | + szyny | Po wyłączeniu | < 0,1 V | Poczekaj; sprawdź rezystor rozładowujący |
| O-ZWARCIE | − szyny | + szyny | Bez zasilania, Ω | Odczyt rośnie lub > 100 Ω | Stałe ~0 Ω: szukaj zwarcia |
| O-MASA | GND serw | GND XIAO | Bez zasilania, ciągłość | Pisk | Brak wspólnej masy |
| O-REG | IN− | OUT− (UBEC i LM2596) | Bez zasilania, ciągłość | Pisk | Zapytaj sprzedawcę; nie zakładaj wspólnej masy |
4. Stabilny układ: po co rezystory i kondensatory
4.1 Skąd biorą się problemy
| Przyczyna | Co się dzieje | Analogia dla programisty |
|---|---|---|
| Spadek napięcia | Serwo rusza i na kilka ms pobiera dużo prądu. Napięcie spada. ESP32 się resetuje. | Skok obciążenia, który wywala proces bez logów |
| Pływające wejście | Pin bez sygnału łapie zakłócenia. Serwo drga przy starcie. | Niezainicjalizowana zmienna |
| Brak wspólnej masy | Sygnał nie ma punktu odniesienia | Dwa układy współrzędnych bez wspólnego początku |
| Luźny styk | Opór styku zmienia się przy drganiach | Niestabilne połączenie sieciowe |
| Zakłócenia | Długie przewody silnika działają jak antena | Szum w danych wejściowych |
4.2 Elementy stabilizujące
| Element | Wartość | Gdzie dokładnie | Po co (analogia) | Bez niego | Uwagi |
|---|---|---|---|---|---|
| C1 kondensator elektrolityczny | 470 µF (1 serwo) lub 1000 µF (2× MG996R) | Między + a − serw, maks. 2 cm od złączy serw | Lokalny bufor energii na szczyty prądu, jak bufor zapisu | Spadki napięcia, drgania, resety | Pasek „−” do GND. Napięcie 25 V jest ponad 2× większe od 5 V: dobrze. |
| C2 kondensator elektrolityczny | 470 µF | Wariant C. ESP32-CAM: między jej 5V a GND. Sense: przed diodą D1' (po stronie LM2596), blisko kamery | Bufor na szczyty prądu nadajnika Wi-Fi kamery | Komunikat „Brownout” i przerwy obrazu | Jak C1 |
| R1 rezystor szeregowy | 220 Ω | Między pinem XIAO a przewodem sygnałowym serwa | Ogranicza prąd, gdy serwo ma zasilanie, a XIAO nie (lub odwrotnie); tłumi odbicia na przewodzie. Jak limiter. | Ryzyko uszkodzenia pinu przy złej kolejności zasilania | Sygnał nadal ok. 3,2 V: serwa zwykle to akceptują |
| R2 rezystor ściągający (pull-down) | 10 kΩ | Między sygnałem serwa (za R1) a GND | Ustala domyślny stan LOW, gdy ESP32 się uruchamia. Jak wartość domyślna zmiennej. | Serwo może drgnąć przy starcie | Nie gwarantuje, że każde serwo stoi przy włączeniu |
| R3 rezystor rozładowujący | 1 kΩ | Równolegle do C1 | Rozładowuje C1 po wyłączeniu, jak destruktor | Szyna trzyma napięcie po wyłączeniu | 5 mA, 0,025 W: zwykły rezystor 0,25 W wystarczy |
| D1 dioda Schottky | 1N5819 (lub SS34, SB540) | Między LM2596 logiki (anoda) a pinem 5V XIAO (katoda, pasek) | Zawór jednokierunkowy: USB nie zasila LM2596, a LM2596 nie zasila Maca. Wymaga tego Seeed. | Prąd wsteczny przy podłączeniu USB | Spadek ok. 0,3–0,4 V, dlatego LM2596 ustaw na 5,2 V. Kamera Sense to też XIAO: dostaje własną diodę D1' w ten sam sposób. |
| F1 bezpiecznik | 5 A, mini samochodowy | Na przewodzie + akumulatora, maks. 5 cm od XT60 | Przerywa obwód przy zwarciu, jak circuit breaker | Zwarcie = rozgrzane przewody i pożar | Nie chroni przed nadmiernym rozładowaniem |
| R5/R6 dzielnik (opcja) | 47 kΩ / 10 kΩ | + akumulatora → R5 → punkt → R6 → GND; punkt do XIAO D3 (C3: D1) | Pozwala XIAO mierzyć napięcie akumulatora i zatrzymać serwa | Tylko alarm P309 | 12,6 V → 2,21 V na pinie: bezpieczne |
| Rezystory podciągające I²C | Już na modułach | — | Moduły GY-521 i GY-271 mają je na płytce | — | Nie dodawaj kolejnych |
4.3 Masa w układzie gwiazdy
Połącz wszystkie masy w jednym punkcie: przy minusie akumulatora lub zasilacza. Prąd serw wraca własnym przewodem prosto do zasilacza serw. Przewód masy XIAO służy tylko jako odniesienie dla sygnału. Prąd silnika nie może płynąć przez XIAO ani przez płytkę stykową.
- Wariant B: XIAO na USB, serwa na B6/UBEC. Potrzebny jest osobny przewód odniesienia GND szyny serw ↔ GND XIAO.
- Wariant C: UBEC i LM2596 mają połączone IN− i OUT− (sprawdź: O-REG). Masy łączą się w punkcie gwiazdy przy akumulatorze. Sprawdź O-MASA.
4.4 Przewody
| Zastosowanie | Przekrój | Długość |
|---|---|---|
| Sygnały, czujniki | Przewody połączeniowe z zestawu | Do 20 cm |
| Zasilanie serw | 20–22 AWG, silikonowy | Jak najkrócej |
| Akumulator → bezpiecznik → przetwornice | 18–20 AWG, silikonowy | Jak najkrócej |
Złota rada: Skręć każdą parę + i − (2–3 skręty na 5 cm). Mniej zakłóceń i słabsze pole magnetyczne przy kompasie.
4.5 Stabilność w firmware
ServoTracker już to robi:
- Uruchamia serwa po kolei, co 0,5 s. Dwa serwa naraz to podwójny szczyt prądu.
- Ogranicza prędkość ruchu (
MAX_SPEED_DEG_PER_S). - Trzyma serwa w limitach (
minUs,maxUs). Serwo na ograniczniku pobiera maksymalny prąd. - Zatrzymuje ruch, gdy przez 0,5 s nie ma komend z Pythona.
- Czyta wszystkie pakiety UDP i używa najnowszego. Stare komendy nie powodują opóźnień.
- Zostawia detektor brownout włączony.
5. Wariant A: wszystko z USB Maca (MVP biurkowy)
5.1 Bilans prądu
Wartości orientacyjne:
| Odbiornik | Port Maca | Typowo | Chwilowo |
|---|---|---|---|
| XIAO ESP32-S3 z Wi-Fi | 1 | ok. 100 mA (dane Seeed) | do ok. 350 mA przy nadawaniu |
| 2× SG90 bez obciążenia | 1 (przez pin 5V XIAO) | 10 mA w spoczynku, 100–300 mA każde w ruchu | do ok. 700 mA każde przy zablokowaniu |
| XIAO ESP32-S3 Sense, obraz przez Wi-Fi | 2 | ok. 140 mA (dane Seeed) | ok. 350 mA (dane Seeed) |
Plan: port 1 ok. 1 A, port 2 ok. 0,5 A. To dlatego MG996R nie są w wariancie A.
5.2 Porty i kable
- MacBook Air z MagSafe (M2 i nowsze): ładuj przez MagSafe. Oba porty USB-C są wolne.
- MacBook Air M1: ma tylko dwa porty USB-C. Na czas testu pracuj na baterii Maca. Możesz też użyć huba USB-C z własnym zasilaczem (PD). Hub bez zasilacza dzieli moc jednego portu.
- XIAO: kabel USB-C ↔ USB-C do transmisji danych.
- XIAO Sense: drugi kabel USB-C ↔ USB-C do transmisji danych. Najlepiej długi (1 m) i miękki, bo rusza się z kamerą.
- Złota rada: Opisz markerem jeden sprawdzony kabel do danych i używaj go zawsze.
5.3 Schemat
MacBook Air
├─ port 1 ── USB-C ── XIAO ESP32-S3
│ ├─ 5V ── szyna + (czerwona) ──┬── SG90 pan (+) i SG90 tilt (+)
│ │ └── C1 470 µF (+)
│ ├─ GND ─ szyna − (niebieska) ─┬── SG90 (−) ×2, C1 (−)
│ │ └── R2 i R2' (do GND)
│ ├─ D0 ── R1 220 Ω ──┬── sygnał SG90 pan
│ │ └── R2 10 kΩ ── GND
│ └─ D1 ── R1' 220 Ω ─┬── sygnał SG90 tilt
│ └── R2' 10 kΩ ── GND
└─ port 2 ── USB-C ── XIAO ESP32-S3 Sense (kamera, obraz przez Wi-Fi)
Jedynym źródłem zasilania w wariancie A jest USB z Maca. Nie podłączaj tu B6, UBEC ani LM2596.
5.4 Rozmieszczenie na płytce stykowej (830 pól)
Najpierw poznaj płytkę (bez zasilania, tryb ciągłości):
- Sprawdź, że a10–e10 są połączone, a e10–f10 nie.
- Sprawdź szyny zasilania wzdłuż całej długości. Szyny w wielu płytkach mają przerwę w połowie.
- Opisz markerem prawe szyny (po stronie f–j): czerwona „+5V USB”, niebieska „GND”. Lewa niebieska szyna też będzie masą (most, przewód nr 3).
Ułożenie XIAO: włóż XIAO w poprzek środkowego rowka w rzędach 1–7, złączem USB-C na zewnątrz płytki. Lewe piny wchodzą w kolumnę c, prawe w kolumnę g. Wolne zostają otwory a–b po lewej i h–j po prawej. Patrząc z góry (USB-C u góry):
| Rząd | Lewa strona (a–e) | Prawa strona (f–j) |
|---|---|---|
| 1 | D0 (GPIO1) — serwo pan | 5V |
| 2 | D1 (GPIO2) — serwo tilt | GND |
| 3 | D2 | 3V3 |
| 4 | D3 (GPIO4) — opcja: pomiar akumulatora | D10 |
| 5 | D4 (GPIO5) — SDA | D9 |
| 6 | D5 (GPIO6) — SCL | D8 |
| 7 | D6 (GPIO43) | D7 (GPIO44) — wejście z GPS TX (później) |
Jeśli XIAO nie ma goldpinów, przylutuj je. Złota rada: Włóż goldpiny w płytkę stykową, połóż na nich XIAO i dopiero lutuj. Piny będą proste. Najpierw poćwicz na kawałku płytki uniwersalnej.
Połączenia (bez zasilania):
| Nr | Od | Do | Kolor |
|---|---|---|---|
| 1 | i2 (GND XIAO) | Prawa szyna niebieska | Czarny |
| 2 | i1 (5V XIAO) | Prawa szyna czerwona | Czerwony |
| 3 | Prawa szyna niebieska (dół płytki) | Lewa szyna niebieska (most masy) | Czarny |
| 4 | a1 (D0) | a20 | Pomarańczowy |
| 5 | R1 220 Ω | b20 → b22 | — |
| 6 | R2 10 kΩ | c22 → c24 | — |
| 7 | a24 | Lewa szyna niebieska | Czarny |
| 8 | a2 (D1) | a26 | Żółty |
| 9 | R1' 220 Ω | b26 → b28 | — |
| 10 | R2' 10 kΩ | c28 → c30 | — |
| 11 | a30 | Lewa szyna niebieska | Czarny |
| 12 | C1 470 µF: nóżka „+” | Prawa szyna czerwona, rząd 15 | — |
| 13 | C1: nóżka z paskiem „−” | Prawa szyna niebieska, rząd 15 | — |
| 14 | e22 | Sygnał SG90 pan (pomarańczowy) | Pomarańczowy |
| 15 | e28 | Sygnał SG90 tilt (pomarańczowy) | Żółty |
| 16 | Prawa szyna czerwona | + obu SG90 (czerwone) | Czerwony |
| 17 | Prawa szyna niebieska | − obu SG90 (brązowe) | Czarny |
Ten sam układ krok po kroku: schemat montażu, rozdział 02. Zasilanie po prawej stronie płytki, sygnały po lewej.
Rzędy 10, 12, 14 i 16 zostaw na czujniki (GND, 3V3, SDA, SCL), tak jak w BOM.md. Ten układ zgadza się z rzędami 20–24 w BATTERY-MVP.md.
Wtyk serwa przyjmuje przewód męsko-męski. Kolejność przewodów SG90: brązowy = GND, czerwony = +5 V, pomarańczowy = sygnał. Dokumentacja serwa ma pierwszeństwo przed kolorem.
UWAGA: Kondensator 470 µF na szynie USB daje krótki udar prądu przy wkładaniu kabla. Jeśli macOS wyłączy port przy podłączaniu, wyjmij C1. Spowolnienie ruchu w firmware wystarczy dla SG90.
5.5 Mechanika biurkowego pan-tilt z 2× SG90
- Przyklej korpus SG90 „pan” taśmą piankową do ciężkiej podstawy (klocek, książka). Wał do góry.
- Nie montuj jeszcze orczyków. Najpierw ustaw środek (krok A5).
- Po ustawieniu środka przyklej korpus SG90 „tilt” do orczyka serwa pan. Wał poziomo.
- Przymocuj XIAO Sense z radiatorem do orczyka serwa tilt. Użyj taśmy piankowej na tylnej części płytki XIAO, nie na kamerze. Obiektyw do przodu, złącze USB-C do tyłu. Nie zginaj taśmy kamery.
- Użyj miękkiego kabla USB-C. Zostaw luźną pętlę. Przymocuj kabel do podpórki nad kamerą, żeby serwo go nie dźwigało.
5.6 Krok po kroku
A1. Przygotuj Maca. Zainstaluj oprogramowanie z sekcji 9.1.
A2. XIAO bez niczego.
- Podłącz tylko XIAO do portu 1. Wpisz sieć w
secrets.hi uruchommake servo-s3(9.3). Nic nie jest podłączone do pinów, a sygnały serw są wyłączone do komendyactive. - Uruchom
make monitor. Zobaczysz adres IP. Zapisz go. - Zmierz M-USB i M-3V3.
- Odłącz USB.
A3. Kamera.
- Wgraj kamerę do Sense:
make camera-sense(sekcja 9.2). - Otwórz w przeglądarce adres z
make monitor. Zobacz obraz. - Zamknij kartę przeglądarki. Strumień obsługuje tylko jednego klienta.
A4. Sygnały bez serw.
- Bez zasilania połącz XIAO, R1, R2, R1', R2' według tabeli 5.4. Nie podłączaj serw.
- Zmierz O-ZWARCIE między szyną czerwoną a niebieską.
- Podłącz XIAO do portu 1. ServoTracker jest już wgrany (A2). Uruchom
make monitor. - Zmierz M-SIG na e22: ok. 0 V.
- Wyślij
active. Zmierz M-SIG na e22 i e28: ok. 0,2–0,3 V. - Wyślij
release. M-SIG wraca do 0 V. Sygnały działają bez ryzyka dla serw.
A5. Jedno SG90 (pan) i ustawienie środka.
- Odłącz USB. Podłącz SG90 pan (sygnał e22, + i − z szyn) oraz C1.
- Podłącz USB. Wyślij
active. Serwo idzie do środka (1500 µs). - Zmierz M-SERWO przy wtyku serwa.
- Wyślij
0.3,0. Serwo rusza przez 0,5 s i staje. - Wyślij
release. Odłącz USB. Załóż orczyk tak, żeby kamera patrzyła prosto do przodu.
A6. Drugie SG90 (tilt). Powtórz A5 dla e28. Do testu wyślij 0,0.3. Załóż orczyk tak, żeby kamera patrzyła poziomo.
A7. Kierunki i Python. Wykonaj test kierunków (sekcja 9.4), potem uruchom Pythona (sekcja 9.5).
5.7 Test MVP-A (zaliczony, gdy wszystko jest prawdą)
- W oknie Pythona widać obraz i kropki na telefonie.
- Po
akamera obraca się w stronę telefonu: lewo, prawo, góra, dół. - Gdy telefon wyjdzie z kadru, kamera staje (
SEARCH_ENABLED = false). - Po
dkamera stoi. - Przez 10 minut: brak resetu XIAO i brak komunikatu macOS o USB.
- SG90 są najwyżej lekko ciepłe.
6. Wariant B: XIAO z USB, MG996R z zewnętrznego zasilania
6.1 Schemat
MacBook Air ── USB ── XIAO ── D0 → R1/R2 → sygnał pan
│ D1 → R1'/R2' → sygnał tilt
└─ GND ── przewód odniesienia ──┐
│
B6 (DC 5,0 V, limit 2–3 A) lub UBEC (zworka 5 V, wejście z B6 12 V)
(+) ─────────────── SZYNA SERW + ── C1 + R3 ── MG996R pan (+), MG996R tilt (+)
(−) ─────────────── SZYNA SERW − ──────────────┴── MG996R (−) ×2, przewód odniesienia
Pin 5V XIAO nie łączy się z szyną serw. Wspólna jest tylko masa.
6.2 Szyna serw na płytce uniwersalnej
To pierwsze prawdziwe lutowanie. Użyj kawałka płytki 7×9 cm.
- Sprawdź w trybie ciągłości, jak połączone są pola płytki. Płytka z pojedynczymi polami nie ma połączeń jak płytka stykowa.
- Wlutuj złącze ARK4: zacisk 1 = +5 V wejście, zacisk 2 = GND wejście, zacisk 3 = GND odniesienia do XIAO.
- Wlutuj dwie listwy goldpin 3-pin na wtyki serw. Kolejność pinów: GND, +5 V, sygnał (jak w wtyku: brązowy, czerwony, pomarańczowy).
- Połącz wszystkie piny +5 V ze sobą i z zaciskiem 1. Połącz wszystkie GND ze sobą i z zaciskami 2 i 3. Na prąd serw użyj przewodu 20–22 AWG albo grubej ścieżki z cyny.
- Wlutuj C1 1000 µF najwyżej 2 cm od goldpinów. Pasek „−” do GND.
- Wlutuj R3 1 kΩ równolegle do C1.
- Opisz płytkę: „SERWA 5 V”.
- Bez zasilania zmierz O-ZWARCIE i sprawdź ciągłość każdego pinu.
6.3 Źródło zasilania serw
Opcja 1 (najbezpieczniejsza): B6 w trybie wyjścia DC.
- Odłącz wszystkie akumulatory od B6.
- Podłącz zasilacz 12 V do wejścia B6.
- Wybierz wyjście DC. Ustaw 5,0 V i 2 A.
- Zmierz M-ZASIL bez obciążenia.
- Zatrzymaj wyjście. Podłącz szynę serw. Włącz wyjście.
- Jeśli serwa drgają lub stają w ruchu, ustaw 3 A.
Opcja 2: UBEC zasilany z B6. Tak testujesz UBEC, który trafi do węzła.
- Ustaw zworkę UBEC na 5 V.
- Ustaw wyjście DC w B6 na 12 V i 2 A. Podłącz wejście UBEC.
- Zmierz M-ZASIL na wyjściu UBEC bez obciążenia.
- Wyłącz. Podłącz szynę serw.
6.4 Krok po kroku
- Zdejmij orczyk z MG996R. Zamocuj korpus (imadło, zacisk, taśma).
- Bez zasilania: XIAO na płytce stykowej jak w 5.4, ale bez przewodu nr 2 (5V XIAO → szyna czerwona), bez C1 i bez SG90. Pin 5V XIAO zostaje niepodłączony. Schemat montażu, rozdział 05, pokazuje każdy przewód.
- Przewody: e22 → sygnał pan na szynie serw. Zacisk 3 (GND odniesienia) → prawa szyna niebieska płytki stykowej.
- Zmierz O-MASA.
- Podłącz XIAO do Maca. Włącz zasilanie serw.
- Wyślij
active. Zmierz M-SERWO w spoczynku. - Wyślij
0.3,0kilka razy. Zmierz M-SERWO w ruchu: ≥ 4,8 V. - Wyślij
release. Wyłącz zasilanie serw. Odłącz USB. Zmierz M-OFF. - Dodaj drugie MG996R (e28). Powtórz.
6.5 Test MVP-B
Uruchom Pythona i śledź telefon przez 10 minut, oba serwa w ruchu. Zaliczone, gdy:
- M-SERWO w ruchu ≥ 4,8 V,
- serwa nie drgają,
- XIAO się nie resetuje,
- zasilacz można dotknąć przez 5 sekund.
Dopiero potem montuj serwa w wydrukach (sekcja 8) i poszerzaj limity (sekcja 9.4).
7. Wariant C: akumulator
7.1 Schemat zasilania węzła
┌────────── P309 na złączu balansera (alarm 3,5 V/ogniwo)
LiPo 3S 2200 mAh ───┤
XT60 (+) ── F1 5 A ── TP-B ──┬── UBEC IN+ → UBEC OUT 5,0 V → SZYNA SERW (C1, R3) → pan, tilt
├── LM2596 IN+ → OUT 5,2 V → SZYNA LOGIKI (C2 470 µF)
│ ├── kamera: ESP32-CAM 5V
│ │ albo D1' 1N5819 (pasek do Sense) → Sense 5V
│ └── D1 1N5819 (pasek do XIAO) → XIAO 5V
└── (opcja) R5 47 kΩ ─┬─ R6 10 kΩ ── GND
└── XIAO D3
XT60 (−) ──────────────── GND, punkt gwiazdy ──┬── UBEC IN−
├── LM2596 IN−
└── R6
Każdy węzeł ma dwa zasilania: UBEC (lub LM2596 z radiatorem) dla serw i LM2596 dla logiki. Serwa nie mogą resetować XIAO.
Opcja z BATTERY-MVP.md (schemat montażu, rozdział 08): za F1 wyłącznik DC S1 (min. 5 A, 24 V DC) i dioda D2 SB540 (pasek w stronę przetwornic) chroniąca przed odwrotną polaryzacją. D2 to inna dioda niż D1 (1N5819 przed pinem 5V XIAO).
7.2 Wiązka bez akumulatora
OSTRZEŻENIE: Akumulator leży w torbie LiPo, daleko od stołu, przez cały czas budowy wiązki.
- Porównaj wzrokiem pigtail XT60 z wtykiem akumulatora. Upewnij się, że pasują (męski/żeński). Nie wkładaj ich do siebie.
- Nasuń koszulki termokurczliwe na przewody przed lutowaniem.
- Wlutuj oprawkę bezpiecznika w przewód +, najwyżej 5 cm od XT60. Bezpiecznik 5 A.
- Zrób punkt rozdziału (płytka uniwersalna z ARK albo lutowane połączenia): +BAT do UBEC IN+ i LM2596 IN+, −BAT do UBEC IN− i LM2596 IN−.
- Opisz punkt pomiarowy TP-B (za bezpiecznikiem).
- Zmierz O-REG na UBEC i na LM2596.
- Zmierz O-ZWARCIE między +BAT a −BAT: odczyt rośnie (kondensatory przetwornic), nie stałe 0 Ω.
- Sprawdź ciągłość: pin + XT60 ↔ IN+ UBEC (pisk), pin − XT60 ↔ IN− UBEC (pisk), + ↔ − (brak pisku).
7.3 Ustaw LM2596 logiki przed akumulatorem
- Zasil LM2596 z wyjścia DC B6 (12 V, 1 A). Bez obciążenia.
- Kręć śrubką i patrz na miernik. Ustaw 5,2 V. Nowa przetwornica może być ustawiona dużo wyżej.
- Wyłącz i włącz. Zmierz ponownie.
- Zaklej śrubkę taśmą kaptonową. Opisz: „5,2 V LOGIKA”.
7.4 Pierwsze podłączenie akumulatora
- Odłącz obie szyny (serw i logiki) od przetwornic.
- Podłącz P309 do złącza balansera. Sprawdź M-OGNIWA.
- Podłącz XT60. Zmierz M-BAT na TP-B.
- Zmierz M-ZASIL na wyjściu UBEC (4,9–5,1 V) i LM2596 (5,1–5,3 V).
- Odłącz XT60. Zmierz M-OFF.
7.5 XIAO i kamera z akumulatora
OSTRZEŻENIE: Gdy XIAO (sterownik lub kamera Sense) ma zasilanie z akumulatora, nie podłączaj USB, chyba że między LM2596 a pinem 5V tej płytki jest dioda (D1 lub D1'). Najprościej: do wgrywania programu odłącz XT60, potem podłącz USB.
- Bez zasilania wykonaj połączenia kamery. Kamera Sense (węzeł 0): - LM2596 OUT+ → D1' anoda. D1' katoda (pasek) → pin 5V Sense. - LM2596 OUT− → GND Sense. - C2 470 µF równolegle przed diodą: nóżka „+” do anody D1', nóżka z paskiem do GND. Nie w szereg.
Albo ESP32-CAM (węzeł 1): - LM2596 OUT+ → pin 5V ESP32-CAM. - LM2596 OUT− → pin GND ESP32-CAM. - C2 470 µF równolegle: nóżka „+” do 5V kamery, nóżka z paskiem do GND kamery. Nie w szereg. 2. Połączenia sterownika: - LM2596 OUT+ → D1 anoda. D1 katoda (pasek) → pin 5V XIAO. - LM2596 OUT− → GND XIAO. 3. Podłącz XT60. Zmierz M-XIAO-BAT (4,7–5,0 V), M-3V3, M-CAM. 4. XIAO łączy się z Wi-Fi. Kamera nadaje obraz. 5. Odłącz XT60.
7.6 Serwa z akumulatora i test MVP-C
- Bez zasilania podłącz szynę serw do UBEC. Sprawdź O-MASA.
- Podłącz XT60. Uruchom Pythona. Naciśnij
a. - Śledź telefon przez 15 minut. Co 5 minut sprawdź M-BAT i M-OGNIWA.
- Naciśnij
d. Odłącz XT60. Odłącz P309.
Zaliczone, gdy: brak resetów, M-SERWO w ruchu ≥ 4,8 V, ogniwa ≥ 3,7 V po teście, UBEC i LM2596 da się dotknąć przez 5 sekund.
Czas pracy (szacunek): akumulator ma ok. 24 Wh. Do 3,5 V na ogniwo zużyjesz ok. 20 Wh. Węzeł pobiera ok. 3,5–7 W. To daje ok. 3 godziny lub więcej. Zmierz i zapisz rzeczywisty czas.
7.7 Monitor akumulatora w firmware (opcja)
- Wlutuj R5 47 kΩ od TP-B do punktu P i R6 10 kΩ od P do GND.
- Podłącz P do XIAO D3 (GPIO4). XIAO C3: do D1 (GPIO3). Zmierz napięcie P: M-BAT × 10/57.
- W ServoTracker ustaw
BATTERY_ADC_PIN = 4(XIAO C3:3). - Po 3 sekundach poniżej 10,5 V firmware zatrzymuje ruch i odrzuca
active.
Jeśli zestaw rezystorów nie ma 47 kΩ, użyj 10 kΩ / 2,2 kΩ i zmień BATTERY_DIVIDER na (10.0f + 2.2f) / 2.2f.
7.8 Po pracy
- Naciśnij
d, potem odłącz XT60. - Odłącz P309.
- Zmierz M-OFF.
- Przechowuj pakiet w torbie LiPo. Po kilku dniach bez używania użyj programu STORAGE.
8. Wersja produkcyjna na wydrukach
8.1 Adaptery do MG996R
Twoje wydruki mają gniazda pod silniki krokowe 28BYJ-48. MG996R ma prostokątny korpus i inne otwory. Zaprojektuj adaptery w CameraNode.f3d.
- Zmierz swoje serwo suwmiarką: korpus, rozstaw otworów w uszach, położenie wału.
- Zaprojektuj płytkę adaptera mocowaną do istniejących otworów po 28BYJ-48.
- Ustaw oś wału serwa dokładnie w osi starego wału.
- Przykręć drukowane koło zębate do okrągłego orczyka. Nie drukuj otworu z wielowypustem.
- Drukuj koła zębate z podstawowego PLA, nie z PLA silk.
- Sprawdź zazębienie i luz bez zasilania. Obróć mechanizm ręką (bez serwa w środku).
8.2 Płytka lutowana
- Przed rozbiórką płytki stykowej zrób zdjęcia i opisz każdy przewód.
- Najpierw przenieś szyny zasilania, potem sygnały.
- XIAO i kamerę osadź w gniazdach goldpin żeńskich. Moduły będą wymienne.
- Serwa podłączaj przez goldpiny męskie, akumulator przez XT60, zasilanie przez ARK.
- Sprawdź każde połączenie w trybie ciągłości. Sprawdź też brak połączenia między sąsiednimi ścieżkami.
8.3 Montaż w wydrukach
- Ciepło: UBEC i LM2596 nie mogą dotykać PLA. PLA mięknie w ok. 55–60 °C. Montuj na dystansach na mosiężnych insertach M3.
- Kompas (GY-271): na płytce kamery, co najmniej 5–10 cm od UBEC, serw i przewodów akumulatora. W pobliżu używaj śrub mosiężnych, nylonowych lub nierdzewnych A2.
- IMU (MPU-6050): na płytce kamery, bo ma się pochylać z kamerą. Zapisz kierunek osi.
- Przewody przez oś obrotu: serwo obraca się ok. 160°. Zostaw pętlę zapasu. Przewody nie mogą przechodzić przez przekładnię.
- Akumulator: na części obrotowej, rzep i opaska. Dostęp do XT60 (to Twój wyłącznik) i do bezpiecznika.
- Kamera Sense: wydruki mają miejsce na ESP32-CAM (ok. 27 × 40 mm). Sense ma ok. 21 × 18 mm. Zaprojektuj w CAD podkładkę z otworem na obiektyw. Mocuj na dystansach (szczelina powietrza, sekcja 2.5). Obiektyw musi leżeć w osi pochylenia jak dawniej ESP32-CAM.
- Anteny: anteny kamery i XIAO z dala od metalu i przewodów zasilania. Nie zasłaniaj ich.
- Mocowanie: płytki przykręcaj do insertów. Nie przyklejaj na stałe klejem termoprzewodzącym.
- Etykiety: opisz każde złącze i każdą płytkę.
Złota rada: Po przeniesieniu do wydruków wykonaj wszystkie pomiary z sekcji 12 od nowa. Działająca płytka stykowa nie dowodzi, że lutowana wersja jest poprawna.
Złota rada: W wersji produkcyjnej dodaj później aktualizację firmware przez Wi-Fi (ArduinoOTA). Nie będziesz wtedy podłączać USB do obracającego się węzła z akumulatorem.
9. Oprogramowanie MVP
9.1 Narzędzia na Macu: terminal i make
Na tym Macu wszystko jest już zainstalowane: arduino-cli 1.5.1, pakiet esp32 3.3.12 i biblioteka ESP32Servo 3.2.1. Wersje są zapisane w pliku Makefile w głównym folderze projektu. Każdy build używa tych samych wersji, a GitHub sprawdza kompilację po każdym pushu.
Na innym Macu: brew install arduino-cli, potem make setup. Pakiet zajmuje ok. 6 GB.
Wszystkie komendy uruchamiasz w głównym folderze projektu:
cd ~/AI_Project/Distributed-Camera-Node-Tracking-System
| Komenda | Co robi |
|---|---|
make help |
Lista komend |
make build |
Kompiluje wszystkie programy. Płytka niepotrzebna. |
make camera-sense |
Wgrywa kamerę do XIAO Sense (węzeł 0) |
make servo-s3 |
Wgrywa ServoTracker do XIAO S3 (węzeł 0) |
make servo-c3 |
Wgrywa ServoTracker do XIAO C3 (węzeł 1) |
make camera-esp32cam |
Wgrywa kamerę do ESP32-CAM na podstawce MB (węzeł 1) |
make monitor |
Monitor portu szeregowego. Wyjście: Ctrl+C. |
make ports |
Pokazuje podłączone płytki |
make run |
Uruchamia program w Pythonie |
Ustawienia płytek (PSRAM dla Sense, USB CDC On Boot, partycje) są w Makefile. Nie ustawiasz ich ręcznie.
Złota rada: przy wgrywaniu podłącz tylko jedną płytkę. XIAO S3 i XIAO Sense wyglądają dla komputera tak samo. Jeśli podłączone są dwie płytki, make zatrzymuje się i prosi o port: make servo-s3 PORT=/dev/cu.usbmodemXXXX. make odmawia też wgrania, gdy w secrets.h jest jeszcze przykładowe hasło.
Inne zasady:
- Załóż antenę na XIAO. Wciśnij złącze U.FL prosto, nie przekręcaj.
- Jeśli wgrywanie się nie udaje: przytrzymaj B (BOOT) na XIAO, podłącz USB, puść B i uruchom komendę ponownie. Po wgraniu naciśnij R (RESET).
- Monitor otwieraj po wgraniu. Jeśli jest pusty, naciśnij R: płytka wypisze adres IP od nowa.
- Wolisz okienka? Arduino IDE 2 też działa. Wybierz te same wersje i ustawienia, co w
Makefile(dla Sense: PSRAM „OPI PSRAM”).
9.2 Kamera XIAO ESP32-S3 Sense — MVP
Program kamery jest w repozytorium: Hardware/Assembly/Sketches/CameraWebServer/. To przykład Espressif z dwiema zmianami: dane Wi-Fi są w secrets.h, a model kamery wybiera się sam według płytki.
- Bez zasilania załóż płytkę rozszerzeń z kamerą na XIAO Sense. Dopasuj złącze B2B i dociśnij do kliknięcia. Załóż antenę.
- W
Hardware/Assembly/Sketches/CameraWebServer/secrets.hwpisz nazwę i hasło sieci 2,4 GHz. Git ignoruje ten plik, a strona go nie publikuje. - Podłącz tylko Sense. Uruchom
make camera-sense. - Uruchom
make monitor. Zobaczysz:Camera Ready! Use 'http://<IP>' to connect. Strumień:http://<IP>:81/stream. - W panelu kamery (
http://<IP>) ustaw rozdzielczość QVGA lub VGA. Większa rozdzielczość = większe opóźnienie i więcej ciepła.
Program obsługuje czujnik OV3660 i sam ustawia dla niego odwrócenie obrazu. Jeśli obraz w Pythonie jest do góry nogami, użyj V-Flip w panelu kamery albo FLIP_VERTICAL w Pythonie (9.5).
Złota rada: Nie używaj pinów D8, D9 i D10 płytki Sense. Dzieli je gniazdo karty SD.
9.2b ESP32-CAM — węzeł 1, po MVP
- Wpisz sieć w
secrets.h(ten sam plik co w 9.2). - Włóż ESP32-CAM w podstawkę MB. Podłącz tylko ją.
- Uruchom
make camera-esp32cam. Podstawka MB zwykle sama włącza tryb wgrywania. - Naciśnij RST. Uruchom
make monitor: zobaczysz adres. Strumień:http://<IP>:81/stream. - W panelu kamery ustaw rozdzielczość QVGA lub VGA i jasność diody LED na 0.
Komunikat Failed to connect lub Timed out waiting for packet header oznacza, że kamera nie weszła w tryb wgrywania. Przytrzymaj IO0 na MB, naciśnij i puść RST, puść IO0. Uruchom komendę ponownie.
9.3 ServoTracker (XIAO)
- W
Hardware/Assembly/Sketches/ServoTracker/secrets.hwpisz nazwę i hasło sieci 2,4 GHz. Jeśli pliku nie ma, uruchommake secrets. - Podłącz tylko XIAO S3. Uruchom
make servo-s3. - Uruchom
make monitor. Firmware pokaże:IP: ..., UDP port 3333. - W monitorze wpisz komendę i naciśnij Enter. Odpowiedź (np.
Mode: ACTIVE) pojawi się w logu. - Komendy (Serial lub UDP 3333):
| Komenda | Działanie |
|---|---|
active |
Serwa startują po kolei w środku, potem śledzenie |
disabled |
Stop, serwa trzymają pozycję |
release |
Brak sygnału serw. Ramię tilt MG996R może opaść. |
x,y |
Błąd celu od −1 do 1. Ruch trwa 0,5 s, potem stop. |
Ustawienia na górze pliku:
| Ustawienie | Domyślnie | Kiedy zmienić |
|---|---|---|
minUs / maxUs |
pan 1200–1800, tilt 1300–1700 | Po teście limitów (9.4) |
direction |
+1 | Gdy kamera rusza w złą stronę |
gearRatio |
1,0 | 2,0, jeśli koło 20-zębne napędza 40-zębne |
TRACK_GAIN_DEG_PER_S |
40 | Zmniejsz do 25, gdy kamera oscyluje |
SEARCH_ENABLED |
false | Na true po pierwszym udanym śledzeniu |
BATTERY_ADC_PIN |
−1 (wyłączony) | Wariant C z dzielnikiem: 4 (XIAO S3), 3 (XIAO C3) |
NODE_ID, NODE_LAT, NODE_LON, BASE_HEADING_DEG |
0 | Dla Unity i drugiego węzła |
Ten firmware kompiluje się bez ostrzeżeń dla XIAO S3 i XIAO C3 (esp32 3.3.12, ESP32Servo 3.2.1). Nie był jeszcze testowany na płytce. Dlatego krok A4 sprawdza sygnały bez serw.
9.4 Test kierunków i limitów
Złota rada: Zły kierunek to najczęstszy błąd śledzenia. Kamera „ucieka” od celu z maksymalną prędkością. Sprawdź kierunki przed uruchomieniem Pythona.
- Wyślij
active. - Wyślij
0.3,0. Kamera (patrząc zza kamery) musi obrócić się w prawo. Jeśli w lewo: wpanzmieńdirectionna −1. - Wyślij
0,0.3. Kamera musi pochylić się w górę. Jeśli w dół: wtiltzmieńdirectionna −1. - Limity: wysyłaj
1,0kilka razy, aż serwo dojdzie domaxUs. Patrz, czy nic nie dotyka. Potem-1,0. Tak samo dla tilt (0,1,0,-1). - Poszerzaj
minUs/maxUsco 50 µs. Zostaw ok. 5° zapasu przed miejscem, gdzie coś dotyka. - Wyślij
release.
9.5 Python na Macu
Na tym Macu są już zainstalowane ultralytics i opencv. Na innym Macu: pip install ultralytics opencv-python.
- W
Software/Python/YOLOProcessing.pywSYSTEM_CONFIGwpisz: -cam_url:http://<IP kamery>:81/stream-motor_ip: IP XIAO zmake monitor - Na czas MVP usuń drugi wpis (węzeł 1).
TARGET_CLASSES = [67]śledzi telefon.[0]śledzi osobę.- Jeśli obraz jest odwrócony: obróć kamerę albo ustaw
FLIP_VERTICAL = True. - Uruchom:
make run(albocd Software/Python && python3 YOLOProcessing.py). Pierwsze uruchomienie pobiera modelyolov8n.pt(potrzebny internet). - Kliknij okno obrazu. Klawisze działają tylko w aktywnym oknie:
-
a— uzbrój serwa (active) -d— stop (disabled) -q— wyjście (najpierw wysyładisabled)
Złota rada: Zarezerwuj w routerze stałe adresy IP (rezerwacja DHCP) dla XIAO i kamery. Inaczej po restarcie routera adresy w Pythonie przestaną działać.
9.6 Po MVP
- Czujniki: dodawaj po jednym ze szkicem SensorScan. Zmierz M-I2C. Szczegóły: sekcja 10 w BOM.md.
- Unity: ServoTracker już wysyła dane na port 4444 Maca. Ustaw w Unity swój punkt początkowy mapy (domyślnie jest Los Angeles). Wpisz
NODE_LAT/NODE_LONzmierzone na miejscu iBASE_HEADING_DEG. - Drugi węzeł: XIAO ESP32-C3 + ESP32-CAM (sekcje 9.7 i 9.2b).
9.7 Drugi węzeł: XIAO ESP32-C3
XIAO C3 ma ten sam rozmiar i układ pinów co XIAO S3. Inne są tylko numery GPIO i piny startowe.
| Pin XIAO | GPIO C3 | Użycie w węźle 1 | Uwagi |
|---|---|---|---|
| D0 | GPIO2 | Nie używaj | Pin startowy. Rezystor 10 kΩ do GND blokuje start. |
| D1 | GPIO3 | Pomiar akumulatora (opcja) | ADC1. BATTERY_ADC_PIN = 3 |
| D2 | GPIO4 | Serwo pan | |
| D3 | GPIO5 | Serwo tilt | ADC2: nie mierz tu napięcia |
| D4 / D5 | GPIO6 / GPIO7 | SDA / SCL | Jak w S3 |
| D6 / D7 | GPIO21 / GPIO20 | GPS (TX / RX) | Jak w S3 |
| D8 / D9 | GPIO8 / GPIO9 | Nie używaj | Piny startowe. D9 to przycisk BOOT. |
- Załóż antenę z zestawu.
- W ServoTracker ustaw
NODE_ID = 1. Piny zmieniać nie trzeba: firmware rozpoznaje C3 i używa D2 (pan) i D3 (tilt). - Podłącz tylko XIAO C3. Uruchom
make servo-c3, potemmake monitor. - Płytka stykowa jak w 5.4, z dwiema zmianami: przewód nr 4 idzie z a3 (D2), a przewód nr 8 z a4 (D3). Rzędy 1 i 2 (D0, D1) zostają bez przewodów.
- Zmierz M-SIG jak w kroku A4. Zasilanie i diody jak dla XIAO S3.
Firmware dla C3 kompiluje się bez ostrzeżeń. Na płytce nie był jeszcze testowany.
9.8 Grove Vision AI V2 (etap E, po MVP)
Moduł sam wykrywa obiekt w obrazie i podaje środek ramki (x, y) do XIAO przez I²C. Wtedy węzeł śledzi bez Maca i bez strumienia obrazu. Unity dalej dostaje te same dane z portu 4444, bo do triangulacji potrzebne są tylko kąty.
Zanim zaczniesz:
- Moduł nie ma własnej kamery. Potrzebuje kamery na taśmie CSI (zestaw Seeed ma kamerę OV5647). Sprawdź, czy masz ją w pudełku.
- Model wgrywasz przez stronę SenseCraft AI w przeglądarce Chrome lub Edge (Safari nie obsługuje Web Serial). W czasie wgrywania nie przełączaj karty.
- Gotowe modele rozpoznają np. ludzi. Do dronów trzeba wytrenować własny model.
- Adres I²C modułu to 0x62. Nie koliduje z MPU-6050 (0x68), GY-271 (0x0D), BMP180 (0x77) ani TCA9548A (0x70).
Kroki:
- Wgraj model i sprawdź wykrywanie na stronie SenseCraft AI, z modułem na USB, bez XIAO.
- Połącz moduł z XIAO według wiki Seeed. Przed połączeniem zmierz M-I2C na SDA i SCL modułu: maksymalnie 3,4 V.
- Zainstaluj bibliotekę Seeed_Arduino_SSCMA. Uruchom przykład, który drukuje
AI.boxes().xiyto środek ramki. - Przesuń obiekt do lewej, prawej, górnej i dolnej krawędzi obrazu. Zapisz minimalne i maksymalne
xiy. Z nich policzysz błąd −1..1 dla ServoTracker.
To nowy firmware. Zacznij dopiero, gdy MVP-A i MVP-B są zaliczone.
10. Diagnostyka
| Objaw | Najczęstsza przyczyna | Co zrobić |
|---|---|---|
make ports nie pokazuje płytki |
Kabel tylko do ładowania | Inny kabel. XIAO: przytrzymaj B, podłącz USB, puść B |
Found 2 USB boards |
Podłączone dwie płytki | Odłącz jedną albo dodaj PORT=... |
Enter your 2.4 GHz Wi-Fi in ... secrets.h |
W secrets.h jest przykładowe hasło |
Wpisz swoją sieć |
Failed to connect przy wgrywaniu |
Płytka nie weszła w tryb wgrywania | XIAO: B + USB. ESP32-CAM: IO0 + RST (9.2b) |
| Pusty monitor | Płytka wypisała IP przed otwarciem monitora | Naciśnij R (RESET) przy otwartym monitorze |
secrets.h: No such file |
Brak pliku | make secrets |
| XIAO nie łączy się z Wi-Fi | Sieć 5 GHz lub tylko WPA3; brak anteny | Sieć 2,4 GHz, WPA2; załóż antenę |
| Serwo nie reaguje | Brak active, brak wspólnej masy, zła kolejność przewodów |
Wyślij active; O-MASA; M-SIG |
| Serwo drga w miejscu | Spadki napięcia, luźny styk | M-SERWO w ruchu; C1; krótsze przewody |
| XIAO resetuje się przy ruchu | Serwa i XIAO na jednym zasilaniu; przeciążony USB | Wariant B; osobne szyny |
| macOS wyłącza urządzenia USB | Za duży prąd z portu | Mniej odbiorników na USB; MG996R nie z USB; wyjmij C1 przy podłączaniu |
| Kamera ucieka od celu | Zły kierunek lub lustrzany obraz | Test 9.4; wyłącz H-Mirror w kamerze |
| Kamera oscyluje wokół celu | Za duże wzmocnienie | TRACK_GAIN_DEG_PER_S 40 → 25 |
| Python: „Connecting...” | Zły IP; otwarta karta przeglądarki | Zamknij przeglądarkę; sprawdź IP |
| Python nic nie wykrywa | Zła klasa; słabe światło | TARGET_CLASSES; więcej światła |
Camera init failed lub Camera probe failed (Sense) |
PSRAM wyłączone; płytka kamery źle osadzona | Tools → PSRAM: OPI PSRAM; bez zasilania dociśnij złącze B2B |
| XIAO C3 nie startuje lub nie przyjmuje programu po podłączeniu serw | Serwo lub rezystor na D0, D8 albo D9 | Serwa na D2 i D3 (9.7) |
| Sense bardzo gorący | Długie nadawanie, wysoka rozdzielczość, brak radiatora | Radiator, QVGA, szczelina powietrza (2.5) |
| „Brownout detector was triggered” (kamera) | Słabe zasilanie kamery | Inny port lub kabel; C2 w wariancie C |
| Przetwornica gorąca | Przeciążenie lub zwarcie | Odłącz; O-ZWARCIE; test z sekcji 1.12 w BOM.pl.md |
| Ujemny odczyt napięcia | Odwrócone sondy lub przewody | Stop; sprawdź polaryzację |
| P309 piszczy | 3,5 V na ogniwo | d, odłącz XT60, naładuj |
11. Zakupy do MVP
| Do etapu | Część | Uwagi |
|---|---|---|
| A | 2× kabel USB-C ↔ USB-C do danych | XIAO i XIAO Sense. Jeden długi (1 m) i miękki. |
| A | Listwy goldpin męskie 2,54 mm | XIAO (jeśli bez pinów), szyna serw |
| A (opcja) | Tester USB-C z pomiarem prądu | Widzisz prąd z portu Maca |
| A (opcja) | Końcówki krokodylkowe do sond | Pomiar jedną ręką |
| B | Zasilacz 12 V, min. 5 A, z wtykiem do B6 | Ładowanie i zasilacz warsztatowy |
| B | Przewód silikonowy 20 AWG, czerwony i czarny | Zasilanie serw |
| C | Oprawka bezpiecznika mini + bezpieczniki 5 A | Jedna na węzeł |
| C | Dioda Schottky 1N5819, kilka sztuk | D1 dla XIAO, D1' dla Sense |
| C | LM2596, 1 szt. (2 dla dwóch węzłów) | Zasilanie logiki |
| C | Torba ognioodporna LiPo | Przed pierwszym ładowaniem |
| C | Przewód silikonowy 18 AWG | Akumulator → bezpiecznik → przetwornice |
| D | Topnik bezmyciowy; goldpin żeńskie; dystanse M3 | Lutowanie i montaż |
| Węzeł 1 | Podstawka ESP32-CAM-MB + kabel USB-C → micro-USB do danych | Tylko dla ESP32-CAM. Do MVP niepotrzebna (kamera Sense). |
| E | Kamera CSI do Grove Vision AI V2 (np. OV5647), jeśli jej nie masz | Moduł nie ma własnej kamery |
12. Karta pomiarów
Puste pole = jeszcze nie zmierzone. Po każdej zmianie w układzie mierz ponownie.
| Kod | Wariant | Data | Wynik | Uwagi |
|---|---|---|---|---|
| M-USB | A | |||
| M-3V3 | A | |||
M-SIG przed / po active |
A | |||
| O-ZWARCIE szyny 5V USB | A | |||
| M-SERWO spoczynek / ruch (SG90) | A | |||
| Kierunki pan / tilt | A | |||
| Limity pan (min / max µs) | B | |||
| Limity tilt (min / max µs) | B | |||
| M-ZASIL (B6 lub UBEC) | B | |||
| O-MASA | B | |||
| M-SERWO spoczynek / ruch (MG996R) | B | |||
| Test 10 min: resety / temperatura | B | |||
| O-REG UBEC / LM2596 | C | |||
| M-OGNIWA 1 / 2 / 3 | C | |||
| M-BAT start / po 15 min | C | |||
| M-ZASIL UBEC / LM2596 | C | |||
| M-XIAO-BAT | C | |||
| M-CAM | C | |||
| M-OFF | wszystkie | |||
| Czas pracy na akumulatorze | C |