Zaloguje się
or
Tel +48 698615740

Sorter M&M – ustawienie czujnika koloru TSC3200

25 stycznia, 2022

W tym artykule zaprezentuje możliwość wykorzystania czujnika koloru, tak aby mógł on rozróżnić kolory dobrze wszystkim znanych cukierków M&M’s i odpowiednio przesyłając dane do innych elementów układu oddzielić każdy z kolorów do odpowiedniego zbiornika.

Spis treści

  • Krótki opis
  • Specyfikacja czujnika
  • Podłączenie do arduino Nano (w tym potrzebne elementy układu)
  • Program
  • Pliki do pobrania

Krótki opis

Czujnik pobiera informacje o kolorach na podstawie wartości RGB którą skanuje. Musimy pamiętać w przypadku naszego projektu, że przy zmianie otoczenia w którym znajduje się czujnik zmienia się również kąt padania światła co znacząco wpływa na odczyt kolorów przez czujnik. Dlatego musimy ponownie kalibrować nasz czujnik za pomocą programu, aby skan kolorów był dokładny. Jak dokładnie powinniśmy to zrobić wyjaśnię później w artykule

Specyfikacja

  • Napięcie wchodzące: (2.7V to 5.5V)
  • Interface: Digital TTL
  • Konwersja natężenia światła w wysokiej rozdzielczości na częstotliwość
  • Programowalny kolor i częstotliwość wyjściowa w pełnej skali
  • Nie ma potrzeby ADC (może być bezpośrednio podłączony do cyfrowych pin-ów mikrokontrolera)
  • Funkcja wyłączania
  • Temperatury w których pracuje: -40 C to 85 C
  • Wymiary : 28.4×28.4mm(1.12×1.12″)

Podłączenie

Elementy:

  • arduino Nano
  • NANO 3.0 Terminal Shield Adapter 
  • czujnik koloru TSC3200
  • 3x złączki
  • x kable stykowe
  • wypych z elektromagnesem
  • Bateria( lub dowolny element przechowujący napięcie z wejściem dodatnim oraz ujemnym)

Połączenie czujnik do Nano:

  • GND – złączka(1) – GND
  • S1 – złączka(1)
  • VCC – złączka(2) – 5v
  • S0 – złączka(2)
  • S2 – pin 12
  • S3 – pin 13
  • OE – pin 8
  • OUT – pin 5

Połączenie przekaźnik do Nano

  • VCC – złączka(2)
  • GND – złączka(1)
  • IN – pin 3

Połączenie przekaźnik do elektromagnes + bateria

  • Jeden kabel od elektromagnesu podłączamy do wyjścia COM
  • Wyjście NC łączymy z dodatnim wejściem baterii, a następnie przewód od ujemnego wyjścia baterii wpinamy do złączki(3)
  • Drugi kabel od eletromagnesu wpinamy do złączki(3)

Program:

Sam program obsługujący czujnik kolorów jest wyposażony w ogromną ilość funkcji pozwalająca na wykonanie jednego z jednego z 8 zadań/możliwości które omówię w dalszej części artykułu. Teraz chciałbym jednak skupić się na jednej najbardziej istotnej dla nas funkcji pozwalającej ciągłą pracę naszego skanera i aktywację wyrzutni która będzie zrzucać M&M do odpowiedniego pojemnika .

A więc po pierwsze funkcja constColorReader() jest wyposażona w while wykonującego się do momentu w którym nie karzemy mu przestać przez wpisanie w terminal litery s lub S (od Stop). While ma zadanie skanować kolor i porównać dzięki if-om czy wartość RGB jest zbliżona albo równa do jednej z wpisanych już przez nas do portu EEPROM wartości zapisanego koloru. Jeżeli kolor zostanie zidentyfikowany uaktywni się wyrzutnia i cukierek trafi do pojemnika. Na końcu while znajduje się if który sprawdza czy w terminal została wpisana litera S lub s.

* Modyfikacja kodu dla własnych kolorów

Jeżeli chcemy aby czujnik porównywał pobrany kolor do naszych dodanych kolorów wystarczy że w if w cudzysłowach nazwę koloru na naszą

void constColorReader(){
  while(Serial.read() != 'S' || Serial.read() != 's'){
     colorData  rgb;
     Serial.println("Scan...");  
     CS.read();
     while(CS.available()==0);  // wait for read to complete
     CS.getRGB(&rgb);  
     int8_t ColIdx=MatchColour(&rgb);  
     if(Colours[ColIdx].Name == "red"){
        Serial.print("Color found = red");
        digitalWrite(3, HIGH);
        delay(200);
        digitalWrite(3, LOW);
      }
//    if(Colours[ColIdx].Name == "blue"){
//      Serial.println("Color found = blue");
//      digitalWrite(3, HIGH);
//        delay(200);
//        digitalWrite(3, LOW);
//      }
//     if(Colours[ColIdx].Name == "brown"){
//        Serial.println("Color found = brown");
//        digitalWrite(3, HIGH);
//        delay(500);
//        digitalWrite(3, LOW);
//      }
//     if(Colours[ColIdx].Name == "orange"){
//        Serial.println("Color found = orange");
//        digitalWrite(3, HIGH);
//        delay(200);
//        digitalWrite(3, LOW);
//      }
//     if(Colours[ColIdx].Name == "green"){
//        Serial.println("Color found = green");
//        digitalWrite(3, HIGH);
//        delay(200);
//        digitalWrite(3, LOW);
//      }
//     if(Colours[ColIdx].Name == "yellow"){
//        Serial.println("Color found = yellow");
//        digitalWrite(3, HIGH);
//        delay(200);
//        digitalWrite(3, LOW);
//     }
     char abc = Serial.read();
     if(abc == 's' || abc == 'S') {
      digitalWrite(3, LOW);
      break;
      }
    }
  }

Pozostałe funkcje kodu :

Okno dialogowe :

Po pobraniu i odpaleniu kodu otwieramy Monitor portu szeregowego i ustawiamy baudrate(115200) oraz “Brak zakończenia linii” . Pokaże się nam okno dialogowe wyposażone w 8 opcji wyboru. Aby skorzystać z któregoś z nich wystarczy że wpiszmy w terminalu numer znajdujący się przy nim.

1. Kalibracja czujnika

Tak jak pisałem wcześniej jest to jedna z najważniejszych funkcji, ponieważ zapewnia nam ona jak najdokładniejszą czytelność kolorów przez czujnik. Jeżeli jakość światła lub ilość światła w otoczeniu czujnika ulegnie zmianie powinniśmy ponownie skalibrować czujnik gdyż te czynniki wpływają na niego znacząco

Aby skalibrować czujnik wystarczy że podstawimy do czujnika dowolny obiekt czarnego koloru (może być to czarna kartka) i wpiszemy w terminal dowolny znak a następnie naciśniemy “Wyślij”. Po tym pod czujnik podstawiamy biały obiekt i kolejno wpisujemy w terminal dowolny znak po którym dajemy “Wyślij”. I gotowe czujnik został skalibrowany. Jeżeli kolory nie są za dobrze odczytywane zawsze możemy ponownie skalibrować czujnik.

2. Dodanie koloru

Po wciśnięciu 2 podstawiamy obiekt koloru jaki chcemy dodać w tym przypadku M&M pod czujnik i w terminalu wpisujemy jak ma nazywać się ten kolor. Jeżeli kolor był przez nas wcześniej wpisany dostaniemy informacje czy chcemy go nadpisać. Po wpisaniu w terminal “y ” kolor przyjmie nową wartość.

Uwaga: Po dodaniu koloru zalecam upewnić się że czujnik na pewno dobrze go odczytuje. Spróbuj podstawić M&M pod wieloma kątami do czujnika i sprawdź czy odnajdzie nam ten kolor. Jeżeli w większości przypadków udało to to dobrze, a jeżeli nie radzę ponownie dodać ten kolor.

3. Wyświetl listę kolorów

Po wpisaniu 3 pokaże nam się lista wszystkich wpisanych przez nas kolorów. Należy pamiętać że możemy mieć łącznie tylko 10 kolorów wpisanych do EEPROM-u.

4. Usuń kolor

Tu po wpisaniu 4 wystarczy że wpiszemy nazwę koloru, a on zostanie usunięty.

5. Usuń wszystkie kolory

Opcja numer 5 usuwa wszystkie zapisane kolory. (Nie można cofnąć)

6. Reset kalibracji czujnika

Wpisanie 6 spowoduje że nasze ustawienia kalibracji czujnika zostaną usunięte.

7. Zwykły Scan

W opcji 7 po podstawieniu obiektu (M&M) funkcja wyświetli jego wartość RGB i jeżeli wartość jest zbliżona do wpisanej już przez nas do EEPROM-u wyświetli nazwę tego koloru.

8. Ciągły Scan

Opcja 8 to opisana przeze mnie wcześniej funkcja constColorReader().

Pliki do pobrania

Sticky
Możliwość komentowania Sorter M&M – ustawienie czujnika koloru TSC3200 została wyłączona
Dadas Bartosz

Dadas Bartosz

Jest Uczniem Technikum Budowlano-Elektronicznego w Świdnicy na kierunku Technik Informatyk. Na co dzień oprócz projektów z ardunio uczy się programować aplikacje mobile. W przyszłości chcę zostać programistą.

Comments are closed.

Strona korzysta z plików cookies w celu realizacji usługi i zgodnie z Polityką Plików Cookies. Możesz określić warunki przechowywania lub dostępu do plików cookies w Twojej przeglądarce.