Skocz do zawartości

espiridion

Użytkownicy
  • Zawartość

    29
  • Rejestracja

  • Ostatnio

Reputacja

1 Neutralna

O espiridion

  • Ranga
    3/10
  • Urodziny 09.05.1999

Informacje

  • Płeć
    Brak informacji
  • Języki programowania
    Javascript, C

Ostatnio na profilu byli

208 wyświetleń profilu
  1. @Treker Dzięki, tak zrobię Dam znać jak wyjdzie. Projekt jest raczej narazie obecnie skupiony na 3 tygodniową wystawę. Może go kiedyś rozbuduję.
  2. @Treker Dzięki za artykuł! Jak myślisz, które z tych trzech rozwiązań podanych przez autora artykułu w moim przypadku byłoby najłatwiejsze? Mam kabel OWY 4x1.5. Czy mam z niego zrezygnować na rzecz skrętki, czy może dodanie rezystorów do OWY pomoże? Jeśli chodzi o specyfikację do której podłączam elementy to: To "komponent" (w sumie mam 6 zestawów) składający się z: 1x przełącznik ON/OFF (włącza i wyłącza zasilanie całego komponentu) 1x Step-down 5V 6A 1x płytka z zalutowanym gniazdkiem i zworkami (coś jak stykowa, ale stabilniejsza) 1x Arduino Uno (podłączane przez kable z płytki zalutowanej do pinu 5V i GND) 1x Kabel OWY 4x1,5 łączący (np. 5 metrów) 1x Sterownik PCA9685 (16-kanałowy) (decydowała cena, ale podłączone mam tylko 1-3 serwomechanizmów) (n)x Serwomechanizmy typu standard Projekt już robię ponad rok, ale i2c na długich kablach to już ostatnie mi to co zostało z tego wszystkiego. Pozdro
  3. Cześć, Czy zasilanie 16-kanałowego sterownika serw PCA9685 z Arduino Uno pinów A4 na SDA i A5 do SCL i płytki ze wspólną masą GND i 5V jest możliwe na 5-8 metrowych kablach czterożyłowych? Zrobiłem pierwsze połączenie, narazie wszystko póki co zadziałało (5-6 metrów) Na drugim (3 metry) i trzecim (8 metrów) już miałem jakiś problem (każde jest zasilane osobno, mierzyłem prąd itd) ale mimo wszystko mam wrażenie, że nie odczytuje z pinu A5 i A4 na SDA i SCL. Samo zasilanie plusa i minusa jest w porządku w każdym.
  4. @marek1707 Na zdjęciu przesyłam zdjęcie do wglądu. Nic nie powiem o modelu, bo takich informacji nigdzie niestety nie mam.
  5. Cześć, Mam analogowe panelowe woltomierze na zakres do 10V, 15V i 25V. Z racji tego, że trudno dostać na rynku woltomierze poniżej 5V to miałbym do Was pytanie. Jaki rezystor powinienem wstawić by woltomierz odczytywał zakres od 0 do 0.5V lub 0 do 1V? Pozdrawiam:)
  6. @atMegaTona Zamiast if (switch_nr[cnt].state_flag == true) continue; dałem if (switch_nr[cnt].state_flag == true && switch_nr[cnt].ld + RENEW_TIME > milis()) continue; i mam ciągły ruch serwa w tą i tamtą stronę tak jak chciałem. Ale mam jeszcze do Ciebie pytanie, mam nadzieje ostatnie bo nie chcę Cie męczyć bo zastanawiam się co robi klasa msDelay tutaj, chyba, że "del" źle zadeklarowałem? public: msDelay(){delay_cnt = 0;} msDelay(uint16_t del):delay_cnt(del+millis){} uint16_t del;
  7. @daniel89 Jeśli potrzebujesz artystycznego punktu widzenia to: Analogicznie każde elementy, które są podłączone na stałe dają wrażenie nieodłączności i czegoś trwałego. Jeśli to jest jakiś projekt. który ma też się skupiać na estetyce wizualnej połączeń to właśnie tak zrób. Okiem laika jeśli jakiś element jest wyjmowalny to raczej jest to "niestabilne".
  8. W drugim przykładzie klasy msDelay kompilator mi pokazuje, że "del" nie jest zadeklarowane.
  9. @daniel89 Jak tobie najwygodniej, ale moim zdaniem najlepiej to wlutować to na stałe, chyba, że masz zamiar potem wymieniać? Dharma?
  10. @atMegaTona Tutaj wkradł się błąd: if(digitalRead(switch_nr[cnt].sw == LOW)){ A powinno być tak: if(digitalRead(switch_nr[cnt].sw) == LOW){ i wnet wszystko ożyło
  11. @aerograf7 Przecież na schemacie są diody podłączone przez rezystory.
  12. Szanowny @atMegaTona , wielkie dzięki za podesłanie kodu. Wygląda bardzo interesująco i jestem pod ogromnym wrażeniem twojej pomocy. Narazie kombinuję z nim, ale zapowiada się bardzo dobrze.
  13. Cześć FORBOT, Proszę na wstępie o wyrozumiałość. Nie jestem osobą techniczną. Zrobiłem na ile jestem w stanie, póki co instalacja działa (jako tako do testów) i mogę nią testować swoje obiekty. Jest to studencka instalacja artystyczna. Oczekuję tylko pomocy w napisaniu tego kodu właśnie pod millis() by móc się pozbyć delays. Dla wyjaśnienia czym jest instalacja artystyczna, można znaleźć prace na festiwalu BIENNALE WRO 2019: http://wro2019.wrocenter.pl Chciałbym napisać coś takiego, ale nie wiem jak ominąć "czas". Funkcja milis() czy moze cos innego? Czyli np tak: (to mój skrót myślowy w postaci kodu myślowego....ale chciałbym bardzo takie działanie) if (Switcher[1] == LOW) { led[1] == HIGH, counterLED[1] ==HIGH, servo[1]pwm1 ( servomin_1 = 150, servomax_1 = 450, speed = 100), //np. jakas predkosc np. jak w varspeedservo servo[1]pwm0 (countermin_1 = 200, servomax_1 = 450, speed = 20) //np. szybsza predkosc } else if (Switcher[1] == HIGH) { led[1] == LOW, counterLED[1] == LOW, servo[1]pwm1 == LOW, //serwa wylaczone servo[1]pwm0 == LOW //serwa wylaczone } Obecny przykładowy kod działania jednego przełącznika, którego teraz używam: #include <Wire.h> #include <Adafruit_PWMServoDriver.h> int i = 0; const int LED[] {26, 24, 22, 10, 8, 6, 4, 2}; const int CounterLED[] {36, 38, 40, 42, 28, 30, 32, 34}; const int Switch[] {27, 25, 23, 11, 9, 7, 5, 3}; const uint8_t servo[] {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}; Adafruit_PWMServoDriver pwm0 = Adafruit_PWMServoDriver(0x40); Adafruit_PWMServoDriver pwm1 = Adafruit_PWMServoDriver(0x41); #define SERVOMIN_1 150 #define SERVOMAX_1 600 #define SERVOMIN_2 350 #define SERVOMAX_2 500 #define COUNTER1_MIN 200 #define COUNTER1_MAX 450 #define COUNTER2_MIN 300 #define COUNTER2_MAX 440 //... i tak dalej, wiem, że to kilometry definów (mozna w ramkach) void setup() { Serial.begin(9600); pinMode(Switch[i], INPUT_PULLUP); pinMode(LED[i], OUTPUT); pinMode(CounterLED[i], OUTPUT); pwm0.begin(); pwm0.setPWMFreq(60); // Analog servos run at ~60 Hz updates pwm1.begin(); pwm1.setPWMFreq(60); // Analog servos run at ~60 Hz updates delay(10); } void setServoPulse(uint8_t n, double pulse) { double pulselength; pulselength = 1000000; // 1,000,000 us per second pulselength /= 60; // 60 Hz Serial.print(pulselength); Serial.println(" us per period"); pulselength /= 4096; // 12 bits of resolution Serial.print(pulselength); Serial.println(" us per bit"); pulse *= 1000000; // convert to us pulse /= pulselength; Serial.println(pulse); pwm0.setPWM(n, 0, pulse); pwm1.setPWM(n, 0, pulse); delay(10); } void loop() { { if(digitalRead(Switch[1]) == LOW) // PRZEŁĄCZNIK NR. 1 { digitalWrite(LED[1], HIGH); digitalWrite(CounterLED[1], HIGH); //ruch wskazowek i robota w jedna strone for (uint16_t pulselen = SERVOMIN_1; pulselen < SERVOMAX_1; pulselen++) { pwm1.setPWM(servo[0], 0, pulselen); } for (uint16_t pulselen = COUNTER1_MIN; pulselen < COUNTER1_MAX; pulselen++) { pwm0.setPWM(servo[0], 0, pulselen); } delay(500); //ruch wskazowki od poczatku i ruch orczyka robota od poczatku for (uint16_t pulselen = SERVOMAX_1; pulselen > SERVOMIN_1; pulselen--) { pwm1.setPWM(servo[0], 0, pulselen); } for (uint16_t pulselen = COUNTER1_MAX; pulselen > COUNTER1_MIN; pulselen--) { pwm0.setPWM(servo[0], 0, pulselen); } delay(500); //ruch wskazowki i robota zakoncozny //Tutaj nie chodzi o to zeby wskazowki mialyby sie zatrzymywac na pol sekundy //bardziej chodzi o to ze wskazowki i orczyk robota po prostu caly czas sie rusza od kata //powiedzmy np. od 45 stopni do 130 stopni a ten delay to czas pokonania wlasnie tej odleglosci miedzy katami //np. wskazowki maja byc ruchome, cos w stylu awarii elektrownii w Czarnobylu :) //a ruch serwa robota to poprostu zwykle obroty serwa jak w najprostszysch tutoriala dla zielonych //jesli istnialaby mozliwosc to fajnie by bylo zrobic dla duzego serwa z pwm1 np. oś czasu, czyli //pierwsza sekwencja od 300 do 600 z delayem (200) potem druga sekwencja z delayem(100) potem trzecia sekwencja z delayem (1000) itd. } else if (digitalRead(Switch[1]) == HIGH) { digitalWrite(LED[1], LOW); digitalWrite(CounterLED[1], LOW); } } } Obecne działanie: Kiedy przełączam przełącznik dźwigniowy nr 1 na ON - uruchamia on 2 ledy (led1, counterled1) oraz servo1 z pierwszego sterownika i2c (pwm0) i drugiego sterownika i2c (pwm1). Kiedy przełączam przełącznik dźwigniowy nr 1 na OFF - wyłącza on 2 ledy (led1, counterled1) oraz servo1 z pierwszego sterownika i2c (pwm0) i drugiego sterownika i2c (pwm1). Analogicznie tak działa aż do 8 przełączników. Każdy przełącznik => to komplet 2 ledów i 2 serwomechanizmów. Czasami w niektórych wypadkach może być więcej serw dołączonych do kompletu. Problem: Mam 8 przełączników. Delay powoduje opóźnienia. Kiedy włączam przełącznik 1 uruchamia się wszystko zgodnie, potem np. decyduję włączyć przełącznik 4 to zgodnie z zasadą delay trzeba odczekać sekundę po przełączeniu na ON aż włączą się 2 ledy i 2 serwomechanizmy. Gorzej się robi, jeśli chcemy manipulować kilkoma przełącznikami naraz. Czego chcę?: Pozbycia się delay() i wprowadzenie funkcji milis(). Każdy przełącznik ma działać niezależnie od innych. Kiedy go włączę na ON ma działać natychmiast, kiedy włączę go na OFF ma wyłączać natychmiast. Parametry do wszystkich serwomechanizmów : wychylenia od min: 150 do 600 max. Na przykład dla servo1 z pwm0 to będzie 200 do 300. A dla servo1 z pwm1 to będzie 150 do 450. Plus jeśli to możliwe "prędkość serw jaką ma pokonać dystans między tym a tym kątem". Aż do servo16 (pwm0 jak i pwm1) możliwość późniejszej edycji parametrów wychylenia kątów i prędkości. Zakomentowanie niektórych linijek kodu tak abym mógł edytować do woli różne parametry. Biblioteka to: https://github.com/adafruit/Adafruit-PWM-Servo-Driver-Library Lista urządzeń to: Mikrokontroler Arduino Mega 8 szt. micro servo TowerPro SG-90 12-16 szt. standard servo Tower 5010 2 szt. 16-kanałowy sterownik serwomechanizmów PCA9685 8 szt. Przełączniki dźwigniowe ON/OFF 8 szt. Diody LED zielone 5mm + rezystory 8 szt. Diody LED biały 3mm + rezystory Zasilacz 5V do Arduino Mega Zasilacz 5V do sterowników serwomechanizmów 5V z 30A lub 40A Płyta stykowa (potem będzie zamieniona na uniwersalną płytkę do lutowania przewodów). ! Schemat elektroniczny zrobiony na szybko, ale tak wygląda moje podłączenie z moim panelem sterowania i serwomechanizmami (one będą poza panelem sterowania, jeśli to ważne). W schemacie nie uwzględniłem wszystkich LEDów i przełączników bo schemat przysłaniałoby za dużo połączeń więc nie było nic praktycznie widać na zdjęciu. Dlatego dałem 4 (ale ma być 16 podlaczonych LEDów i 8 przełączników). Analogicznie wszystkie ledy są podłączone w ten sam sposób czyli: katoda do masy wspólnej GND, anoda do pinów mikrokontrolera. (lista pinów w kodzie). Pozdrawiam
  14. Ok, najwyraźniej nie miało sensu zakładanie tego tematu, jeśli nie mogę liczyć na żadną pomoc tutaj zwłaszcza od użytkownika @ethanak ,który mnie ciągle przesłuchuje. Naprawdę jest mi bardzo przykro i to naprawdę boli.
  15. Cześć, Chciałbym zlecić zaprogramowanie a właściwie przeprogramowanie mojego kodu wykorzystującego funkcję delay(); na millis(); oraz dwóch 16-kanałowych sterowników serw PWM przez i2C. Próbowałem sam zrobić i opanować przez kilka miesięcy lecz niestety nie jestem w stanie tego zrobić, bo nie rozumiem działania millis, bo to dla mnie totalna abstrakcja. Zainteresowanym wyślę mój kod, który jest rozpisany w delay() i opiszę działanie mojej instalacji artystycznej. Z poważaniem
×
×
  • Utwórz nowe...