Skocz do zawartości

Programowanie serwomechanizmu do poszczególnych przycisków


AlanB

Pomocna odpowiedź

@orb777 mam przykre doświadczenia z tym czujnikiem i nie polecałbym. Ale czemu nie mikrokrańcówka z przedłużoną wajchą? Jak dobrze wyregulujesz do na kroplę deszczu zareaguje...

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

@Santiago @orb777 

Tak myślę że nie ma konieczności zaprzątac sobie głowy z tą blokadą bo faktycznie nie będzie potrzebna 🙂 jakoś udało mi się ogarnąć te blaszki chociaż kieliszek lekko się buja , myślałem właśnie nad laserem tylko nie zbadałem jeszcze jakby to działało z kieliszkiem czy by nie było  zakłamanego wyniku itp. znalazłem czujnik na przedmioty przeźroczyste ale koszt 300zl sztuka co mija się z celem 😁

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

@orb777 po prostu to coś trzeba oprogramować, sprawdzać różnice między oświetlonym a nieoświetlonym, ogólnie trochę roboty jest. Nie wystarczy pomiar napięcia na fototranzystorze. W sumie biorąc pod uwagę czas kalibracji taniej wychodzi ToF. A biorąc pod uwagę kod który tu widziałem raczej nie ma szans na -nawet nie napisanie, ale zrozumienie jak to działa.

Inna sprawa, że ani tsop ani tof się do tego nie nadaje. 

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

@SantiagoUdało mi się w końcu po poszukiwaniach odnaleźć odpowiedni przycisk z blaszką aby nie podnosił kieliszka jest to przełącznik krańcowy 3p z dźwignią i śmiga aż miło.  Nalewak już w 90% złożony , jedna myśl mi chodzi po głowie , bo gdy tak sobie testowałem już razem z wyświetlaczem na którym widać ilości nalanych kieliszków to tak pomyślałem czy jest możliwość aby podczas nie nalewania na wyświetlaczu zmieniały się wyniki poszczególnych kieliszków czyli , najpierw wyświetli się wynik 1-ego kieliszka po 2 sekundach wynik drugiego kieliszka itd coś na zasadzie takiego wygaszacza gdy nalewak akurat nie nalewa, bo tak aby zobaczyć ile się już wypiło to trzeba i tak polać i mieć szybkie oko aby zobaczyć co po paru głębszych może być już kłopotliwe 🙂

Link do komentarza
Share on other sites

@AlanB Wyobraź sobie , że myślałem nad tym, jak również myślałem nad krańcówką. Mam takie dwie, ale nie chciało mi się testować. 

Jutro się napisze, dzisiaj syn ma urodziny i nie mam czasu na zabawę.

Szkoda, że nie wstawiasz zdjęć z Nalewaka i nie opisujesz problemów jakie napotykasz. Zawsze może to się przydać innym. Jak również schemat połączeń zasilania itp.

Rozumiem , że chcesz zdążyć przed Nowym Rokiem, aby zaproszeni byli zdumieni ? Pochwalam to, nie ma to jak zobaczyć zaskoczenie na twarzach innych ludzi :). 

Myślałem również nad 'upiciem' Nalewaka, czyli po nalaniu wielu kieliszków zaczął wykonywać dziwne ruchy ..., albo po stwierdzeniu , że osoba x wypiła już 10 to odmowa dostępu i odpowiedni komunikat. No ale to na wersję Nalewaka 2 .

Link do komentarza
Share on other sites

@Santiago niestety film z działania nalewaka nie mogę tutaj wrzucić bo jest to za duży plik więc dopiero jak wrzucę na YouTube lub tym podobnym to udostepnie link. Schemat podłączenia również ogarnę aby ładnie wyglądało bo na razie tylko ołówkiem nabazgrane , że tylko ja się połapię co i jak 🤣 Dla syna wszystkiego najlepszego ode mnie z okazji urodzin .     Wracając jeszcze do tego liczenia kieliszkow to 0.04 to oznacza że kieliszkiem ma 40ml ?  Czyli gdy miałbym np kieliszki 28ml to muszę ustawić 0.28 ? 

Link do komentarza
Share on other sites

28ml to 0,028.  Z filmami mam ten sam problem. Jeżeli chodzi o schemat to sam szukam jakiegoś ładnego edytora (i prostego - na moje potrzeby).  Co do syna to jak wczoraj zażartowałem , że kupiłem mu na prezent arduino to nie chciałbyś widzieć wyrazu jego twarzy.... ma 16 , ale on jest humanistą - mówi w innych językach, zna geopolitykę, historię itp. Dwa lata temu jak książka przyszła to patrzę się i mówię - Przecież to po angielsku, a syn na to 'No i ...' Powinienem go przeprosić z głupie pytania 🙂

Link do komentarza
Share on other sites

@AlanB No wygląda ciekawie, tak jak ja nie masz dobrze ustawionego kontrastu na wyświetlaczu. Ja tego nie robię  , ponieważ to i tak rozbiorę, tobie zalecam podpiąć odpowiedni rezystor, jak również myślałem abyś na wszelki wypadek na każdy przycisk zrobił filtr , który to będzie niwelował drgania styków. Na Forbocie jest to dobrze opisane.

Interesuje mnie strona elektryczna, oraz jak robisz te części. Drukarka 3D ? Chociaż patrząc lepiej dostrzegam sprzęty znalezione w piwnicy 🙂

Link do komentarza
Share on other sites

Ja bym dał jakąś folię na te krańcówki - o ile przypadkowe kapnięcie wódki czystej jest nawet wskazane bo przeczyści styki, o tyle po likierze porzeczkowym konieczne będzie rozebranie ustrojstwa i wymiana krańcówki.

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

@AlanB No wygląda ciekawie, tak jak ja nie masz dobrze ustawionego kontrastu na wyświetlaczu. Ja tego nie robię  , ponieważ to i tak rozbiorę, tobie zalecam podpiąć odpowiedni rezystor, jak również myślałem abyś na wszelki wypadek na każdy przycisk zrobił filtr , który to będzie niwelował drgania styków. Na Forbocie jest to dobrze opisane.

Interesuje mnie strona elektryczna, oraz jak robisz te części. Drukarka 3D ? Chociaż patrząc lepiej dostrzegam sprzęty znalezione w piwnicy 🙂

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
 int czasStary, czasNowy;   // do wyswietlacza - zmiana napisow
 bool flaga;
 int licznik;               // delay miesza milisekundy... musze zrobic prowizorke
 
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
  
  if (millis() - czasStary > 5500) {czasStary = millis(); licznik++;}
  if (licznik > 3) {flaga = !flaga; licznik = 0;}
  if (flaga == 0) { fWyswietlacz1(0);} else {fWyswietlacz1(1);} 
 
}

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]);
}

void fWyswietlacz1(int co)
{ 
  if (co == 0) {
   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");
               }
 
  if (co == 1) {
    lcd.clear();
    lcd.setCursor(0,0);  lcd.print("1-");  lcd.setCursor(2,0);   lcd.print(tOsoby[1]);
    lcd.setCursor(6,0);  lcd.print("2-");  lcd.setCursor(8,0);   lcd.print(tOsoby[2]);
    lcd.setCursor(12,0); lcd.print("3-");  lcd.setCursor(14,0);  lcd.print(tOsoby[3]);
    lcd.setCursor(0,1);  lcd.print("4-");  lcd.setCursor(2,1);   lcd.print(tOsoby[4]);
    lcd.setCursor(6,1);  lcd.print("5-");  lcd.setCursor(8,1);   lcd.print(tOsoby[5]);
    lcd.setCursor(12,1); lcd.print("6-");  lcd.setCursor(14,1);  lcd.print(tOsoby[6]);
    
               
  }            
}

Już wcześniej czytałem , że delaje zakłócają millis((), no ale teraz to wyszło dlatego taki dziwny licznik dodałem . Zobacz jak działa wyświetlanie przed postawieniem kieliszka, a następnie jak już nalewa. Myślę jednak , że nie ma to tutaj żadnego znaczenia.

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.