Skocz do zawartości

Programowanie serwomechanizmu do poszczególnych przycisków


AlanB

Pomocna odpowiedź

@Santiago oj akcja się rozwija i to konkretnie 🙂 kawał dobrej roboty Pan wykonuje i dziękuję za takie zaangażowanie i chęć pomocy w tym małym projekcie . 

Niestety mój pierwowzór nalewaka musiałem wykonać jeszcze raz , bo źle wykonałem otwór pod kieliszek i zamiast trafiać do środka to lało troszkę po ściance kieliszka. 

Nie poddaję się i już mam drugiego pacjenta na stole , ale z operacją musi poczekać do poniedziałku , wtedy będę miał dostęp do frezarki stołowej i będę mógł bardziej precyzyjniej wykonać otwory pod kieliszki jak i również pod wyświetlacz lcd. Tak sie zastanawiam jakby ten ekran zabezpieczyć przed przypadkowym wylaniem z kieliszka , a myślałem aby go zamontować przed kieliszkami ... 

Link do komentarza
Share on other sites

Tutaj nie ma 'Pan'. Po prostu powiedz 'dzięki'.

I nie ma za co dziękować, to lubię takie proste wyzwania (bo na więcej mnie nie stać).

Na razie to mię zatrzymałeś w nauce języka C, oraz w powtórnym przejściu kursu Forbota Arduino poziom 1 :). 

Ale Nalewak musi powstać ! Chociaż ostatnio przesuwając laptopa , popchnołem jedną rzecz z kabelkami , a ona dalej popchneła moją kawę , która pięknie ozdobiła ścianę malowaną dwa miesiące temu...

No kobieta nie była szczęśliwa , dzisiaj to pomaluję . Odpal swój wirtualny Nalewak na 3000 delajów 🙂

Link do komentarza
Share on other sites

#include <Servo.h>          // biblioteka dla silnika serwo
#include <LiquidCrystal.h>  // biblioteka wyswietlacza
LiquidCrystal lcd (7, 6, 5, 4, 3, 2);   // jak podlaczony jest wyswietlacz
Servo serwomechanizm;
 bool tPelny[7];            // warunek czy kieliszek zostal napelniony
 int  tOsoby[7];            // tablica dla kazdej osoby od 0 do 6 - takie sa tablice w c, ilosc na osobe
 const int tPozycja[7] {0, 10, 44, 78, 112, 146, 180};   // pozycja dla serwa
 long sumaZimprezy = 0;     // ile w sumie na imprezie bylo nalanych
 
void setup() {
 pinMode(13, OUTPUT);                  // przekaznik
 pinMode(A0, INPUT_PULLUP);    pinMode(A1, INPUT_PULLUP);    pinMode(A2, INPUT_PULLUP);
 pinMode(A3, INPUT_PULLUP);    pinMode(A4, INPUT_PULLUP);    pinMode(A5, INPUT_PULLUP);
 serwomechanizm.attach(12);     serwomechanizm.write(0);
 lcd.begin(12,2);     
                      lcd.print(" Napijemy sie ?");   delay(3000);
 lcd.setCursor(0,1);  lcd.print("Postaw kielich !"); delay(3000);
}

void loop() {
  fCzujniki();           // funkcja ktora sprawdza stan czujnikow
  lcd.clear();  lcd.setCursor(0,0);  lcd.print("    ZDROWIE !");
                lcd.setCursor(0,1);  lcd.print("Suma - "); 
                lcd.setCursor(7,1);  lcd.print(sumaZimprezy);
                lcd.setCursor(10,1); lcd.print(sumaZimprezy*0.04); // podanie w litrach o ile kieliszki sa 0.4
                lcd.setCursor(15,1); lcd.print("l");
}

void fCzujniki() {
  if (digitalRead(A0) == LOW) {delay(100); if (digitalRead(A0) == 0) {
    fUstawNalej(1);}  } else {tPelny[1] = false;}
  if (digitalRead(A1) == LOW) {delay(100); if (digitalRead(A1) == 0) {
    fUstawNalej(2);}  } else {tPelny[2] = false;}
  if (digitalRead(A2) == LOW) {delay(100); if (digitalRead(A2) == 0) {
    fUstawNalej(3);}  } else {tPelny[3] = false;}  
  if (digitalRead(A3) == LOW) {delay(100); if (digitalRead(A3) == 0) {
    fUstawNalej(4);}  } else {tPelny[4] = false;}
  if (digitalRead(A4) == LOW) {delay(100); if (digitalRead(A4) == 0) {
    fUstawNalej(5);}  } else {tPelny[5] = false;}
  if (digitalRead(A5) == LOW) {delay(100); if (digitalRead(A5) == 0) {
    fUstawNalej(6);}  } else {tPelny[6] = false;}   // sprawdzanie dwa razy aby wyeliminowac drgania stykow
    delay(1000); serwomechanizm.write(tPozycja[0]); // wracaj do pozycji poczatkowej
  
}

void fUstawNalej(int poz)    // sprawdz czy kieliszek pusty, jesli tak to nalewaj, zaznacz jako pelny
 {
  if (tPelny[poz] == false) {++ tOsoby[poz]; ++ sumaZimprezy; fWyswietlacz(poz);
                             delay(110); serwomechanizm.write(tPozycja[poz]);delay(2000); digitalWrite(13, HIGH);
                             delay(3000); digitalWrite(13, LOW); tPelny[poz] = true;
                             
  }
 }
void fWyswietlacz(int poz)
 {
 // char numer; numer = tOsoby[poz];
  lcd.clear();
  lcd.setCursor(0,0);  lcd.print("Nalewam do -");
  lcd.setCursor(14,0); lcd.print(poz);
  lcd.setCursor(0,1);  lcd.print("To nalanie -");
  lcd.setCursor(14,1); lcd.print(tOsoby[poz]);

}

Pamiętaj, aby przelicznik na litry dobrać do wydajności pąpki i raczej napewno zmienić te 0.04. Oczywiście , możesz to usunąć.

Ostatnio też poprawiłem poważny błąd, podczas wysłania polecenia do serwa , zaraz po tym było nalewaj - ale zauważyłem , iż serwo do skrajnej pozycji potrzebuje więcej niż 1 sek.... kolejny delaj :), który zatrzymał nalewanie w ruchu :). 

Dzisiaj niestety to koniec, ale mam świetny (według mnie), plan na zabezpieczenie, które to nie potrzebuje żadnych dodatkowych  przycisków.

Pamiętaj także - jeżeli Nalewak nalewa (jest w delaju) to jak ktoś podniesie pełny kieliszek wypije i położy na to samo miejsce,a  Nalewak gdzieś dalej w delaju to ten kieliszek zawsze będzie traktowany jako pełny. W takim wypadku należy wyprosić gościa , albo podnieść kieliszek kiedy Nalewak nie będzie w delaju :)

 

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

@Santiago dziękuję bardzo tak się składa, że kieliszki mam akurat 0.4 wiec nie muszę nic zmieniać 🙂 

Jutro już będę dalej działał z obudową  , jakieś może sugestie , podpowiedzi jak zabezpieczyć lcd przed zalaniem ? myślałem nad jakąś szybką z plexi tylko czy to zda egzamin? ...

Link do komentarza
Share on other sites

@Santiago A gdybym tak jeszcze chciał dodać podświetlenie pod kieliszki ( czerwone gdy nalewa, zielone gdy naleje ) do danego kieliszka to muszę stworzyć coś na zasadzie jak z serwem  ?  czyli  const int ..... bo jak dodam do funkcji "void fUstawNalej" typowe digitalWrite(8,HIGH); to za kazdym razem obojętnie na jakiej pozycji to zawsze zapali diodę przypisaną do pinu a jak zrobić aby do każdej pozycji przypisać poszczególne diody ?

Link do komentarza
Share on other sites

16 godzin temu, Santiago napisał:

W takim wypadku należy wyprosić gościa , albo podnieść kieliszek kiedy Nalewak nie będzie w delaju 🙂

Sugeruję, byście jednak rozważyli propozycję @ethanaka z 4 października i zastosowali maszynę stanów. Umiejętność stosowania tej techniki przyda się nie tylko przy nalewaniu kieliszków 😁.

Inaczej wciąż będziecie bohatersko walczyć z problemami, które stwarza stosowanie delay'ów. Im częściej będziecie musieli obsługiwać asynchroniczne zdarzenia zewnętrzne (takie jak usunięcie kieliszka), tym problemów będzie więcej.

  • Lubię! 1
Link do komentarza
Share on other sites

@AlanB Wyświetlacz na górze. Martwią mnie te diody, najlepiej programowalne. Nie mam takich , jak kupię to można iść dalej. Jeżeli normalne trój kolorowe to należy zwiększyć ilość wyjść. 

Muszę poważnie podejść do Nalewaka i wydzielić czas na to.

@jand Tutaj podobają mi się delaje, ale wersja 2 Nalewaka będzie lepsza.

W razie czego to wyprę się tego dziecka argumentując:

1 Niczego nie zrobiłem z głową.

2Niczego nie zrobiłem co by miało ręce i nogi.

3 Niczego nie zrobiłem w tak krótkim czasie jak dziewięć miesięcy. 

Link do komentarza
Share on other sites

Pytanie odnośnie zasilania teraz mam zasilanie sieciowe 12V , a moje pytanie czy np akumulatorek litowo-polimerowy 1800 MAH da radę uciągnąć ten zestaw dłużej niż 10godzin? Aby nalewak stał się bezprzewodowy?

  • Lubię! 1
Link do komentarza
Share on other sites

To jest raczej urządzenie stacjonarne i zasilanie inne niż z sieci raczej nie jest praktyczne.  Na tym poziomie raczej nie warto zbyt mocno kombinować. 

Czy bateria wytrzyma 10h czy 4  to zależy co podłączysz, ale nie ma optymizmu i to z wielu powodów. 

 1 zapomnisz naładować i podczas kolejnej imprezy przestanie działać po 10 minutach...

2 masz drugą w zapasie , ale zapomniałeś ją naładować i mamy punkt 1 (pomijając fakt że szukania czegoś podczas imprezy to nie przyjemność).

3 koło ratunkowe - ładujesz Nalewak przez kabel i teraz bateria szczęśliwie się ładuje i wszystko działa - wracamy do punktu 0 - kabel..

Dwa dni temu znalazłem temat Nalewaka z 2020 roku  na Forbocie - ale ten człowiek po prostu stworzył sam wszystko i tylko się pochwalił tym co ma. Jego wiedza jest dużo większa nisz nasza, ale warto wyciągnąć wnioski.

Jutro dopiszę zabezpieczenie przed osobami niepowołanymi , ale nie wiem czy komplikować to czy nie, teoretycznie wydumałem takie coś , że wyślę uproszczone zabezpieczenie i bez patrzenia na kod spróbujesz odpalić Nalewak z takim efektem aby dioda sygnalizująca nalewanie zapalała się. Dzieci myślą w nieco inny sposób więc kod jest nie intuicyjny dla nich (ani dla dorosłych(chyba)). 

No i Na Zdrowie ! 

Link do komentarza
Share on other sites

10 godzin temu, Santiago napisał:

1 zapomnisz naładować i podczas kolejnej imprezy przestanie działać po 10 minutach...

Można dodać wskaźnik naładowania/mały woltomierz wyzwalany przyciskiem. W aku od elektronarzędzi sprawdza się to.

Arduino ma też adc, które z dzielnikiem napięcia może działać jak prosty woltomierz, ale trochę więcej zachodu przy tym.

 

wskaznik_aku.png

Edytowano przez orb777
Link do komentarza
Share on other sites

@orb777 Dzięki za info o tym cudeńku ! Muszę to kupić (parę sztuk - przy tej cenie...).

Co do ADC to oczywiście można, ale moim zdaniem najlepiej skończyć projekt, wyciągnąć wnioski i jak przyjdzie chęć na coś lepszego , zbudować to.  Niemal zawsze pierwszy projekt motywuje do stworzenia owej rzeczy po raz drugi. Wiemy , że to jest zawodne, to jest zbędne, to powinno być bardziej rozbudowane, tutaj brakuje przepływomierza, tutaj są problemy z serwo.... 

No czas na pisanie :). Miłego dnia dla Wszystkich 🙂

Link do komentarza
Share on other sites

@Santiago w sumie to racja a znając moja pamięć to na pewno zapomnę naładować baterię🫣. Teraz aktualnie walczą z tymi mikro przełącznikami krańcowym , kupiłem rozmiarowo pasujące do projektu natomiast problem jest w tych blaszkach a mianowicie albo moje kieliszki są takie lekkie albo te mikro przełączniki mają taką mocna sprężynę bo  jak stawiam kieliszek to blaszka potrafi mi podnosić kieliszek ku górze... Szukałem już czy może nie ma jakiegoś czujnika na szkło, na przeźroczyste przedmioty, ale są same duże laboratoryjne ... 

Link do komentarza
Share on other sites

Wiedziałem , że tak będzie z tymi przełącznikami - przecież nawet jak naciskasz palcem to stawiają solidny opór. Ja natomiast walczyłem przez 3 godziny z zabezpieczeniem i tak działa , że nie można tego odbezpieczyć... 

Wcześniej wpadłem na pomysł aby postawić na mikroprzełącznikach jakiś krążki metalowe o odpowiedniej wadze, tak aby postawienie kieliszka włączało je. Jest to i tak prowizorka. Trzeba postawić na laser. 

Pod każdym miejscem na kieliszek dioda , na ramieniu Nalewaka czujnik. Jeżeli jest silne źródło światła to znaczy że nic tam nie stoi jeżeli jest dużo słabsze to znaczy jest kieliszek... Wadą tego podejścia jest że ramie co parę sekund musiałoby sprawdzać to wszystko... Chyba , że czujnik zbliżeniowy i tylko jak wykryje ruch to sprawdza.

Link do komentarza
Share on other sites

2 godziny temu, Santiago napisał:

Trzeba postawić na laser. 

Z rozwiązań optycznych, próbowałeś może TCRT5000? Z ciekawości sprawdziłem i nawet mogłoby to działać (w małych pieniądzach), tyle, że kieliszek musiałby mieć nieprzezroczystą naklejkę od spodu, najlepiej białą (byle nie czarną). To tylko pomysł i nie bez wad - np. obudowa czujnika musi puszczać podczerwień, a sam detektor może być "zmylony" np. przez promienie słoneczne. Jednak ogólnie działa, potencjometrem da się wyregulować odległość wykrywania, nawet poniżej 1 cm.

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.