Skocz do zawartości

Grzegorz1397

Użytkownicy
  • Zawartość

    9
  • Rejestracja

  • Ostatnio

Reputacja

1 Neutralna

O Grzegorz1397

  • Ranga
    2/10

Ostatnio na profilu byli

Blok z ostatnio odwiedzającymi jest wyłączony i nie jest wyświetlany innym użytkownikom.

  1. Oglądałem sporo filmików w tym temacie i jest tak jak mówisz, już na podajniku odbywa się ustawianie detali, natomiast tutaj występuje taki problem, że te obudowy mają niewygodny do tego kształt, nie ma żadnego kołnierza czy łebka za który można złapać i ustawić element. Mogę wykonać kontynuację podajnika, pospawać, ale nie mam pomysłu w jaki sposób je mechanicznie ustawiać. https://www.olx.pl/oferta/podajnik-wibracyjny-baza-ntb30a-kontroler-oraz-misa-s-300-35-komplet-CID619-IDEsjxN.html#ec0bd9a985 Pod tym linkiem jest sam podajnik, do którego mógłbym coś dorobić, żeby wychodziły w jednym kierunku. Dlatego jeśli macie jakieś sugestie jak to realizować to będę bardzo wdzięczny.
  2. Projekt jest na etapie pomysłu, więc właściwie nie mam jeszcze żadnych danych co do odstępu ani prędkości poruszania. Jeżeli byłyby podawane przez ten podajnik wibracyjny to wydaje mi się, że ciężko ustalić odstęp między nimi, ale nie mam innego pomysłu. Właściwie cały projekt byłby bardzo prosty, gdyby obudowy były układane przez operatora, później tylko dojeżdżały do lasera, byłyby wykrywane i znakowane. Wydaje mi się że całą trudność polega na tym właśnie podawaniu, sortowaniu, ustalaniu odstępu między obudowami. Tak myślałem, że może obudowa wpadałaby na platformę, np okrągłą, czujnik badałby którą stroną jest odwrócona i jeżeli jest okej to jest spychana na dalszy etap, a jeżeli nie to serwomechanizm obraca obudowę o 180 stopni. Co do wielkości detalu to jest trochę problem, bo będą różne, np łuski 4x40, 3x22, 5x40, 6x100, a może też prostopadłościany 6x17, ale na razie skupiam się na łuskach.
  3. Cześć, mierzę się z problemem zaprojektowania przenośnika taśmowego. Jego przeznaczeniem ma być transport obudów do czujników z podajnika wibracyjnego do lasera który będzie ja znakował. Chciałbym, żeby obudowy przemieszczały się po taśmie leżąc w rowku odpowiadającym średnicą średnicy obudowy do czujnika. Napotkałem jednak problem z ułożeniem obudów w rowku. Obudowy muszę być ułożone w jedną stronę, np otworem do przodu, żeby na laserze były oznakowane w jednym miejscu. W jaki sposób można sprawdzać w którą stronę jest ułożona obudowa? Jakiego czujnika lub kilku czujników użyć? Wstawiam zdjęcie obudowy celem łatwiejszej wizualizacji problemu.
  4. Już samo wyeliminowanie pętli for i zastąpienie jej if-ami wyeliminowało wszystkie problemy. Na if-ach dodałem też pauzę i uruchomienie wentylatorów, wszystko działa, dziękuję za pomoc.
  5. Niestety nie, nie jestem programistą i wszystko robiłem intuicyjnie. Nie wiem czym zastąpić pętle for i delay. Przy każdym uruchomieniu urządzenia muszę mieć możliwość ustawienia ilości cykli, czasu zanurzenia i właśnie delay ustalam jak długo. Wstawiam zdjęcie urządzenia, żeby ułatwić wyobrażenie co to właściwie ma robić. Czas zanurzenia to czas kiedy siłownik pionowy jest wysunięty. Nie mam pojęcia w jaki sposób sterować tam czasami jeśli nie za pomocą delay.
  6. #include <LiquidCrystal.h> #define dol 1 #define gora 0 #define lewo 5 #define prawo 4 #define LM35 A0 long liczba_cykli; int ilosc_wykonanych; int czas_zanurzenia; int t; int oczekiwanie=1500; int oczekiwanie1=400; float temperatura=0; #define RS 7 #define EN 15 //A1 #define D4 16 //A2 #define D5 17 //A3 #define D6 18 //A4 #define D7 19 //A5 LiquidCrystal lcd(RS,EN,D4,D5,D6,D7); void setup() { int czas=czas_zanurzenia/1000; pinMode(0, OUTPUT); pinMode(2, INPUT_PULLUP); pinMode(1, OUTPUT); pinMode(3, INPUT_PULLUP); pinMode(4, OUTPUT); pinMode(5, OUTPUT); pinMode(6, INPUT_PULLUP); pinMode(8, INPUT_PULLUP); pinMode(7, INPUT_PULLUP); pinMode(9, INPUT_PULLUP); pinMode(10, INPUT_PULLUP); pinMode(11, INPUT_PULLUP); pinMode(12, INPUT_PULLUP); pinMode(13, INPUT_PULLUP); lcd.begin(20, 4); lcd.setCursor(6, 0); lcd.print("WITAJ"); delay(3000); lcd.clear(); lcd.begin(20, 4); bool cykle = true; while(cykle == true){ lcd.clear(); lcd.setCursor(4, 0); lcd.print("ILOSC CYKLI"); lcd.setCursor(8, 1); lcd.print(liczba_cykli); delay(300); if(digitalRead(10) == LOW){ delay(500); liczba_cykli=liczba_cykli+1; lcd.clear(); lcd.setCursor(4, 0); lcd.print("ILOSC CYKLI ="); lcd.setCursor(8, 1); lcd.print(liczba_cykli); } if(digitalRead(9) == LOW){ delay(500); liczba_cykli=liczba_cykli+10; lcd.clear(); lcd.setCursor(4, 0); lcd.print("ILOSC CYKLI ="); lcd.setCursor(8, 1); lcd.print(liczba_cykli); } if(digitalRead(11) == LOW){ delay(500); liczba_cykli=liczba_cykli+100; lcd.clear(); lcd.setCursor(4, 0); lcd.print("ILOSC CYKLI ="); lcd.setCursor(8, 1); lcd.print(liczba_cykli); } if(digitalRead(13) == LOW){ delay(500); liczba_cykli=liczba_cykli+1000; lcd.clear(); lcd.setCursor(4, 0); lcd.print("ILOSC CYKLI ="); lcd.setCursor(8, 1); lcd.print(liczba_cykli); } if(digitalRead(8) == LOW){ delay(500); liczba_cykli=liczba_cykli+10000; lcd.clear(); lcd.setCursor(4, 0); lcd.print("ILOSC CYKLI ="); lcd.setCursor(8, 1); lcd.print(liczba_cykli); } if(digitalRead(12) == LOW){ delay(500); liczba_cykli=liczba_cykli+100000; lcd.clear(); lcd.setCursor(4, 0); lcd.print("ILOSC CYKLI ="); lcd.setCursor(8, 1); lcd.print(liczba_cykli); } if(digitalRead(6) == LOW){ delay(300); cykle = false; } } bool zanurzenie = true; while(zanurzenie == true){ lcd.clear(); lcd.setCursor(2, 0); lcd.print("CZAS ZANURZENIA"); lcd.setCursor(8, 1); lcd.print(t); lcd.setCursor(12, 1); lcd.print("S"); delay(300); if(digitalRead(10) == LOW){ delay(500); czas_zanurzenia=czas_zanurzenia+1000; t=czas_zanurzenia/1000; lcd.clear(); lcd.setCursor(2, 0); lcd.print("CZAS ZANURZENIA ="); lcd.setCursor(8, 1); lcd.print(t); lcd.setCursor(12, 1); lcd.print("S"); } if(digitalRead(9) == LOW){ delay(500); czas_zanurzenia=czas_zanurzenia+10000; t=czas_zanurzenia/1000; lcd.clear(); lcd.setCursor(2, 0); lcd.print("CZAS ZANURZENIA ="); lcd.setCursor(8, 1); lcd.print(t); lcd.setCursor(12, 1); lcd.print("S"); } if(digitalRead(6) == LOW){ delay(300); zanurzenie = false; } } lcd.clear(); lcd.setCursor(4, 0); lcd.print("URUCHAMIANIE"); lcd.setCursor(6, 1); lcd.print("PROGRAMU"); delay(3000); for(int i=5;i>0;i--){ lcd.clear(); lcd.setCursor(9,2); lcd.print(i); delay(1000); } lcd.clear(); digitalWrite(prawo, HIGH); digitalWrite(gora, HIGH); } void loop(){ temperatura = ((analogRead(LM35) * 5.0) / 1024.0) * 100; lcd.begin(20, 4); lcd.noCursor(); lcd.noBlink(); for(ilosc_wykonanych; ilosc_wykonanych<liczba_cykli; ilosc_wykonanych++) { lcd.setCursor(0, 0); lcd.print("WYK. CYKLE"); lcd.setCursor(10, 0); lcd.print("="); lcd.setCursor(11, 0); lcd.print(ilosc_wykonanych); lcd.setCursor(0, 1); lcd.print("TEMPERATURA"); lcd.setCursor(11, 1); lcd.print("="); temperatura = ((analogRead(LM35) * 5.0) / 1024.0) * 100; lcd.setCursor(12, 1); lcd.print(temperatura); lcd.setCursor(17, 1); lcd.print("C"); lcd.setCursor(0, 2); lcd.print("ILOSC CYKLI"); lcd.setCursor(11, 2); lcd.print("="); lcd.setCursor(12, 2); lcd.print(liczba_cykli); lcd.setCursor(0, 3); lcd.print("CZAS ZANURZENIA"); lcd.setCursor(15, 3); lcd.print("="); lcd.setCursor(16, 3); lcd.print(t); lcd.setCursor(19, 3); lcd.print("S"); delay(300); delay(oczekiwanie); digitalWrite(gora, LOW); digitalWrite(dol, HIGH); delay(czas_zanurzenia); digitalWrite(dol, LOW); digitalWrite(gora, HIGH); delay(oczekiwanie1); digitalWrite(prawo, LOW); digitalWrite(lewo, HIGH); delay(oczekiwanie); digitalWrite(dol, HIGH); digitalWrite(gora, LOW); delay(czas_zanurzenia); digitalWrite(dol, LOW); digitalWrite(gora, HIGH); delay(oczekiwanie1); digitalWrite(lewo, LOW); digitalWrite(prawo, HIGH); lcd.clear(); } lcd.clear(); lcd.setCursor(3, 1); lcd.print("KONIEC PROGRAMU"); delay(500); } Odświeżam nieco temat, wstawiam cały kod. Program działa tak jak powinien, natomiast nie wiem jak dorobić do niego dwie kwestie: 1. W skrzynce sterowniczej zamontowane są dwa wentylatory. Chciałbym, żeby wentylatory uruchamiały się kiedy czujnik temperatury wskaże powyżej określonej temperatury, załóżmy 30 stopni. 2. Wciśnięciem jednego przycisku (obojętnie czy monostabliny czy bistabilny) chciałbym wywoływać zastopowanie wykonywania programu. Elektrozawory mają się po prostu zatrzymać, odliczanie w pętli for również do czasu wciśnięcia przycisku kolejny raz. Nie wiem jak te dwa problemy poprawnie zrealizować pod względem programowym. Będę wdzięczny za wszelkie sugestie.
  7. Cześć, mam problem z przerwaniem na arduino. W pętli loop wykonuje się pętla for. Chciałbym żeby wciśnięcie jednego przycisku monostabilnego wywoływało zatrzymanie pętli do czasu wciśnięcia kolejnego przycisku. Czyli program ma zatrzymać petle for na czas od wciśnięcia jednego przycisku do wciśnięcia drugiego. Program obsługuje elektrozawory. Jeśli w instrukcji przerwania wpisywałem digitalWrite(dol=LOW): podobnie dla góra, lewo i prawo to faktycznie w momencie wciśnięcia przycisku zawory się wyłączały, ale pętla działała zwiększając na wyświetlaczu ilosc wykonanych cykli mimo, że zawory nie działały. Jeśli chcę do wywoływania pauzy programu użyć przycisku monostabilnego to pewnie będę musiał też w funkcji przerwania uwzględnić jakąś pętlę while i zmienną typu logicznego żeby przerwanie wykonywało się do czasu wciśnięcia kolejnego przycisku? Chciałbym prosić o pomoc w napisaniu samego środka funkcji przerwania. Nie do końca wiem też jaka jest praktyczna różnica w wywoływaniu przerwania stanem niskim, a zboczem opadającym. for(ilosc_wykonanych; ilosc_wykonanych<liczba_cykli; ilosc_wykonanych) { lcd.setCursor(3, 0); lcd.print("WYKONANE CYKLE"); lcd.setCursor(8, 1); lcd.print(ilosc_wykonanych); lcd.setCursor(0, 2); lcd.print("ILOSC CYKLI"); lcd.setCursor(11, 2); lcd.print("="); lcd.setCursor(12, 2); lcd.print(liczba_cykli); lcd.setCursor(0, 3); lcd.print("CZAS ZANURZENIA"); lcd.setCursor(15, 3); lcd.print("="); lcd.setCursor(16, 3); lcd.print(t); lcd.setCursor(19, 3); lcd.print("S"); delay(300); delay(oczekiwanie); digitalWrite(gora, LOW); digitalWrite(dol, HIGH); delay(czas_zanurzenia); digitalWrite(dol, LOW); digitalWrite(gora, HIGH); delay(oczekiwanie); digitalWrite(prawo, LOW); digitalWrite(lewo, HIGH); delay(oczekiwanie); digitalWrite(dol, HIGH); digitalWrite(gora, LOW); delay(czas_zanurzenia); digitalWrite(dol, LOW); digitalWrite(gora, HIGH); delay(oczekiwanie); digitalWrite(lewo, LOW); digitalWrite(prawo, HIGH); lcd.clear(); ilosc_wykonanych = ilosc_wykonanych + 1; } lcd.clear(); lcd.setCursor(3, 1); lcd.print("KONIEC PROGRAMU"); delay(500); }
  8. Cześć, jestem Grzegorz, mam 23 lata, studiuję mechatronikę i pracuję w dziale technicznym w firmie produkcyjnej. Na forum trafiłem ponieważ staram się zautomatyzować część procesów w moim miejscu pracy.
×
×
  • Utwórz nowe...