Mr.Crab junior v0.2

Czyli o robotach prawie wszystko
ODPOWIEDZ
Awatar użytkownika
SunRiver
Użytkownik
Posty: 1353
Rejestracja: 08 paź 2017, 11:27
Lokalizacja: Festung Oppeln
Kontakt:

Mr.Crab junior v0.2

Post autor: SunRiver »

NA chwile obecną w ramach walki z upałem , powstał mniejszy brat Mr.Craba mianowicie junior.
Po wielu perypetiach dzięki zapałowi kol. Marasa i wykorzystaniu drukarki 3D powstały puzzle do budowy Juniora.

Obrazek

przez chwilę było zastanawianie się właściwie co to jest i jak to to poskładać ale w końcu ....

Obrazek

Całość napędzają serva SG90 sztuk 8 czyli po 2 na nogę.
Zaś sercem jest hmm ten tego ... ESP8266 a dokładnie WEMOS Mini

Obrazek

Na razie soft powstaje i powstaje a całość jest nieco pokraczna , ale .... nabiera sensu i nawet coś się rusza co widać na filmiku.

https://photos.app.goo.gl/99zYPViip9Py6Ltv6

Biorąc pod uwagę iż to tylko wstęp do wiekszego projektu i prototyp rozwojowy nie jest aż tak źle ..
a co wyjdzie zobaczymy ....
gufim
Użytkownik
Posty: 101
Rejestracja: 16 paź 2017, 16:58

Re: Mr.Crab junior v0.2

Post autor: gufim »

Całość już prezentuje się świetnie i powstał super zestaw edukacyjnych klocków .
Awatar użytkownika
SunRiver
Użytkownik
Posty: 1353
Rejestracja: 08 paź 2017, 11:27
Lokalizacja: Festung Oppeln
Kontakt:

Re: Mr.Crab junior v0.2

Post autor: SunRiver »

heheh konkurencja dla Lego :P
Awatar użytkownika
SunRiver
Użytkownik
Posty: 1353
Rejestracja: 08 paź 2017, 11:27
Lokalizacja: Festung Oppeln
Kontakt:

Re: Mr.Crab junior v0.2

Post autor: SunRiver »

Tu macie przykładowy kod dla Mr. Craba
powstał on z Użyciem IDF dla ESP8266 pracuje pod kontrolą rtos
zaś do generowania PWM dla serv używam biblioteki LEDC
  1.  
  2. #include "freertos/FreeRTOS.h"
  3. #include "freertos/task.h"
  4. #include "driver/ledc.h"
  5. #include "esp_err.h"
  6.  
  7. // Konfiguracja serwomechanizmów
  8. #define SERVO_MIN_PULSEWIDTH 500 // Minimalny czas impulsu w mikrosekundach
  9. #define SERVO_MAX_PULSEWIDTH 2500 // Maksymalny czas impulsu w mikrosekundach
  10. #define SERVO_MAX_DEGREE 180 // Maksymalny kąt obrotu serwomechanizmu
  11.  
  12. // Kanały PWM dla poszczególnych serwomechanizmów
  13. #define SERVO_14_CHANNEL LEDC_CHANNEL_0
  14. #define SERVO_12_CHANNEL LEDC_CHANNEL_1
  15. #define SERVO_13_CHANNEL LEDC_CHANNEL_2
  16. #define SERVO_15_CHANNEL LEDC_CHANNEL_3
  17. #define SERVO_16_CHANNEL LEDC_CHANNEL_4
  18. #define SERVO_5_CHANNEL LEDC_CHANNEL_5
  19. #define SERVO_4_CHANNEL LEDC_CHANNEL_6
  20. #define SERVO_2_CHANNEL LEDC_CHANNEL_7
  21.  
  22. int array10[9][9] = {
  23.     {70, 45, 135, 110, 110, 135, 45, 70, 400},
  24.     {115, 45, 135, 65, 110, 135, 45, 70, 400},
  25.     {70, 45, 135, 110, 65, 135, 45, 115, 400},
  26.     {115, 45, 135, 65, 110, 135, 45, 70, 400},
  27.     {70, 45, 135, 110, 65, 135, 45, 115, 400},
  28.     {115, 45, 135, 65, 110, 135, 45, 70, 400},
  29.     {70, 45, 135, 110, 65, 135, 45, 115, 400},
  30.     {115, 45, 135, 65, 110, 135, 45, 70, 400},
  31.     {75, 45, 135, 105, 110, 135, 45, 70, 400},
  32. };
  33.  
  34. void set_servo_angle(ledc_channel_t channel, int angle) {
  35.     uint32_t duty = (angle * (SERVO_MAX_PULSEWIDTH - SERVO_MIN_PULSEWIDTH) / SERVO_MAX_DEGREE) + SERVO_MIN_PULSEWIDTH;
  36.     duty = duty * (8192 / 20000); // Przeliczenie na jednostki LEDC (us na duty cycle)
  37.     ledc_set_duty(LEDC_HIGH_SPEED_MODE, channel, duty);
  38.     ledc_update_duty(LEDC_HIGH_SPEED_MODE, channel);
  39. }
  40.  
  41. void dance2() {
  42.     for (int i = 0; i <= 8; i++) {
  43.         set_servo_angle(SERVO_14_CHANNEL, array10[i][0]);
  44.         set_servo_angle(SERVO_12_CHANNEL, array10[i][1]);
  45.         set_servo_angle(SERVO_13_CHANNEL, array10[i][2]);
  46.         set_servo_angle(SERVO_15_CHANNEL, array10[i][3]);
  47.         set_servo_angle(SERVO_16_CHANNEL, array10[i][4]);
  48.         set_servo_angle(SERVO_5_CHANNEL, array10[i][5]);
  49.         set_servo_angle(SERVO_4_CHANNEL, array10[i][6]);
  50.         set_servo_angle(SERVO_2_CHANNEL, array10[i][7]);
  51.         vTaskDelay(pdMS_TO_TICKS(array10[i][8]));
  52.     }
  53. }
  54.  
  55. void app_main() {
  56.     // Konfiguracja LEDC timer
  57.     ledc_timer_config_t ledc_timer = {
  58.         .duty_resolution = LEDC_TIMER_13_BIT,
  59.         .freq_hz = 50, // Serwomechanizmy zazwyczaj działają z częstotliwością 50 Hz
  60.         .speed_mode = LEDC_HIGH_SPEED_MODE,
  61.         .timer_num = LEDC_TIMER_0,
  62.         .clk_cfg = LEDC_AUTO_CLK,
  63.     };
  64.     ledc_timer_config(&ledc_timer);
  65.  
  66.     // Konfiguracja kanałów LEDC
  67.     ledc_channel_config_t ledc_channel[8] = {
  68.         {.channel = SERVO_14_CHANNEL, .duty = 0, .gpio_num = 14, .speed_mode = LEDC_HIGH_SPEED_MODE, .hpoint = 0, .timer_sel = LEDC_TIMER_0},
  69.         {.channel = SERVO_12_CHANNEL, .duty = 0, .gpio_num = 12, .speed_mode = LEDC_HIGH_SPEED_MODE, .hpoint = 0, .timer_sel = LEDC_TIMER_0},
  70.         {.channel = SERVO_13_CHANNEL, .duty = 0, .gpio_num = 13, .speed_mode = LEDC_HIGH_SPEED_MODE, .hpoint = 0, .timer_sel = LEDC_TIMER_0},
  71.         {.channel = SERVO_15_CHANNEL, .duty = 0, .gpio_num = 15, .speed_mode = LEDC_HIGH_SPEED_MODE, .hpoint = 0, .timer_sel = LEDC_TIMER_0},
  72.         {.channel = SERVO_16_CHANNEL, .duty = 0, .gpio_num = 16, .speed_mode = LEDC_HIGH_SPEED_MODE, .hpoint = 0, .timer_sel = LEDC_TIMER_0},
  73.         {.channel = SERVO_5_CHANNEL, .duty = 0, .gpio_num = 5, .speed_mode = LEDC_HIGH_SPEED_MODE, .hpoint = 0, .timer_sel = LEDC_TIMER_0},
  74.         {.channel = SERVO_4_CHANNEL, .duty = 0, .gpio_num = 4, .speed_mode = LEDC_HIGH_SPEED_MODE, .hpoint = 0, .timer_sel = LEDC_TIMER_0},
  75.         {.channel = SERVO_2_CHANNEL, .duty = 0, .gpio_num = 2, .speed_mode = LEDC_HIGH_SPEED_MODE, .hpoint = 0, .timer_sel = LEDC_TIMER_0},
  76.     };
  77.  
  78.     for (int i = 0; i < 8; i++) {
  79.         ledc_channel_config(&ledc_channel[i]);
  80.     }
  81.  
  82.     while (true) {
  83.         dance2();
  84.         vTaskDelay(pdMS_TO_TICKS(1000));
  85.     }
  86. }
  87.  
Wynikiem programu jest .... trudno to nazwać tańcem , ale ... :)
ODPOWIEDZ

Wróć do „Konstrukcje Robotów”