16-05-2017, 13:38
Witam serdecznie, zbudowałem giętarkę do drutu (0,9 mm) sterowaną za pomocą Leonardo. Konstrukcja bazuje na zmostkowanych (w celu zwiększenia wydajności prądowych) układach L298n i posiada 3 części ruchome napędzane silnikami dc:
- podajnik do drutu jako pierwszy
- głowica gnąca jako drugi
- "winda" podnosi i opuszcza głowicę w celu ustawienia głowicy do gięcia w zadaną stronę.
Całość można zobaczyć na YT pod poniższym linkiem.
https://www.youtube.com/watch?v=FwsUF65b...e=youtu.be
Na ten moment filmik wrzuciłem celem objaśnienia idei działania żeby łatwiej było rozmawiać nt mojego problemu.
Ja widzieliście co jakiś czas głowica obraca się w prawo celem zbazowania punktu wyjścia (jest to warunek konieczny zachowania dokładności kąta gięcia jako że są to silniki DC a nie krokowe). Do tej pory bazowanie działało w oparciu o dodatkowy sterownik L298n zatrzymywany krańcówką ale 2 układy podłączone do 1 silnika nie sprawdzają się bo mówiąc laicko prąd przechodził ze sterownika 1 do 2-go uszkadzając go po jakimś czasie, ponadto rozwiązanie to jest nieefektywne bo wymaga dodatkowego sterownika, a po co jak można załatwić to programowo. No i tutaj pojawił się problem:
Urządzenie działa na prostej pętli If else inicjowanej przez pullup z pinu 13 .
Jeżeli warunek jest spełniony to wykonuje się szereg poleceń adresowanych do danych trzech sterowników tj. podanie drutu, ustawienie głowicy gnącej, podniesienie "windy", gięcie, bazowanie głowicy gnącej, tak jak zobaczycie w poniższym sketchu.
Problem pojawia się w zagnieżdżeniu pętli sterującej bazą (pullup z pinu 12)
Powyżej znajduje się sketch zawierający komendy wyłącznie do głowicy (żeby już nie mieszać) ten docelowy różni się wyłącznie wmieszanymi komendami do pozostałych 2 par pinów (podajnika i windy). Jak widać polega na tym, że jeżeli naciskam mikrowłącznik to wykonują się kolejne polecenia aż do końca zgodnie z kształtem jaki ma osiągnąć wyginany drut. kształt jest trochę skomplikowany i normalnie sketch zawierał ponad 800 linijek ale to nie problem (nie umiem definiować poleceń).
Jak już zorientowaliście się nie jestem biegły w programowaniu i bardziej zajmuję się hardware niż software wydaje mi się że bazowanie powinno odbywać się na zasadzie
if (digitalRead(12) == LOW) {
digitalWrite(10, HIGH); //Obrot w prawo do bazy aż krańcówka rozłączy obwód pomiędzy pin12 a gnd w ardu)
digitalWrite(11, LOW); }
else
digitalWrite(10, LOW);
digitalWrite(11, LOW);
delay(100);
Wklejam to do pętli ale wykonywany jest tylko początek i kręci się w kółko, nie zatrzymuje się w momencie zetknięcia wypustki na głowicy z krańcówka tj. zbazowania głowicy. Program nie jest realizowany do końca, męczę się z tym już długo. Mógłbym to załatwić zwykłym przekaźnikiem , który podczas czynności bazowania odłącza sterownik odpowiadający za obrót głowicy od układu ale nie w tym rzecz, chcę uprościć układ i wiem że rozwiązanie jest banalne dla średniego zjadacza chleba smarowanego językiem C.
Mam nadzieję że ktoś pochyli się nad moim problemem i podyktuje mi rozwiązanie albo wskazówkę.
Dodam tylko że moją intencją jest wrzucenie filmiku z działającą maszyną na YT jako przedmiot edukacyjny, nie zamierzam zarabiać na dzieleniu się wiedzą, jak ktoś będzie chciał zrobić coś podobnego to służę pomocą, pracuję na obrabiarce CNC na której to obrabiarce zrobiłem tą gientarkę więc w tym też chętnie pomogę. . Pozdrawiam i życzę miłego!!!
- podajnik do drutu jako pierwszy
- głowica gnąca jako drugi
- "winda" podnosi i opuszcza głowicę w celu ustawienia głowicy do gięcia w zadaną stronę.
Całość można zobaczyć na YT pod poniższym linkiem.
https://www.youtube.com/watch?v=FwsUF65b...e=youtu.be
Na ten moment filmik wrzuciłem celem objaśnienia idei działania żeby łatwiej było rozmawiać nt mojego problemu.
Ja widzieliście co jakiś czas głowica obraca się w prawo celem zbazowania punktu wyjścia (jest to warunek konieczny zachowania dokładności kąta gięcia jako że są to silniki DC a nie krokowe). Do tej pory bazowanie działało w oparciu o dodatkowy sterownik L298n zatrzymywany krańcówką ale 2 układy podłączone do 1 silnika nie sprawdzają się bo mówiąc laicko prąd przechodził ze sterownika 1 do 2-go uszkadzając go po jakimś czasie, ponadto rozwiązanie to jest nieefektywne bo wymaga dodatkowego sterownika, a po co jak można załatwić to programowo. No i tutaj pojawił się problem:
Urządzenie działa na prostej pętli If else inicjowanej przez pullup z pinu 13 .
Jeżeli warunek jest spełniony to wykonuje się szereg poleceń adresowanych do danych trzech sterowników tj. podanie drutu, ustawienie głowicy gnącej, podniesienie "windy", gięcie, bazowanie głowicy gnącej, tak jak zobaczycie w poniższym sketchu.
Problem pojawia się w zagnieżdżeniu pętli sterującej bazą (pullup z pinu 12)
Kod:
void setup()
{
pinMode(13, INPUT_PULLUP);
pinMode(12, INPUT_PULLUP);
pinMode(11, OUTPUT);
pinMode(10, OUTPUT);
pinMode(9, OUTPUT);
pinMode(8, OUTPUT);
pinMode(7, OUTPUT);
pinMode(6, OUTPUT);
pinMode(5, OUTPUT);
pinMode(4, OUTPUT);
digitalWrite(11, LOW);
digitalWrite(10, LOW);
digitalWrite(9, LOW);
digitalWrite(8, LOW);
digitalWrite(7, LOW);
digitalWrite(6, LOW);
digitalWrite(5, LOW);
digitalWrite(4, LOW);
}
void loop() {
if (digitalRead(13) == LOW) {
digitalWrite(10, HIGH); //Obrot w prawo
digitalWrite(11, LOW);
delay(500);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
delay(100);
digitalWrite(11, HIGH); //Obrot w lewo
digitalWrite(10, LOW);
delay(300);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
delay(100);
}
else { }
}
Powyżej znajduje się sketch zawierający komendy wyłącznie do głowicy (żeby już nie mieszać) ten docelowy różni się wyłącznie wmieszanymi komendami do pozostałych 2 par pinów (podajnika i windy). Jak widać polega na tym, że jeżeli naciskam mikrowłącznik to wykonują się kolejne polecenia aż do końca zgodnie z kształtem jaki ma osiągnąć wyginany drut. kształt jest trochę skomplikowany i normalnie sketch zawierał ponad 800 linijek ale to nie problem (nie umiem definiować poleceń).
Jak już zorientowaliście się nie jestem biegły w programowaniu i bardziej zajmuję się hardware niż software wydaje mi się że bazowanie powinno odbywać się na zasadzie
if (digitalRead(12) == LOW) {
digitalWrite(10, HIGH); //Obrot w prawo do bazy aż krańcówka rozłączy obwód pomiędzy pin12 a gnd w ardu)
digitalWrite(11, LOW); }
else
digitalWrite(10, LOW);
digitalWrite(11, LOW);
delay(100);
Wklejam to do pętli ale wykonywany jest tylko początek i kręci się w kółko, nie zatrzymuje się w momencie zetknięcia wypustki na głowicy z krańcówka tj. zbazowania głowicy. Program nie jest realizowany do końca, męczę się z tym już długo. Mógłbym to załatwić zwykłym przekaźnikiem , który podczas czynności bazowania odłącza sterownik odpowiadający za obrót głowicy od układu ale nie w tym rzecz, chcę uprościć układ i wiem że rozwiązanie jest banalne dla średniego zjadacza chleba smarowanego językiem C.
Mam nadzieję że ktoś pochyli się nad moim problemem i podyktuje mi rozwiązanie albo wskazówkę.
Dodam tylko że moją intencją jest wrzucenie filmiku z działającą maszyną na YT jako przedmiot edukacyjny, nie zamierzam zarabiać na dzieleniu się wiedzą, jak ktoś będzie chciał zrobić coś podobnego to służę pomocą, pracuję na obrabiarce CNC na której to obrabiarce zrobiłem tą gientarkę więc w tym też chętnie pomogę. . Pozdrawiam i życzę miłego!!!