Spisu treści:

Sorter Bin - wykrywanie i sortowanie śmieci: 9 kroków
Sorter Bin - wykrywanie i sortowanie śmieci: 9 kroków

Wideo: Sorter Bin - wykrywanie i sortowanie śmieci: 9 kroków

Wideo: Sorter Bin - wykrywanie i sortowanie śmieci: 9 kroków
Wideo: Segregując odpady, działasz dla planety | Ty + IKEA 2024, Lipiec
Anonim
Image
Image
Jak to działa
Jak to działa

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

Jak to działa
Jak to działa
Jak to działa
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

Image
Image
Konstrukcja mechaniczna
Konstrukcja mechaniczna
Konstrukcja mechaniczna
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)

Elektronika (połączenia)
Elektronika (połączenia)
Elektronika (połączenia)
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

Programowanie
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:

  1. Zainicjuj system
  2. Sprawdź obecność przedmiotów
  3. Sprawdź rodzaj obecnego obiektu
  4. 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

Możliwe ulepszenia
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: