Spisu treści:
- Krok 1: Jak to działa
- Krok 2: Zestawienie materiałów (BOM)
- Krok 3: Konstrukcja mechaniczna
- Krok 4: Elektronika (wybór komponentów)
- Krok 5: Elektronika (połączenia)
- Krok 6: Programowanie
- Krok 7: Możliwe ulepszenia
- Krok 8: Czynniki ograniczające
- Krok 9: Kredyty
Wideo: Sorter Bin - wykrywanie i sortowanie śmieci: 9 kroków
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:30
Czy kiedykolwiek widziałeś kogoś, kto nie zajmuje się recyklingiem lub robi to w zły sposób?
Czy kiedykolwiek marzyłeś o maszynie, która mogłaby dla Ciebie poddać się recyklingowi?
Czytaj dalej nasz projekt, nie pożałujesz!
Sorter bin to projekt z wyraźną motywacją pomagania recyklingowi na świecie. Jak powszechnie wiadomo, brak recyklingu powoduje poważne problemy na naszej planecie, m.in. zanikanie surowców i skażenie morza.
Z tego powodu nasz zespół zdecydował się na opracowanie projektu w małej skali: sortownika, który jest w stanie rozdzielić śmieci na różnych odbiorców w zależności od tego, czy materiał jest metalowy, czy niemetalowy. W przyszłych wersjach ten pojemnik sortowniczy może być ekstrapolowany na dużą skalę, umożliwiając podział śmieci na wszystkie rodzaje materiałów (drewno, plastik, metal, organiczne…).
Ponieważ głównym celem jest rozróżnienie między metalem a niemetalem, pojemnik sortownika będzie wyposażony w czujniki indukcyjne, ale także w czujniki ultradźwiękowe, aby wykryć, czy coś jest w pojemniku. Ponadto kosz będzie wymagał ruchu liniowego, aby przemieścić śmieci do dwóch pojemników, dlatego wybrano m.in. silnik krokowy.
W następnych rozdziałach ten projekt zostanie wyjaśniony krok po kroku.
Krok 1: Jak to działa
Kosz sortownika zaprojektowano tak, aby praca była stosunkowo łatwa dla użytkownika: śmieci należy wrzucić przez otwór umieszczony w górnej płycie, nacisnąć żółty przycisk i zaczyna się proces, który kończy się na śmieciach w jednym odbiorców. Ale teraz pytanie brzmi… jak ten proces działa wewnętrznie?
Po rozpoczęciu procesu zapala się zielona dioda LED. Następnie czujniki ultradźwiękowe, przymocowane do górnej płyty za pomocą wspornika, rozpoczynają pracę, aby określić, czy wewnątrz pudełka znajduje się przedmiot, czy nie.
Jeśli w pudełku nie ma żadnego przedmiotu, zapala się czerwona dioda LED, a zielona gaśnie. Wręcz przeciwnie, jeśli znajduje się obiekt, czujniki indukcyjne zostaną aktywowane w celu wykrycia, czy obiekt jest metalowy, czy niemetalowy. Po określeniu rodzaju materiału zaświecą się czerwona i żółta dioda LED, a skrzynka przesunie się w jednym kierunku lub w przeciwnym w zależności od rodzaju materiału, napędzanego silnikiem krokowym.
Gdy pudełko dotrze do końca pociągnięcia i przedmiot zostanie wrzucony do właściwego odbiorcy, pudełko powróci do pozycji wyjściowej. Wreszcie, gdy skrzynka znajduje się w początkowej pozycji, żółta dioda LED zgaśnie. Sortownik będzie gotowy do ponownego uruchomienia z tą samą procedurą. Ten proces opisany w ostatnich paragrafach jest również pokazany na obrazku schematu przepływu pracy załączony w Kroku 6:Programowanie.
Krok 2: Zestawienie materiałów (BOM)
Części mechaniczne:
-
Kupione części do dolnej konstrukcji
- Struktura metaliczna [Link]
- Szare pudełko [Link]
-
drukarka 3d
PLA dla wszystkich części drukowanych (można również użyć innych materiałów, takich jak ABS)
-
Maszyna tnąca laserem
- MDF 3mm
- Pleksi 4mm
- Zestaw łożysk liniowych [Link]
- Łożysko liniowe [Link]
- Wał [Łącze]
- Uchwyt wału (x2) [Łącze]
Części elektroniczne:
-
Silnik
Liniowy silnik krokowy Nema 17 [Link]
- Bateria
Akumulator 12 V [Łącze]
-
Czujniki
- 2 Czujnik ultradźwiękowy HC-SR04 [Link]
- 2 czujniki indukcyjne LJ30A3-15 [Link]
-
Mikrokontroler
1 płyta arduino UNO
-
Dodatkowe komponenty
- Sterownik DRV8825
- 3 diody LED: czerwona, zielona i pomarańczowa
- 1 przycisk
- Trochę skaczących drutów, drutów i płytek lutowniczych
- Deska do krojenia chleba
- Kabel USB (połączenie Arduino-PC)
- Kondensator: 100uF
Krok 3: Konstrukcja mechaniczna
Na poprzednich zdjęciach pokazane są wszystkie części montażu.
Do projektowania mechanicznego wykorzystano SolidWorks jako program CAD. Poszczególne części zespołu zostały zaprojektowane z uwzględnieniem metody produkcji, z jakiej będą produkowane.
Części wycinane laserowo:
-
MDF 3mm
- Filary
- Górna płyta
- Obsługa czujników ultradźwiękowych
- Obsługa czujników indukcyjnych
- Pojemnik na śmieci
- Obsługa baterii
- Obsługa płyt prototypowych i Arduino
-
Pleksi 4mm
Platforma
Części drukowane w 3D:
- Podstawa filarów
- Element przeniesienia ruchu liniowego z silnika krokowego
- Silnik krokowy i wsporniki łożysk
- Części do mocowania ścian do pojemnika na śmieci
Aby wyprodukować każdą z tych części, pliki. STEP należy zaimportować do odpowiedniego formatu, w zależności od maszyny, która będzie używana do tego celu. W tym przypadku pliki.dxf zostały użyte do wycinania laserowego i pliki.gcode do drukarki 3D (Ultimaker 2).
Montaż mechaniczny tego projektu można znaleźć w pliku. STEP załączonym w tej sekcji.
Krok 4: Elektronika (wybór komponentów)
W tej sekcji zostanie wykonany krótki opis użytych komponentów elektronicznych oraz wyjaśnienie wyboru komponentów.
Płytka Arduino UNO (jako mikrokontroler):
Sprzęt i oprogramowanie typu open source. Tani, łatwo dostępny, łatwy do zakodowania. Ta płyta jest kompatybilna ze wszystkimi używanymi przez nas komponentami i łatwo znajdziesz wiele samouczków i forów, które są bardzo pomocne w nauce i rozwiązywaniu problemów.
Silnik (liniowy silnik krokowy Nema 17):
To rodzaj silnika krokowego, który dzieli pełny obrót na określoną liczbę kroków. W konsekwencji jest kontrolowany poprzez podanie określonej liczby kroków. Jest solidny i precyzyjny i nie potrzebuje żadnych czujników do kontrolowania swojej rzeczywistej pozycji. Misją silnika jest kontrolowanie ruchu pudełka zawierającego rzucany przedmiot i wrzucanie go do odpowiedniego kosza.
Aby wybrać model, wykonałeś kilka obliczeń maksymalnego wymaganego momentu obrotowego, dodając współczynnik bezpieczeństwa. Jeśli chodzi o wyniki, kupiliśmy model, który w dużej mierze pokrywa obliczoną wartość.
Sterownik DRV8825:
Ta płytka służy do sterowania bipolarnym silnikiem krokowym. Posiada regulowaną regulację prądu, która pozwala ustawić maksymalny prąd wyjściowy za pomocą potencjometru oraz sześć różnych rozdzielczości kroków: pełny krok, pół kroku, 1/4 kroku, 1/8 kroku, 1/16- krok i 1/32 kroku (w końcu użyliśmy pełnego kroku, ponieważ nie znaleźliśmy potrzeby przechodzenia do mikrokroku, ale nadal można go wykorzystać do poprawy jakości ruchu).
Czujniki ultradźwiękowe:
To rodzaj czujników akustycznych, które przetwarzają sygnał elektryczny na ultradźwiękowy i odwrotnie. Wykorzystali odpowiedź echa sygnału akustycznego wyemitowanego najpierw do obliczenia odległości od obiektu. Wykorzystaliśmy je, aby wykryć, czy w pudełku znajduje się przedmiot, czy nie. Są łatwe w użyciu i zapewniają dokładny pomiar.
Chociaż wyjście tego czujnika jest wartością (odległość), ustalając próg określający, czy obiekt jest obecny, czy nie, przekształcamy
Czujniki indukcyjne:
Oparty na prawie Faradaya, należy do kategorii bezdotykowych elektronicznych czujników zbliżeniowych. Umieściliśmy je na dnie ruchomego pudełka, pod platformą z pleksi, która podtrzymuje przedmiot. Ich celem jest rozróżnienie obiektów metalowych i niemetalowych, dając wyjście cyfrowe (0/1).
diody LED (zielone, żółte, czerwone):
Ich misją jest komunikacja z użytkownikiem:
- Świeci zielona dioda LED: robot czeka na obiekt.
-Czerwona dioda LED włączona: maszyna pracuje, nie można rzucać żadnym przedmiotem.
-Żółta dioda świeci: wykryto obiekt.
Bateria 12V lub źródło zasilania 12V + zasilanie USB 5V:
Do zasilania czujników i silnika krokowego potrzebne jest źródło napięcia. Do zasilania Arduino potrzebne jest źródło zasilania 5V. Można to zrobić za pomocą akumulatora 12 V, ale najlepiej jest mieć osobne źródło zasilania 5 V dla Arduino (na przykład z kablem USB i adapterem telefonicznym podłączonym do źródła zasilania lub do komputera).
Problemy, które znaleźliśmy:
-
Wykrywanie czujnika indukcyjnego, nie uzyskaliśmy pożądanej dokładności, ponieważ czasami źle umieszczony metalowy obiekt nie jest postrzegany. Wynika to z 2 ograniczeń:
- Obszar objęty czujnikami w obrębie kwadratowej platformy stanowi mniej niż 50% tego obszaru (a więc mały obiekt nie może zostać wykryty). Aby rozwiązać ten problem, zalecamy użycie 3 lub 4 czujników indukcyjnych, aby zapewnić pokrycie ponad 70% obszaru.
- Odległość wykrywania czujników jest ograniczona do 15 mm, więc zostaliśmy zmuszeni do użycia cienkiej platformy z pleksiglasu. To też może być kolejne ograniczenie wykrywające obiekty o dziwnym kształcie.
- Detekcja ultradźwiękowa: ponownie, obiekty ukształtowane w skomplikowany sposób sprawiają problemy, ponieważ sygnał emitowany przez czujniki jest źle odbijany i wraca później niż powinien do czujnika.
- Bateria: mamy pewne problemy z kontrolowaniem prądu dostarczanego przez baterię i aby go rozwiązać, w końcu użyliśmy źródła zasilania. Można jednak zastosować inne rozwiązania, takie jak użycie diody.
Krok 5: Elektronika (połączenia)
W tej sekcji pokazano okablowanie różnych elementów w całości. Pokazuje również, do którego pinu Arduino podłączony jest każdy komponent.
Krok 6: Programowanie
W tej sekcji wyjaśniono logikę programowania stojącą za maszyną sortującą pojemniki.
Program podzielony jest na 4 kroki, które przedstawiają się następująco:
- Zainicjuj system
- Sprawdź obecność przedmiotów
- Sprawdź rodzaj obecnego obiektu
- Przenieś pole
Szczegółowy opis każdego kroku znajduje się poniżej:
Krok 1 Zainicjuj system
Panel LED (3) - ustaw Kalibracja LED (czerwona) WYSOKA, Gotowość (zielona) NISKA, Obiekt obecny (żółta) NISKA
Sprawdź, czy silnik krokowy jest w pozycji początkowej
- Uruchom test czujnika ultradźwiękowego, aby zmierzyć odległość od boku do ściany pudełka
- Pozycja wyjściowa == 0 >> Zaktualizuj wartości diody gotowości HIGH i kalibracji diody LED LOW -> krok 2
-
Pozycja wyjściowa != 0 >> wartość odczytu cyfrowego czujników ultradźwiękowych i na podstawie wartości czujnika:
- Zaktualizuj wartość diody LED ruchu silnika HIGH.
- Uruchom pole ruchu, aż wartość obu czujników ultradźwiękowych będzie < wartość progowa.
Aktualizacja wartości pozycji początkowej = 1 >> Aktualizacja wartości LED Ready HIGH i ruch silnika LOW i Kalibracja LOW >> krok 2
Krok 2
Sprawdź obecność przedmiotów
Uruchom wykrywanie obiektów ultradźwiękowych
- Obiekt obecny == 1 >> Zaktualizuj wartość Obiekt obecny LED HIGH >> Krok 3
- Obiekt obecny == 0 >> Nic nie rób
Krok 3
Sprawdź rodzaj obecnego obiektu
Uruchom wykrywanie czujnika indukcyjnego
- InductionState = 1 >> Krok 4
- InductionState = 0 >> Krok 4
Krok 4
Przenieś pole
Uruchom pracę silnika
-
stan indukcyjny == 1
Zaktualizuj diodę ruchu silnika WYSOKA >> Przesuń silnik w lewo, (zaktualizuj pozycję początkową = 0) opóźnij i cofnij się w prawo >> Krok 1
-
stan indukcyjny == 0
Zaktualizuj diodę ruchu silnika WYSOKA >> Przesuń silnik w prawo, (aktualizuj pozycję początkową = 0), opóźnij i cofnij się w lewo >> Krok 1
Funkcje
Jak widać z logiki programowania, program działa poprzez wykonywanie funkcji o określonym celu. Na przykład pierwszym krokiem jest inicjalizacja systemu, który zawiera funkcję „Sprawdź, czy silnik krokowy jest w pozycji początkowej”. Drugi krok polega na sprawdzeniu obecności obiektu, który sam w sobie jest inną funkcją (funkcja „Ultrasonic Object detection”). I tak dalej.
Po kroku 4 program został w pełni wykonany i powróci do kroku 1 przed ponownym uruchomieniem.
Funkcje używane w treści głównej są zdefiniowane poniżej.
Są to odpowiednio:
- Test indukcyjny()
- moveBox (stan indukcyjny)
- ultradźwiękowe Wykrywanie Obiektów()
// Sprawdź, czy obiekt jest metalowy, czy nie
bool test indukcyjny() { if(digitalRead(inductiveSwitchRight) == 1 || digitalRead(inductiveSwitchLeft == 0)) { return true; else{ return false; } } void moveBox(bool inductiveState) { // Pole przechodzi w lewo po wykryciu metalu i inductiveState = true if (inductiveState == 0){ stepper.moveTo(steps); // losowa pozycja do końca do testowania stepper.runToPosition(); opóźnienie (1000); stepper.moveTo(0); stepper.runToPosition(); opóźnienie (1000); } else if (inductiveState == 1) { stepper.moveTo(-steps); // losowa pozycja do końca do testowania stepper.runToPosition(); opóźnienie (1000); stepper.moveTo(0); // losowa pozycja do końca do testowania stepper.runToPosition(); opóźnienie (1000); } } boolean ultrasonicObjectDetection() { długi czas trwania1, dystans1, czas trwaniaTemp, dystansTemp, średniaOdległość1, średniaOdległośćTemp, średniaOdległośćOlympian1; // Określ liczbę pomiarów do wykonania na dużą odległośćMax = 0; długa odległośćMin = 4000; długa odległośćRazem = 0; for (int i=0; i odległośćMax) { odległośćMax = odległośćTemp; } if (distanceTemp < dystansMin) { dystansMin = dystansTemp; } dystansTotal+= dystansTemp; } Serial.print ("Sensor1 maxDistance "); Serial.print (distanceMax); Serial.println("mm"); Serial.print ("Sensor1 minDistance"); Serial.print (odległośćMin); Serial.println("mm"); // Pobierz średnią odległość z odczytów średniaDistance1 = distanceTotal/10; Serial.print ("Sensor1 AverageDistance1"); Serial.print (średniaDistance1); Serial.println("mm"); // Usuń najwyższe i najniższe wartości pomiarów, aby uniknąć błędnych odczytów średniaDistanceTemp = distanceTotal - (distanceMax+distanceMin); średniaOdległośćOlimpijczyk1 = średniaOdległość Temp/8; Serial.print ("Sensor1 AverageDistanceOlympian1"); Serial.print (średniaDistanceOlympian1); Serial.println("mm");
// Zresetuj wartości temp
odległośćRazem = 0; odległośćMax = 0; odległośćMin = 4000; długi czas trwania2, odległość2, średnia odległość2, średnia odległośćOlimpijczyk2; // Zdefiniuj liczbę pomiarów do wykonania (int i=0; i distanceMax) { distanceMax = distanceTemp; } if (distanceTemp < dystansMin) { dystansMin = dystansTemp; } dystansTotal+= dystansTemp; } Serial.print ("Sensor2 maxDistance "); Serial.print (distanceMax); Serial.println("mm"); Serial.print ("Sensor2 minDistance"); Serial.print (odległość min); Serial.println("mm"); // Pobierz średnią odległość z odczytów średniaDistance2 = distanceTotal/10; Serial.print ("Sensor2 AverageDistance2"); Serial.print (averageDistance2); Serial.println("mm"); // Usuń najwyższe i najniższe wartości pomiarów, aby uniknąć błędnych odczytów średniaDistanceTemp = distanceTotal - (distanceMax+distanceMin); średniaOdległośćOlimpijczyk2 = średniaOdległość Temp/8; Serial.print ("Sensor2 AverageDistanceOlympian2"); Serial.print (averageDistanceOlympian2); Serial.println("mm"); // Resetuj wartości temp. dystansTotal = 0; odległośćMax = 0; odległośćMin = 4000; if (averageDistanceOlympian1 + średniaDistanceOlympian2 < emptyBoxDistance) { return true; } else { return false; } }
Główny korpus
Treść główna zawiera tę samą logikę, opisaną na początku tej sekcji, ale napisaną w kodzie. Plik jest dostępny do pobrania poniżej.
Ostrzeżenie
Przeprowadzono wiele testów, aby znaleźć stałe: emptyBoxDistance, kroki oraz Maximumspeed i przyspieszenie w konfiguracji.
Krok 7: Możliwe ulepszenia
- Potrzebujemy informacji zwrotnej na temat położenia pudełka, aby upewnić się, że zawsze znajduje się we właściwej pozycji, aby wybrać przedmiot na początku. Dostępne są różne opcje rozwiązania problemu, ale łatwą może być skopiowanie systemu, który znajdujemy w drukarkach 3D, za pomocą przełącznika na jednym końcu ścieżki pudełka.
-Ze względu na problemy, które znaleźliśmy z detekcją ultradźwiękową, możemy poszukać alternatyw dla tej funkcji: KY-008 Laser i Detektor laserowy (obraz), czujniki pojemnościowe.
Krok 8: Czynniki ograniczające
Ten projekt działa zgodnie z opisem w instrukcjach, ale należy zachować szczególną ostrożność podczas następujących kroków:
Kalibracja czujników ultradźwiękowych
Kąt, pod jakim czujniki ultradźwiękowe są umieszczone w stosunku do obiektu, który mają wykryć, ma kluczowe znaczenie dla prawidłowego funkcjonowania prototypu. W tym projekcie do orientacji czujników ultradźwiękowych wybrano kąt 12,5° do normalnego, ale najlepszy kąt należy wyznaczyć eksperymentalnie, rejestrując odczyty odległości przy użyciu różnych obiektów.
Źródło prądu
Wymagana moc sterownika silnika krokowego DRV8825 to 12 V i od 0,2 do 1 A. Arduino może być również zasilane maksymalnie 12 V i 0,2 A za pomocą wejścia jack na Arduino. Należy jednak zachować szczególną ostrożność w przypadku korzystania z tego samego źródła zasilania zarówno dla Arduino, jak i sterownika silnika krokowego. W przypadku zasilania ze zwykłego gniazdka sieciowego przy użyciu np. zasilacza z zasilacza 12V/2A AC/DC, w obwodzie powinien znajdować się regulator napięcia i diody przed doprowadzeniem zasilania do arduino i sterownika silnika krokowego.
Naprowadzanie na skrzynkę
Chociaż w tym projekcie zastosowano silnik krokowy, który w normalnych warunkach powraca do swojej początkowej pozycji z dużą dokładnością, dobrą praktyką jest posiadanie mechanizmu samonaprowadzającego na wypadek wystąpienia błędu. Projekt jako taki nie posiada mechanizmu bazowania, ale jest dość prosty do wdrożenia. W tym celu należy dodać przełącznik mechaniczny w początkowej pozycji skrzynki, aby po uderzeniu skrzynki w przełącznik wiedziało, że jest w swojej pozycji wyjściowej.
Sterownik krokowy DRV8825 Tuning
Sterownik krokowy wymaga strojenia do pracy z silnikiem krokowym. Odbywa się to eksperymentalnie poprzez przekręcenie potencjometru (śruby) na układzie DRV8825 tak, aby do silnika podawana była odpowiednia ilość prądu. Tak więc, lekko obracając śrubę potencjometru, aż silnik będzie działał w chudy sposób.
Krok 9: Kredyty
Projekt ten został zrealizowany w ramach kursu mechatroniki w roku akademickim 2018-2019 dla Bruface Master na Université Libre de Bruxelles (ULB) - Vrije Universiteit Brussel (VUB).
Autorami są:
Maxime Decleire
Lidia Gomez
Markus Poder
Adriana Puentes
Narjisse Snoussi
Specjalne podziękowania dla naszego przełożonego Alberta de Beir, który również pomógł nam podczas całego projektu.
Zalecana:
Sortowanie bąbelkowe w partii!: 4 kroki
Sortowanie bąbelkowe w partii!: Czy zastanawiałeś się kiedyś nad stworzeniem prostego algorytmu sortowania w czystej partii? Nie martw się, to proste jak bułka z masłem! Pokazuje to również proces jego sortowania. (Uwaga: zrobiłem to na komputerze z systemem Windows XP, więc niektóre kody mogą nie działać. Nie jestem jednak pewien. Przepraszamy…)
Robotyczne sortowanie kulek: 3 kroki (ze zdjęciami)
Robotic Bead Sorting: W tym projekcie zbudujemy robota do sortowania koralików Perler według kolorów. Zawsze chciałem zbudować robota sortującego kolory, więc kiedy moja córka zainteresowała się wytwarzaniem koralików Perler, uznałem to za doskonałą okazję .Koraliki Perlera są używane do
Sortowanie kolorów PhantomX Pincher: 4 kroki
Sortowanie kolorów PhantomX Pincher: Wprowadzenie Ta instrukcja została opracowana przez 2 studentów inżynierii automatyzacji z UCN (Dania). Instrukcja ilustruje, w jaki sposób można użyć PhantomX Pncher do sortowania pudełek według koloru za pomocą CMUcam5 Pixy i układania ich w stos. Ta aplikacja
Kit Ciencia Y Arte: Ordenando Listas (Sortowanie bąbelków): 4 kroki
Kit Ciencia Y Arte: Ordenando Listas (Bąbelkowe sortowanie): En el mundo de las ciencias de la computación, saber ordenar listas es como saber escribir. Es una buena manera de ver como los algoritmos son una manera de hacer las cosas en una computadora, y que la forma directa de hacer algo no es la me
KAMIENIE ŚMIECI - Wyeliminuj śmieci nienadające się do recyklingu: 8 kroków
KAMIENIE NA ŚMIECI - eliminuj śmieci nienadające się do recyklingu: aby stworzyć śmietnik, najpierw uszyje się worek z kabaretki. Jest wypełniony śmieciami i otynkowany cementem. Powstałe muszle mają niepowtarzalny kształt i wyglądają bardzo naturalnie. Skały śmieciowe są estetycznym i konstruktywnym