Skip to the content
PCBKitNew board
2 layersRoboticArm, the printed circuit board in 3D

# Robotic Arm Poniższy projekt przedstawia roboramie, wykonane w ramach projektu zaliczeniowego na przedmiot Systemy mikroprocesorowe II.

Copper layers
2
Thickness
1.6 mm
Parts
46
Nets
74
Pads
214
Tracks, vias
4, 0
Routed
Yes
KiCad
KiCad 7 (file 20221018)
Created
20 Dec 2023
Updated
27 Jan 2024

Overview

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.

Main components

1

README

README.md

Robotic Arm

Poniższy projekt przedstawia roboramie, wykonane w ramach projektu zaliczeniowego na przedmiot Systemy mikroprocesorowe II.

Wstęp

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.

  • W języku C, zbudowana została aplikacja na µP, która zawiera niskopoziomowe algorytmy sterowania silnikami, wykrywania przeciążeń serw oraz poprzez moduł Wi-Fi łączy się z siecią domową i wystawia stronę HTTP, będącą HID.
  • Język JS, odpowiada, za rysowanie aktualnej pozycji ramienia, wyznaczenie położenia w osiach XYZ oraz odczytanie i wysłanie wartości kątów, jakie mają być ustawione w ramieniu.

Build

!!! Wszystkie operację należy wykonywać w pliku Src !!!

Aby zbudować projekt należy:

  1. Stworzyć pliki strony internetowej
bash
$ python makefsdata.py
  1. W pliku main.c, należy nadać NAZWĘ i HASŁO do sieci, z którą chcemy aby połączyła się malinka
c
18 #include "PASS.h"
19 #ifndef SSID
20 #define SSID mySSID // Enter yours SSID
21 #define PASS myPASS // Enter yours PASSWORD
22 #endif

Alternatywnie w dowolnym folderze Src, można stworzyć plik PASS.h, w którym należy zadeklarować SSID oraz PASS

c
#define SSID mySSID // Enter yours SSID
#define PASS myPASS // Enter yours PASSWORD
  1. Zbudować projekt
bash
$ mkdir -p build && cd $_
$ cmake ..
$ make
  1. Wgrać projekt do płytki raspberry PI Pico W
bash
$ cp build/main.uf2 /media/$USER/RPI-RP2

Poprawne uruchomienie

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

Błedy

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.

NrKomunikatOznaczenie błęduWyjaśnienieCzy zatrzyma procesor
1.WiFi module is initERR_OKPonowna próba inicjalizacji WiFiNie
2.WiFi init failedERR_CONNBład komunikacji między RP2040 a CYW43TAK
3.Cannot connected to SSIDERR_CONNBłąd podczas proby nawiązania połączenia z siecią WiFiTAK
4.Open http serverERR_OKZakończono proces łączenia z WiFi, a serwer HTTP został postawiony na przydzielonym adresie IPNie
5.Servo are initERR_OKPonowna próba inicjalizacji serwNie
6.Over current protection is turn onERR_OKPonowna próba włączenia ochrony przeciw przetężeniowejNie

Schemat

W schemacie układu można wyróżnić 4 główne bloki

  • Raspberry Pi PICO W,
  • zestaw 4 serwo mechanizmów,
  • źródło napięcia referencyjnego,
  • układ wykrywania przekroczenia prądu
    • 4 rezystory do pomiaru prądu,
    • 4 wzmacniacze operacyjne, mierzące spadek napięcia na rezystancji pomiarowej,
    • 4 komparatory, które porównują napięcie z wzmacniaczy z napięciem referencyjnym.

Działanie

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.

Pętle programu

mermaid
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:storeNewAngel

Podsumowanie

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

Nie udało się zrealizować

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.

Parts

46
QtyValueFootprintReferences
81kResistor_SMD:R_0805_2012MetricR5, R6, R7, R8, R13, R15, R17, R19
84.7kResistor_SMD:R_0805_2012MetricR9, R10, R11, R12, R14, R16, R18, R20
5LM358Package_SO:SO-8_3.9x4.9mm_P1.27mmU2, U3, U4, U5, U6
40.6Resistor_SMD:R_0805_2012MetricR1, R2, R3, R4
4100kResistor_SMD:R_0805_2012MetricRV1, RV2, RV3, RV4
4220Resistor_SMD:R_0805_2012MetricR24, R25, R26, R27
4LEDLED_THT:LED_D2.0mm_W4.8mm_H2.5mm_FlatTopD2, D3, D4, D5
4Motor_ServoConnector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_HorizontalM1, M2, M3, M4
110kResistor_SMD:R_0805_2012MetricR21
11N4001Diode_SMD:D_0805_2012MetricD1
122kResistor_SMD:R_0805_2012MetricR23
147kResistor_SMD:R_0805_2012MetricR22
1PicoRaspberry PI Pico:RPi_Pico_SMD_THU1

Questions

What parts does the RoboticArm use?

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.

Where can I download the RoboticArm KiCad files?

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.

Can I use the RoboticArm design in my own project?

Its repository states no licence, so its author keeps all rights: ask Luk9091 before reusing the design.

Similar boards

  • 2 layers132.1 × 45.7 mmIPoS, the printed circuit board in 3D

    IPoS

    peterheinrich/InternetOverSpaghetti

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

    42 parts342
  • 2 layers68.8 × 53.6 mmZArduino, the printed circuit board in 3D

    ZArduino

    zmaker/arduino_cookbook

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

    46 parts269
  • 2 layers152 × 88 mmRFBitBangSMT, the printed circuit board in 3D

    RFBitBangSMT

    profdc9/RFBitBanger

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

    271 parts222
  • 2 layers118 × 103.5 mmEV Charger2, the printed circuit board in 3D

    EV Charger2

    fotherja/EV_Charger

    Arduino Uno Code for EV Charger

    62 parts167MIT
  • 2 layers113 × 62.2 mmFullScope, the printed circuit board in 3D

    FullScope

    tvlad1234/pillScopePlus

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

    15 parts165Apache-2.0
  • 2 layers75.2 × 61.1 mmHelios, the printed circuit board in 3D

    Helios

    Grix/helios_dac

    Helios Laser DAC

    102 parts132
  • 2 layers144.1 × 182.2 mmSHVC CPU-01, the printed circuit board in 3D

    SHVC CPU-01

    starlightk7/OpenSFC

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

    498 parts114CERN-OHL-S-2.0
  • 2 layers100 × 85 mmVNA, the printed circuit board in 3D

    VNA

    profdc9/VNA

    Vector Network Analyzer based on the STM32F103C8T6 bluepill

    178 parts93