Programowanie c gietarka do drutu diy

0 głosów
62 wizyt
pytanie zadane 13 maja 2017 przez użytkownika Zeus830519 (2)
Witam dzięki za kanał elektroprzewodnik, zainspirował mnie i zacząłem realizować pasję z dzieciństwa czyli majsterkowanie. Kiedyś rozbieralem maszyny i urządzenia żeby zobaczyć jak działają obecnie je buduje:-)
Na ten moment zbudowalem gietarke do drutu sterowana arduino, działa pięknie na mostkach h i zwykłych silnikach dc. Urządzenie składa się z 3 silników: podajnik drutu,  głowica zaginajaca drut, i winda opuszczajaca i podnoszaca głowice. Ustawienie głowicy gnacej (bazowanie)  opiera się na krancowce i tu zaczyna się problem. Nie jestem w stanie zaprogramować (zbyt mała wiedza nt jęz c) tego by co jakiś czas bazowalo głowice.  Program jest prosty działa w pętli if i else inicjowany przez pullup z pinu 13 po czym dodaje kolejne wiersze sterujące sterownikami l298n (obrót w prawo, lewo, podanie drutu, winda jako kolejne kroki, etapy gięcia) ale wymyśliłem że bazowanie głowicy (warunek konieczny żeby zachować dokładność i powtarzalnosc) będzie przeplatane co pewien czas z obracaniem glowicy jako jeden z wielu etapów. Napisałem pętle oczywiście if i else inicjowany przez pullup z pinu 12 (krancowka głowicy) tj głowica obraca się w prawo do momentu aż krancowka nie rozlaczy obwodu) i też działa dobrze ale gdy wklejam pętle w pętle główna to program nie działa. Omija ja realizując poszczególne etapy gięcia tak jakby nie było tej pętli wpisanej. Dodam, że bazowanie głowicy podczas pracy musi się dokonać co najmniej 9 razy. Serdecznie proszę o pomoc w napisaniu programu, nie znam się na zagnieżdżane pętli. Po godz 13 jak wrócę z pracy podam treść programu bo wiem że ciężko jest wytłumaczyć coś bez przykładu tak samo jak ciężko jest odpowiedzieć na tak zadane pytanie. Na ten moment mogę ew wysłać na maila plik z programem. Dodam że moja intencją jest wrzucenie filmu z gotowa maszyna podczas pracy jako przedmiot edukacyjny, nie zamierzam nadrabiać na dzielenie się wiedzą i być może moje filmy zainspirował kogoś tak samo jak mnie zainspirował elektroprzewodnik. Pozdrawiam i do później!

2 odpowiedzi

0 głosów
odpowiedź 13 maja 2017 przez użytkownika tomekatomek123456789 (558)
Mógłbyś dać sketch oraz zdj i film jak to wygląda i działa ?
komentarz 13 maja 2017 przez użytkownika Zeus830519 (2)
przywrócone 13 maja 2017 przez użytkownika Zeus830519
https://youtu.be/FwsUF65bC8E
A co do sketch to w pracy mogę podesłać tylko plik na maila bo jest nieedytowalny na tel.  nie mam Twojego maila, nie widzę tutaj opcji wstaw plik etc, widzę że yt zepsuło totalnie jakość filmu no ale cóż,wrzuciłem go na szybko, dzięki za zainteresowanie
komentarz 13 maja 2017 przez użytkownika tomekatomek123456789 (558)
thx a mój e-mail to tomekatomek123456789@gmail.com
komentarz 13 maja 2017 przez użytkownika Zeus830519 (2)
Wrzucam sketch:

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);
  
  digitalWrite(11, LOW);
  digitalWrite(10, LOW);
  digitalWrite(9, LOW);
  digitalWrite(8, LOW);
  digitalWrite(7, LOW);
  digitalWrite(6, LOW);
   
}
void loop() {
if (digitalRead(13) == LOW) {

  digitalWrite(11, HIGH); // obrot glowicy w lewo
  digitalWrite(10, LOW);
  delay(1000);
  digitalWrite(10, LOW);
  digitalWrite(11, LOW);
  delay(100);


// tutaj chciałbym umiescic bazowanie głowicy


  digitalWrite(10, HIGH); // obrot glowicy w prawo
  digitalWrite(11, LOW);
  delay(1000);
  digitalWrite(10, LOW);
  digitalWrite(11, LOW);
  delay(100);
  
}
else { }
}

Powyzszy sketch jest poglądowy i zawiera komendy sterujące wylacznie glowica i dziala bez zarzutu natomiast bazowanie mogloby wygladac nastepujaco:

if (digitalRead(12) == HIGH) {

  digitalWrite(10, HIGH); // obrot w prawo az do rozlaczenia krancowki
  digitalWrite(11, LOW); }
  else {
  digitalWrite(10, LOW);
  digitalWrite(11, LOW); }

Moglem cos pokielbasic z nawiasami ale idea jest taka, prawdopodobnie zadziała również funkcja while oraz do for ale chodzi mi o sama idee zagniezdzenia petli w petli tak żeby po zbazowaniu przeszlo do kolejnych krokow np podajnik do przodu, giecie itd. az do końca petli glownej.
Nie chciałem definiować poszczególnych krokow tak żeby je wklejać bo silnik dc nie jest tak dokładny i musze sterowac czasami tak żeby gięcia była jednakowe, zdefiniować można wyłącznie winde i bazowanie ale nie zależy mi na tym.
komentarz 1 czerwca 2017 przez użytkownika tomekatomek123456789 (558)
Może silnik krokowy będzie do tego dobry ? Polecam zamiast delayów dać odczekania bo delay psują tylko !
0 głosów
odpowiedź 23 maja 2017 przez użytkownika kosmogon (8)
edycja 23 maja 2017 przez użytkownika kosmogon

Ja bym to zrobił tak: dodałbym licznik gięć, który byłby inkrementowany za każdym zakończeniem gięcia. Co któreś gięcie uruchamiałbym bazowanie. A powinno ono wyglądać tak:

while(!digitalRead(12){
 
   digitalWrite(10, HIGH); // obrot w prawo az do rozlaczenia krancowki
   digitalWrite(11, LOW);
}

A tak poza tym:

1. Ten else{ } pozostaje pusty? Jeśli tak, to jest on niepotrzebny, możesz skasować.

2. Rozważ zamontowanie rezystora obrotowego na osi głowicy, wtedy będziesz miał pomiar kąta, zamiast bawienia się delaly'ami.

...