Popularny post TheAresX Napisano Sierpień 13, 2019 Popularny post Udostępnij Napisano Sierpień 13, 2019 Witam, jestem początkujący oraz jest to mój pierwszy projekt. Dałem sobie za zadanie zrobienie przez wakacje maszyny, która policzy mi ile jest w moim zbiorze groszy, ale chciałem zrobić to trochę inaczej niż projekty, które widziałem. Wpadłem na pomysł że skoro grosze (1, 2, 5) są różnych średnic to jeżeli ułoży się monetę miedzy fotorezystorem a diodą led to będzie można przypisać jej daną wartość. Tak też zrobiłem i po chwili powstał mały cylinder na bazie Arduino Uno potrafiący rozpoznać monetę. Następnie zacząłem pracę nad tym aby moja maszyna brała monety z podajnika i liczyła je automatycznie. Wyszło że cylinder z ustawionym centralnie serwomechanizmem to najlepsza opcja. Projektowałem na programie Design Spark Mechanical, drukowałem Anet A8. Po wielu nieudanych wydrukach, wkońcu wyszedł ten właściwy i mogłem wszystko odczepić od Arduino Uno... zaczeło się lutowanie do Arduino nano, jak mozna się spodziewać po początkującym długie i mało umiejętne. Po wydrukowaniu całego mechanizmu zaprojektowałem obudowę, a następnie zrobiłem adaptacje do warunków oświetleniowych panujących w jej wnętrzu. Z uwagi na małą precyzję mojego czujnika maszynka czasem się myli, o jakiś grosz/dwa na złotówkę, jednakże jestem zadowolony z mojego pierwszego projektu :)) A oto krótki i prosty kod : #include <Servo.h> #include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); Servo servo; int odczytanaWartosc = 0; int tlo = 0; float wartosc = 0; float kwota = 0; void setup() { lcd.begin(16,2); lcd.backlight(); lcd.setCursor(0,0); pinMode(6, OUTPUT); Serial.begin(9600); digitalWrite(6,HIGH); servo.attach(9); } void loop() { kwota = wartosc / 100; lcd.setCursor(0,0); lcd.print("KWOTA"); lcd.setCursor(7,0); lcd.print(kwota); servo.write(180); delay(400); servo.write(80); delay(300); odczytanaWartosc = analogRead(A1); if(odczytanaWartosc > 30 && odczytanaWartosc < 50){wartosc = wartosc + 1;} if(odczytanaWartosc > 22 && odczytanaWartosc < 30){wartosc = wartosc + 2;} if(odczytanaWartosc < 22 && odczytanaWartosc > 3){wartosc = wartosc + 5;} servo.write(0); delay(400);} 7 Cytuj Link do komentarza Share on other sites More sharing options...
ethanak Sierpień 14, 2019 Udostępnij Sierpień 14, 2019 Podoba mi się, ale doczepię się do kodu. Nie lepiej najpierw policzyć wartość, a potem ją wyświetlić? Bo na razie masz odwrotnie... Co powiesz na automatyczny stop jak się skończą pieniądze w cylindrze? I właśnie dlatego lepiej jest policzyć i wyświetlić 🙂 Co powiesz na wyświetlenie kwoty nie tylko w pełnych złotówkach ale i w groszach? I technicznie: przydałoby się jakieś "else" w tych ifach... co to za tajemnicza cyferka "6" w pinMode i digitalWrite? Dzisiaj pewnie pamiętasz, ale za miesiąc to może być problem... 2 Cytuj Link do komentarza Share on other sites More sharing options...
TheAresX Sierpień 14, 2019 Autor tematu Udostępnij Sierpień 14, 2019 @ethanak Dzięki za wskazówki 🙂 Tajemnicza 6 to dioda Led, nie definiowalem jej bo jest tylko jedna i ma się caly czas świecić. Automatyczny stop to dobry pomysł, co do wyświetlania myślałem nad tym zeby pokazywalo ile jest każdej z monet Ale z braku doświadczenia i wiedzy moj kod na to nie zadziałał 😉 1 Cytuj Link do komentarza Share on other sites More sharing options...
ethanak Sierpień 14, 2019 Udostępnij Sierpień 14, 2019 To zrób w programie coś w stylu: #define LED 6 ... pinMode(LED, OUTPUT); digitalWrite(LED, 1); Co do wyświetlania - licz po prostu osobno np. ilosc1, ilosc2, ilosc5, to już będziesz mógł wyświetlić, a potem coś w stylu: wartosc = ilosc1 + 2 * ilosc2 + 5 * ilosc5; Jeśli chcesz, zapoznaj się z funkcją sprintf, jeśli będziesz chciał wyświetlić coś więcej niż prostą sumę może Ci się przydać. To, czekamy na MdLG v2.0? 🙂 2 Cytuj Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. 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
TheAresX Sierpień 14, 2019 Autor tematu Udostępnij Sierpień 14, 2019 (edytowany) @ethanak Jest to prawdopodobne, myślę nad tym zeby liczyła wszystkie monety 😉 Jeszcze tylko zapytam czemu wartość= ilosc1 + 1 * ilosc2 + 2 a nie wartość = ilosc1+1 + ilosc2 +2? Edytowano Sierpień 14, 2019 przez TheAresX Cytuj Link do komentarza Share on other sites More sharing options...
ethanak Sierpień 14, 2019 Udostępnij Sierpień 14, 2019 Bo mnożysz ilość monet przez ich nominał. Dla przykładu: 5 jednogroszówek to 5 groszy (mnożenie przez jeden możesz pominąć). 5 dwugroszówek to 10 groszy (czyli 5 * 2), 5 pięciogroszówek to 25 groszy (5 * 5). Jeśli to dodasz, wyjdzie Ci suma - czyli ile? 1 1 Cytuj Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
Dołącz do dyskusji, napisz odpowiedź!
Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!