aaannndowe początki z enderem

Mati
Postów w temacie: 1
Posty: 505
Rejestracja: 10 maja 2020, 17:28
Lokalizacja: Okolice Poznania
Drukarka: Ender 3, V-Core2 i 3
x 169

Re: aaannndowe początki z enderem

Post autor: Mati »

Albo czujnik halla. Zależy co łatwiej/szybciej (albo co akurat masz "w szufladzie"). Sposób podłączenia, koszt, obsługa programowa niemal identyczna jak krańcówki optycznej (czyli transoptora). Jednak jeśli masz wszystko przygotowane pod kontaktron to z zaadoptowaniem halla będzie moim zdaniem dużo prościej.
Np. https://allegro.pl/oferta/modul-czujnik ... 14925?bi_s
Awatar użytkownika
aaannnd
Drukarz
Postów w temacie: 66
Posty: 453
Rejestracja: 29 sie 2018, 14:00
Lokalizacja: KRK-PD
Drukarka: Ender 3
x 234

Re: aaannndowe początki z enderem

Post autor: aaannnd »

alucard321pl pisze:Ja bym ten prędkościomierz zrobił czysto mechaniczny. Linka hamulcowa z roweru połączona pedał - wskaźnik. . .
zbyt proste

@czarobest obecnie zakłócenia zlikwidowane programowo (dziobu dzięki za parę linijek kodu ;) ) na guziku i na kontaktronie działa przyzwoicie.
Idealnie nie będzie bo jeden stopień serwa to 2 stopnie na skali, tu jeszcze miałem mapowanie na małych liczbach co sprawiało, że skakał po kilka stopni, już poprawione. Myślałem też o zrobieniu na krokowcu switec x27.168, ale: 1. kilka lat temu już sobie narysowałem z serwem, 2. w zestawie arduino było serwo. Na x27 byłoby 6x dokładniej bo tam na 1 stopień przypadają 3 kroki.
Co do cobry możesz podpytywać na meila azuska(at)wp.pl, nie gwarantuję, że szybko będę znał odpowiedź ;)

Może zrobię na hallu bo i tak muszę magnesy kupić, to bym przy okazji halla też wziął.

Jeszcze zgrabne pudełeczko narysować i za kilka lat może zacznie jeździć w jeepku.
Awatar użytkownika
czarobest
Konto z ograniczeniami
Postów w temacie: 4
Posty: 20
Rejestracja: 22 wrz 2021, 13:17
Lokalizacja: Łódź
Drukarka: Tevo Tarantula
x 8
Kontakt:

Re: aaannndowe początki z enderem

Post autor: czarobest »

No to spoko, wybacz, że nie dałem kodu, ale sam lubię robić sam więc nie chciałem psuć zabawy - no i każdy ma troszkę inne podejście do problemu :). Myślę, że dokładność serwa nie będzie problemem - na licznik spokojnie starczy, szczególnie "wygładzając" ruchy tak jak opisałem lub w inny sposób. Zresztą sam mam w planach zrobić hamownie do silniczków modelarskich z obrotomierzem i wskaźnikiem temperatury właśnie na serwach.

I znów według mnie przy prędkościach, które widać na liczniku to nawet ten kontaktron pewnie by wystarczył, aczkolwiek hall będzie na pewno lepszy i pewnie trwalszy.
Odnośnie Cobry, to spokojnie - nie chodzi o jakieś szczegóły, chciałem się raczej dowiedzieć z czego/jak to zrobiłeś - bo widziałem, że to chyba "składak" :).
Awatar użytkownika
aaannnd
Drukarz
Postów w temacie: 66
Posty: 453
Rejestracja: 29 sie 2018, 14:00
Lokalizacja: KRK-PD
Drukarka: Ender 3
x 234

Re: aaannndowe początki z enderem

Post autor: aaannnd »

pomyśle nad wygładzaniem wieczorem, bo faktycznie do 0 spada szybko (2x szybciej niż samo serwo)

tak to "składak", nieskończony, z kiepską opcja na zarejestrowanie :D
Awatar użytkownika
aaannnd
Drukarz
Postów w temacie: 66
Posty: 453
Rejestracja: 29 sie 2018, 14:00
Lokalizacja: KRK-PD
Drukarka: Ender 3
x 234

Re: aaannndowe początki z enderem

Post autor: aaannnd »

Udało się spowolnić wskazówkę biblioteką VarSpeedServo.h
Teraz dzała tak

źródło: https://www.youtube.com/watch?v=YVFq6xI69Tg

Jutro, może, jak będą neodymki to sprawdze jak pójdzie na kontaktronie (bo te zwykłe z kaloryfera od dzieci z pokoju są za słabe i spadają ze spinera :D ).

i kodzik

Kod: Zaznacz cały

#include <VarSpeedServo.h>

VarSpeedServo serwomechanizm;

volatile word a;     //prędkość
volatile word q;     //czas miedzy impulsami
unsigned long time;  //czas w którym był impuls
byte pozycja = 0; //Aktualna pozycja serwa 0-180

void setup() {

 pinMode(2, INPUT_PULLUP); //Kontaktron podłączony do pinu 3
 attachInterrupt(digitalPinToInterrupt (2), licz, FALLING);  

serwomechanizm.attach(10);  //Serwomechanizm podłączony do pinu 10, długosc impulsu pozycja 0, dlugosc impulsu pozycja 180

serwomechanizm.write(4,200);  //Idzie na pozycję zero (przełożenie serwo-wskazówka na trybkach 2:1)
delay(500);
serwomechanizm.write(134,200);  //Koniec skali
delay(500);
serwomechanizm.write(64,200); //Połowa skali
delay(500);
serwomechanizm.write(4,200);  //Pozycja zero
delay(500);  
}
void loop() {
  
if(millis()-time<1500)
a=1107000/q;              //obwód koła 1,23m; 4 magnesy na kole co 0,3075m daje 3252 impulsy na 1km; impulsy/(1km/h)  3252/3600=0,90334Hz; impuls co 1107ms/(1km/h)
else
a=0;
pozycja = map(a,0,12000,4,134); //(prędkość,0,koniec skali x 1000, pozycja 0km/h, pozycja 12km/h koniec skali)

 serwomechanizm.write(pozycja,30);
}

//Funkcja odpowiedzialna za liczenie czasu miedzy impulsami
void licz()
{
 // q=millis()-time; // edit by dziobu
 word tmp;           // edit by dziobu
tmp=millis()-time;   // edit by dziobu
if(tmp < 82)         // edit by dziobu
  return;            // edit by dziobu
q = (q*3 + tmp) >> 2; //edit by dziobu
 
  time=millis();
}
Awatar użytkownika
aaannnd
Drukarz
Postów w temacie: 66
Posty: 453
Rejestracja: 29 sie 2018, 14:00
Lokalizacja: KRK-PD
Drukarka: Ender 3
x 234

Re: aaannndowe początki z enderem

Post autor: aaannnd »

Test z kontaktronem. Kontaktron umieszczony pionowo, bo w poziomie łapał dwa impulsy przy jednym przejściu magnesu - na lewą i na prawą nogę, środkiem się wyłączał, o czym się przekonałem dopiero bo dopisaniu żeby dioda świeciła przy czytaniu sygnału.

źródło: https://www.youtube.com/watch?v=uL6Z12zGg0s

Jak ktoś jeździł starym maluchem to tu wskazówka chodzi płynnie :devil:



PS
spiner - PLA DD szary
cyferblat SILK DD, jak się da od spodu podświetlenie to pięknie przepuszcza światło na skalę. Biały byłby lepszy :)

może na skali zamiast km/h napisać MACH jak w samolotach? :D
Zepco
Awatar użytkownika
dziobu
Zasłużony
Postów w temacie: 4
Posty: 8909
Rejestracja: 28 gru 2016, 16:38
Drukarka: ZMorph 2.0(S)
x 5842
Kontakt:

Re: aaannndowe początki z enderem

Post autor: dziobu »

aaannnd pisze:Jak ktoś jeździł starym maluchem to tu wskazówka chodzi płynnie :devil:
Zrób prosty system nadążny. Tak jak teraz tylko aktualizujesz bieżąca szybkosc a osobno, w stalych odstępach czasu robisz kroczek +/- szybkości wysświetlanej tak żeby nadążać za bieżącą.
aaannnd pisze: może na skali zamiast km/h napisać MACH jak w samolotach? :D
A dziecko Ci nie odleci? ;p
Awatar użytkownika
aaannnd
Drukarz
Postów w temacie: 66
Posty: 453
Rejestracja: 29 sie 2018, 14:00
Lokalizacja: KRK-PD
Drukarka: Ender 3
x 234

Re: aaannndowe początki z enderem

Post autor: aaannnd »

Pomysł dobry, tylko albo będzie skokowo co 2 stopnie na skali bo do serwo czyta całkowite wartości co stopień, albo płynnie z opóźnieniem. Opóźnienie i tak już jest przy zatrzymaniu, bo ze względu na mały zakres prędkości czeka 1.5 sekundy na kolejny sygnał i jak go nie ma to dopiero spada na zero. Im mniejsze opóźnienie ustawie tym większa pokazywana prędkość minimalna (mapowanie jest około 1Hz = 1km/h). Właściwie co za różnica dzieci i tak zasuwają na maxa :D

Z drugiejstrony to serwo może mieć dokładnść 0,1 stopnia w pełnym zakresie, bo sterowane jest wypełnieniem od 600 do 2400 mikrosekund, więc na 180 stopni przypada 1800 pozycji :D czyli 10 kroków na 1 stopień. Ale ja za głupi jeszcze jestem bo to moja pierwsza styczność z programowaniem :D dlatego jak to taki jeden mówił "ja cały czas się uczę, w domu się uczę, w pracy się uczę"

Znalazłem nawet bibliotekę Smoothdriveserwo, sprawdzę jak na tym z płynnością, ale przy poprzednich próbach nie działało ustawianie prędkości serwa, mimo że byłą taka opcja.

Teraz na szybko znalazłem jeszcze takie coś https://github.com/Locoduino/SlowMotionServo będzie trzeba przetestować.




ps
jeżeli bredzę to wybaczcie, bo jeszcze dużo do nauczenia przede mną :)
Pjoter
Awatar użytkownika
dziobu
Zasłużony
Postów w temacie: 4
Posty: 8909
Rejestracja: 28 gru 2016, 16:38
Drukarka: ZMorph 2.0(S)
x 5842
Kontakt:

Re: aaannndowe początki z enderem

Post autor: dziobu »

Ale po co Ci biblioteka do tego?

Kod: Zaznacz cały

unsigned word speed_curr; // tyle jedziesz
unsigned word speed_show; // a to wyświetlasz
...

...gdzieś w loop...
if(speed_show > speed_curr) {
  speed_show--;
  wyslij_do_Serwa_nowa_pozycje(speed_show);
} else
if(speed_show < speed_curr) {
  speed_show++;
  wyslij_do_Serwa_nowa_pozycje(speed_show);
}
I masz prostacki filtr dolnoprzepustowy. Tutaj skacze o kroczek co pętle, ale zmieniając zarówno wielkość kroku jak i ewentualne opóźnienie (nie wiem co ile tu jest pętla) możesz sprawić że wskazówka będzie płynąć. Przy okazji to przefiltruje Ci ewentualne zakłócenia z pomiaru prędkości.
czarobest
Awatar użytkownika
aaannnd
Drukarz
Postów w temacie: 66
Posty: 453
Rejestracja: 29 sie 2018, 14:00
Lokalizacja: KRK-PD
Drukarka: Ender 3
x 234

Re: aaannndowe początki z enderem

Post autor: aaannnd »

Tu skok jest co 2 stopnie na skali, a jak czytam opis biblioteki slowmotion serwo, to tam jest możliwość zmiany min i max serwa w pętli, czyli mógłbym ustawić zamiast prędkości rzeczywistej i prędkości pokazywanej, maksymalne wychylenie, które by aktualizował i do którego by dążył każąc za każdym razem serwu iść na koniec. To dałoby skok co 0.2 stopnia na skali czyli 10x płynniej. :D

edita:
albo zmieniać adjustMax(increment) zamiast setupMax(maxPulse)
ODPOWIEDZ

Wróć do „Ender”