
IPoS
peterheinrich/InternetOverSpaghetti
Transmitting IP packages over a pair of spaghetti thus demonstrating how media independent IP really is.

# Robotic Arm Poniższy projekt przedstawia roboramie, wykonane w ramach projektu zaliczeniowego na przedmiot Systemy mikroprocesorowe II.
RoboticArm is an open-source printed circuit board by Luk9091, from the Luk9091/RoboticArm repository on GitHub. It is a 2-layer board with 46 parts on 74 nets, routed with 4 tracks and 0 vias.
It is built around the LM358. Its parts include 27 resistors, 6 ICs and 5 diodes. It belongs with the RP2040 boards of this library.
Poniższy projekt przedstawia roboramie, wykonane w ramach projektu zaliczeniowego na przedmiot Systemy mikroprocesorowe II.
Tematem projektu jest robotyczne ramie, z możliwością sterowania po HTTP, Ramie, zostało wydrukowane z projektu:
https://www.thingiverse.com/thing:1015238
Sterowaniem zajmuje się mikroprocesor RP2040 z modułem Wi-Fi cyw43. A projekt rozłożony jest między dwa języki C i JavaScript.
!!! Wszystkie operację należy wykonywać w pliku Src !!!
Aby zbudować projekt należy:
$ python makefsdata.pymain.c, należy nadać NAZWĘ i HASŁO do sieci, z którą chcemy aby połączyła się malinka18 #include "PASS.h"
19 #ifndef SSID
20 #define SSID mySSID // Enter yours SSID
21 #define PASS myPASS // Enter yours PASSWORD
22 #endifAlternatywnie w dowolnym folderze Src, można stworzyć plik PASS.h, w którym należy zadeklarować SSID oraz PASS
#define SSID mySSID // Enter yours SSID
#define PASS myPASS // Enter yours PASSWORD$ mkdir -p build && cd $_
$ cmake ..
$ make$ cp build/main.uf2 /media/$USER/RPI-RP2Po poprawnej implementacji, Raspberry Pi PICO W powinno zapalić wbudowaną diodę, a na pinie GPIO26 zostanie wygenerowany przebieg prostokątny o czestotliwosci ≈ 50Hz i wypełnieniu 50%.
Odczyt IP: Po połączeniu na terminalu podłączonym przez serial, zostanie przesłany adres IP.
Alternatywnie adres IP, można także sprawdzić w liście urządzeń na routerze.
Wszelkie błedy, które mogą wystąpić podczas uruchomienia, będą wyświetlane przez serial, a błędy krytyczne mogą zatrzymać cały proces.
| Nr | Komunikat | Oznaczenie błędu | Wyjaśnienie | Czy zatrzyma procesor |
|---|---|---|---|---|
| 1. | WiFi module is init | ERR_OK | Ponowna próba inicjalizacji WiFi | Nie |
| 2. | WiFi init failed | ERR_CONN | Bład komunikacji między RP2040 a CYW43 | TAK |
| 3. | Cannot connected to SSID | ERR_CONN | Błąd podczas proby nawiązania połączenia z siecią WiFi | TAK |
| 4. | Open http server | ERR_OK | Zakończono proces łączenia z WiFi, a serwer HTTP został postawiony na przydzielonym adresie IP | Nie |
| 5. | Servo are init | ERR_OK | Ponowna próba inicjalizacji serw | Nie |
| 6. | Over current protection is turn on | ERR_OK | Ponowna próba włączenia ochrony przeciw przetężeniowej | Nie |
W schemacie układu można wyróżnić 4 główne bloki
Użytkownik przez przeglądarkę łączy się z serwerem WWW stawianym przez malinkę.
Pozwala to na sterowanie każdym z silników, poprzez zadanie dozwolonego kąta.
W momencie, gdy któreś serwo nie może wykonać zadanego ruchu - zaczyna pobierać większy prąd, uruchamiany jest kilku sekundowy alarm.
Jeśli po zakończeniu alarmu serwo nadal pobiera duży prąd, silnik zostaje wyłączony* - a układ czeka na ponowne uruchomienie przez użytkownika.
Informacja o przeciążeniu zostaje oczywiście wysłane do użytkownika, poprzez stronę WWW.

*chwytak, nie zostaje wyłączony a jego zgięcie ograniczone jest do kąta, którego osiągnięcie jeszcze nie przekraczało wartości progowej.
stateDiagram
[*] --> GlobalInit
GlobalInit --> StartHTTP
StartHTTP --> InBuildLED_ON
InBuildLED_ON --> servoMoveTo(servo.angle)
servoMoveTo(servo.angle) --> run_OverCurrentTimer:if (servo.OverCurrent)
run_OverCurrentTimer --> servoMoveTo(servo.angle)
servoMoveTo(servo.angle) --> servoMoveTo(servo.angle):else
state run_OverCurrentTimer{
[*] --> checkOverCurrent:wait
checkOverCurrent --> stopServo:if (overCurrent)
stopServo --> [*]
checkOverCurrent --> [*]
}
UserRefreshHTTP --> sendWebPage
UserSendDataByHTTP --> servo.angle:storeNewAngelProjekt, jest udaną próbą stworzenia ramienia robota, pokazującym, że odpowiednia kontrola nawet tanich serwomechanizmów, pozwala na osiągnięcie jedno stopniowej precyzji. Pomiar prądu w celu zabezpieczenia układu przed uszkodzeniem okazał się także strzałem w dziesiątkę. Ponieważ pozwala nie tylko odciążyć zasoby wbudowane w kontroler, ale także przy odpowiedniej regulacji ustroju pomiarowego możne określać czy silniki pracują poprawnie. Przykładowo, można sprawdzić czy silnik jest podłączony - w trakcie normalnej pracy silniki zawsze pobierają minimum 10mA.
Ostatecznie nie udało się odczytywać na bieżąco kata ustawionego na potencjometrze, ze względu na za duże wachania odczytanych wartości. Zastosowanie znacznego uśredniania nie wchodzi w grę w momencie gdy układ ma pracować z szybkościami 100 deg/s.
| Qty | Value | Footprint | References |
|---|---|---|---|
| 8 | 1k | Resistor_SMD:R_0805_2012Metric | R5, R6, R7, R8, R13, R15, R17, R19 |
| 8 | 4.7k | Resistor_SMD:R_0805_2012Metric | R9, R10, R11, R12, R14, R16, R18, R20 |
| 5 | LM358 | Package_SO:SO-8_3.9x4.9mm_P1.27mm | U2, U3, U4, U5, U6 |
| 4 | 0.6 | Resistor_SMD:R_0805_2012Metric | R1, R2, R3, R4 |
| 4 | 100k | Resistor_SMD:R_0805_2012Metric | RV1, RV2, RV3, RV4 |
| 4 | 220 | Resistor_SMD:R_0805_2012Metric | R24, R25, R26, R27 |
| 4 | LED | LED_THT:LED_D2.0mm_W4.8mm_H2.5mm_FlatTop | D2, D3, D4, D5 |
| 4 | Motor_Servo | Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Horizontal | M1, M2, M3, M4 |
| 1 | 10k | Resistor_SMD:R_0805_2012Metric | R21 |
| 1 | 1N4001 | Diode_SMD:D_0805_2012Metric | D1 |
| 1 | 22k | Resistor_SMD:R_0805_2012Metric | R23 |
| 1 | 47k | Resistor_SMD:R_0805_2012Metric | R22 |
| 1 | Pico | Raspberry PI Pico:RPi_Pico_SMD_TH | U1 |
46 parts, built around the LM358. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.
From the Luk9091/RoboticArm repository on GitHub, at the commit this page was made from: the board is Schematic/RoboticArm/RoboticArm.kicad_pcb and its schematic Schematic/RoboticArm/RoboticArm.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Its repository states no licence, so its author keeps all rights: ask Luk9091 before reusing the design.

peterheinrich/InternetOverSpaghetti
Transmitting IP packages over a pair of spaghetti thus demonstrating how media independent IP really is.

zmaker/arduino_cookbook
gli sketch del nuovo progetto Arduino Cookbook e dei video di YouTube

profdc9/RFBitBanger
A QRP digital transceiver created from readily available parts for off-the-grid maintenance


tvlad1234/pillScopePlus
Oscilloscope based around the STM32F401 Black Pill and a color LCD screen


starlightk7/OpenSFC
OSHW Reproduction Parts related to the Super Famicom / Super Nintendo game console
