Skocz do zawartości

Projekt automatu wyrzucającego cukierki


mateusz797

Pomocna odpowiedź

Cześć, 

Zamierzam skonstruować maszyne do wyrzucania cukierków. Jako czujnik wrzucanych monet zastosuje czujnik przerwania wiązki. Jaki mechanizm wyrzucający cukierek oraz zatrzymujący pozostałe zastosuje serwomechanizm Tower PRo. Cukierki będą sie  znajdować w tunelu w którym na końcu bd znajdował się orczyk serwa który zwalnia i blokuję cukierki w zależności od tego czy została wrzucona moneta. Co sądzicie o takim rozwiązaniu? Pytanie czy jak ten czujnik bariery otrzyma sygnał o przerwanej wiązce (poprzez wlot monety do tunelu) to czy arduino da radę samo poruszyć serwomechanizmem o określony kąt zeby odblokować 1 cukierek i wrócić się szybko zeby pozostałe nie wypadly? Zamierzam wykorzystać taki program plus for (dane na temat kąta serwa) 

16162461030275393176710500982201.jpg

16162461270292505711427717578381.jpg

IMG_20210320_141405.jpg

Screenshot_20210320-134307.jpg

Screenshot_20210320-134303.jpg

16162462350247056047861227060481.jpg

Edytowano przez mateusz797
Link do komentarza
Share on other sites

2 godziny temu, mateusz797 napisał:

 to czy arduino da radę samo poruszyć serwomechanizmem o określony kąt zeby odblokować 1 cukierek i wrócić się szybko zeby pozostałe nie wypadly? Zamierzam wykorzystać taki program plus for (dane na temat kąta serwa) 

 

Duzo zalezy od tego jak ten tunel bedzie zbudowany no i co to za cukierki? Bo to tez bardzo wazne..jak w papierku to moze byc problem z blokowaniem sie.

Co do serwa to jest ono i szybkie i wolne, to juz zalezy od wykonania reszty..podaj wiecej szczegolow i koniecznie przepisz tu kod..nie chodzi mi o pismo tylko poprostu strasznie nie wygodnie sie tak czyta..:-)

Link do komentarza
Share on other sites

No to cukierki wporzadku, ale to otwieranie zamykanie tylko orczykiem to moze byc zle rozwiazanie...moze dojsc do takiej sytuacji ze podczas otwarcia wyleci cukierek a drugi do polowy i orczyk przy powrocie go zgniecie poprostu...to juz lepiej pionowy tunel..pod tunelem podstawa ze zjezdzajnia..miedzy tunelem a podstawa (w osi) odleglosc ciut wieksza miz srednica cukierka..serwo zamocowane tak ze orczyk jest na wysokosci polowy cukierka..czyli cukierek lezy na podstawie poza tunelem przyciskany przez reszte cukierkow..dostajesz sygnal i serwo zaczyna jechac w bok i "spychac" cukieren na zjezdzalnie a miedzy czasie z gory na orczyk spada nastepny..po powrocie orczyka znowu spada cukierek na podstawe..tu masz przynajmniej gwarancje ze jak ktos wrzuci zl to nie wyleci 5 cukierkow i nikt sie nie nazre za free😂

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

(edytowany)
#include <Servo.h>
#define Ledpin 13;
#define Sensorpin 4;
#define Servopin 9;
int sensorState = 0; 
Servo myservo;
  
int pos = 0;

void setup () {
  
  pinMode (Ledpin, OUTPUT);
  pinMode (Sensorpin, INPUT_PULLUP);
  digitalWrite(Sensorpin, HIGH);
  myServo.attach(9);
  
void loop () 
  {
  sensorState = digitalRead(sensorPin);

if (sensorState == LOW) 
  
  digital Write(Ledpin,HIGH);
  
  pos = 20;
  myservo.write(pos);
  delay(10);
  pos = 0;
  myservo.write(pos) 
 } 
  
  else {
    
    digitalWrite(Ledpin, LOW); 
    pos = 0;
    myservo.write(pos);
         }
         }
         }
   
    

Ok podoba mi sie rozwiązanie. jak zastosuje instrukcje if (sygnal przerwania wiązki) oraz for (dla danego kąta serwa mysle ze bd ok. Ja mysle ze orczyk nie zgniecie ferrero bo twarde jest 😊 😄. Ja mysle ze tunel powinien byc pod bardzo ostrym Katem bo cukierki będą wolniej jechać w dół . Jak beda pionowo to moze serwo nie zdążyc na czas. 😄

Program jest na q instr if for else

Nie ma monety serwo stoi jest monetq serwo sie przekręca i szybko wraca. Tyle. Co myślisz o programie? 

 

Edytowano przez mateusz797
Link do komentarza
Share on other sites

Jezeli nie chcesz poruszac servem plynnie co "kroczek" z zakresu 0-180, tylko odrazu ustawiasz zadany kat jak u Ciebie to nie musisz tu wogole uzywac petli for...wystarczy jeden if i w nawiasach po kolei wykonujesz polecenia...po za tym brakuje Ci tu kilka nawiasow klamrowych.. Zapis "pos += 20" oznacza " pos = pos + 20" czyli odrazu otrzymujesz pos=20. A nie jak to zwykle bywa w for.. "pos++" co oznacza ze po kazdym przejsciu petli for , pos zwiekszy sie o 1 !!. I tak trzeba robic jesli chcialbys miec plynny ruch serwem z rozna predkoscia (po dodaniu delay). Tak jak teraz to serwo "goni" z max. Mozliwa predkoscia na pozycje pos...zakres jaki masz teraz czyli 0/20 to malutki zakres ruchu no ale to dobierzesz doswiadczalnie...generalnie mozesz wywalic wszystkie for i w if jak mowilem dac komendy jedna pod druga i tez bedzie hulac i duzo prosciej kod wyglada...

50 minut temu, mateusz797 napisał:

 Jak beda pionowo to moze serwo nie zdążyc na czas. 😄

 

Jak by byly pionowo i z takim rozwiazaniem jak napisalem to serwo moglo by i godzine "wyrzucac" cukierek bo nastepny nie dotknal by podstawy pod tunelem dopoki serwo by nie wrocilo na poczatek...mozna by zrobic orczyk jako taka "cwiartke" kola i podczas wypychania cukierka tunel bylby zasloniety calkowicie...

Link do komentarza
Share on other sites

Troszke nie tak...w taki przypadku jak teraz servo nigdy by nie ruszylo! Bo w if najpierw wykonujesz "servo.write(pos)" a pos ma wartosc 0! Wiec? Wiec nic sie nie dzieje..modyfikacja pos po "servo.write" nic nie daje...musisz najpier ustalic pos, potem robisz "servo.write" potem jakis "delay" potem znow zmieniasz "pos" na wyjsciowa wartosc, potem "servo.write" zeby serwo wrocilo na poczatek i tu w zasadzie jest koniec...wychodzisz z if i znow czekasz na kolejna monetke..

Druga sprawa..po else za nawiasem klamrowym nie podajesz juz warunku do sprawdzenia! Dlaczego? Bo else wykona sie automatycznie jesli warunek if nie zostanie spelniony! Np...

if (stan == LOW) {
  wykonaj tu kod!
    (nie wykonuj else!)
  } else {
  jesli if sie nie wykonal
    czyli stan jest inny niz
    LOW to wykonaj to co w nawiasach
    klamrowych "else" }

Trzecia sprawa...przy przypisaniu pinu w setup() nie musisz ustalac stanu wyjsciowego tego pinu poprzez "digitalWrite()" wystarczy ze w "pinMode" zamiast "INPUT" napiszesz "INPUT_PULLUP" spowoduje to podciagniecie rezystora wewnetrznego do +5v i ustalenie stanu na pozim "HIGH" (twoj zapis jest prawidlowy, ale niepotrzebny)

Link do komentarza
Share on other sites

(edytowany)

Ok poprawilem Program. Myślę ze jest ok. Program w arduino sie kompiluje.

#include <Servo.h>
#define Ledpin 13
#define Sensorpin 4
#define Servopin 9
int sensorState = 0; 
Servo myservo;
  
int pos = 0;

void setup () {
  
  pinMode (Ledpin, OUTPUT);
  pinMode (Sensorpin, INPUT_PULLUP);
  
  myservo.attach(9);
}
void loop () 
  {
  sensorState = digitalRead(Sensorpin);

if (sensorState == LOW) {
  
  digitalWrite(Ledpin,HIGH);
  
  pos = 20;
  myservo.write(pos);
  delay(10);
  pos = 0;
  myservo.write(pos); 
  delay(1000);
}
  else 
    {
    digitalWrite(Ledpin, LOW); 
    pos = 0;
    myservo.write(pos);
         }
         }
         
   

 

Edytowano przez mateusz797
Link do komentarza
Share on other sites

Jeszcze tylko nawiasu Ci brakuje za warunkiem if (klamrowy poczatkowy) w petli setup() mozesz wyrzucic "digitalWrite" bo po to wlasnie dales "INPUT_PULLUP" i jest zbedny..mozesz jeszcze "na zewnatrz" w petli loop() dodac np. delay(1000) i po tym "digitalWrite(ledpin, LOW)" da Ci to taki efekt ze po wrzuceniu monety dioda zaswieci wykona sie kod poczeka 1s i wtedy zgasnie...tak jak teraz to ta dioda poprostu szybko mignie i zgasnie...i czasy po "servo.write" beda potrzebne chyba dluzsze zeby serwo zdazylo wykonac pelny ruch przed ponownym wywolanie nowej pozycji,ale to doswiadczalnie dobierzesz...tak poza tym to juz ok powinno byc:-) teraz tylko ustalic wysoka marze za cukierka i kosic kwity..:-D

Edit: wroc! Nie dodawaj delay(1000) w petli loop() tylko na koncu w if...jak w loop() by byl ten delay to by na sekunde blokowal i np. Wrzucenie monety moglo by nie zostac wykryte...a tak to po 1s dioda zgasnie i juz zawsze wykryje nowa monete..

Edytowano przez farmaceuta
Link do komentarza
Share on other sites

(edytowany)
#include <Servo.h>
#define Ledpin 13
#define Sensorpin 4
#define Servopin 9
int sensorState = 0; 
Servo myservo;
  
int pos = 0;

void setup () {
  
  pinMode (Ledpin, OUTPUT);
  pinMode (Sensorpin, INPUT_PULLUP);
  
  myservo.attach(9);
}
void loop () 
  {
  sensorState = digitalRead(Sensorpin);

if (sensorState == LOW) {
  
  digitalWrite(Ledpin,HIGH);
  
  pos = 20;
  myservo.write(pos);
  delay(10);
  pos = 0;
  myservo.write(pos); 
  delay(1000);
  digitalWrite(Ledpin, LOW) ;
}
  else 
    {
    digitalWrite(Ledpin, LOW); 
    pos = 0;
    myservo.write(pos);
         }
         }
         
   

Update - mam nadzieje ze jest ok. Ciekawe jako srednice ma rafaello lub ferrero 😄 juz nie moge sie testow doczekac

Edytowano przez mateusz797
Link do komentarza
Share on other sites

Jeszcze tylko po delay(1000) uzyj digitalWrite(ledpin, LOW)...To spowoduje ze po wykonaniu ruchu dioda sie swieci jeszcze 1s i ja gasi, i dopiero wtedy opuszczasz if'a i znow ciagle sprawdza czy jest nowa moneta...przetestuj swoje rozwiazanie "opadania" cukierkow, choc szczerze nie do konca rozumiem jak to ma dzialac? 🙂

Link do komentarza
Share on other sites

(edytowany)

Poprawiłem program. Zobacz, na tych odstających niebieskich klockach bd patrzec na siebie czujnik i odbiornik przerwania wiązki. (Powyzej pisze jaki zamówilen w 1.poście). Jak moneta wleci przerwie wiązkę i zostanie wysłany odp. Sygnał do arduino ktory wg programu odpali serwo. Na samej górze (zdj nr 2) bd sie znajdowało serwo ktore bd puszczac 1 cukierek i blokować następne cukiery 🍬 :D. Pozostalo zbudować zbiornik na cukierki i rure/tube juz wg rozmiarow ferrerorsche. Cukierki beda zjeżdżac po odblokowaniu prze serwo po tej rampie zbudowanej juz z klockow (lewa str . Zamontować czujnik przerwania wiązki arduino serwo i jazda 🙂 Co 'myślisz o rozwiązaniu? 

Ten tunel co widzisz na 1msc to ten na monety. 

16163433432123721919173590958838.jpg

16163433630736114557804023250816.jpg

Edytowano przez mateusz797
Link do komentarza
Share on other sites

Ten pojemnik musi byc dobrze zaprojektowany zeby cukierki sie nie klinowaly...cos na zasadzie duzo cukierkow w butelce po pepsi szyjka w dol...czasem poleci czasem nie...sama tuba to pewne rozwiazanie tylko ograniczona ilosc cukierkow przy w miare kompaktowych wymiarach...no nic rob i pokazuj co Ci wyjdzie:-) 

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.