Skocz do zawartości

Przeszukaj forum

Pokazywanie wyników dla tagów 'odległość'.

  • Szukaj wg tagów

    Wpisz tagi, oddzielając przecinkami.
  • Szukaj wg autora

Typ zawartości


Kategorie forum

  • Elektronika i programowanie
    • Elektronika
    • Arduino i ESP
    • Mikrokontrolery
    • Raspberry Pi
    • Inne komputery jednopłytkowe
    • Układy programowalne
    • Programowanie
    • Zasilanie
  • Artykuły, projekty, DIY
    • Artykuły redakcji (blog)
    • Artykuły użytkowników
    • Projekty - DIY
    • Projekty - DIY roboty
    • Projekty - DIY (mini)
    • Projekty - DIY (początkujący)
    • Projekty - DIY w budowie (worklogi)
    • Wiadomości
  • Pozostałe
    • Oprogramowanie CAD
    • Druk 3D
    • Napędy
    • Mechanika
    • Wydarzenia
    • Sprzedam/Kupię/Zamienię/Praca
    • Inne
  • Ogólne
    • Ogłoszenia organizacyjne
    • Dyskusje o FORBOT.pl
    • Na luzie

Kategorie

  • Quizy o elektronice
  • Quizy do kursu elektroniki I
  • Quizy do kursu elektroniki II
  • Quizy do kursów Arduino
  • Quizy do kursu STM32L4
  • Quizy do pozostałych kursów

Szukaj wyników w...

Znajdź wyniki, które zawierają...


Data utworzenia

  • Rozpocznij

    Koniec


Ostatnia aktualizacja

  • Rozpocznij

    Koniec


Filtruj po ilości...

Data dołączenia

  • Rozpocznij

    Koniec


Grupa


Imię


Strona

Znaleziono 5 wyników

  1. 1. Cel i przeznaczenie Celem projektu było zbudowanie kompaktowego urządzenia do ciągłego pomiaru odległości między czujnikiem a rolką papieru w drukarce/urządzeniu poligraficznym. Gdy odległość przekroczy wartość graniczną zapisaną w parametrze $Limit, system uruchamia sygnalizację optyczną (migającą diodę LED) oraz przekazuje komunikaty na wyświetlaczu LCD. Zadaniem układu jest wczesne informowanie obsługi o zbliżającym się wyczerpaniu papieru, co pozwala zaplanować wymianę rolki bez przestojów. Urządzenie może pracować w środowisku produkcyjnym – obudowa zabezpiecza elektronikę przed uszkodzeniami mechanicznymi i kurzem. Uwaga dot. platformy sterującej: w fazie prototypu testy prowadzono na Arduino Uno, natomiast wersja docelowa została zrealizowana na Arduino Nano (ATmega328) z nakładką terminalową (shield) dla wygodniejszego okablowania i kompaktowej zabudowy. 2. Zasada działania Ultradźwiękowy czujnik HC‑SR04 generuje krótkie impulsy dźwiękowe i mierzy czas powrotu fali odbitej od powierzchni rolki. Na podstawie zmierzonego czasu obliczana jest odległość. Wynik pomiaru jest cyklicznie przesyłany do mikrokontrolera (Arduino Nano), który: porównuje aktualną odległość z wartością $Limit ustawianą potencjometrem (rezystorem nastawnym) na panelu, steruje diodą LED – przy przekroczeniu limitu uruchamia miganie, prezentuje użytkownikowi kluczowe dane na wyświetlaczu LCD 2×16 poprzez interfejs I²C (konwerter LCM1602). Typowe komunikaty na LCD: bieżąca odległość od rolki, aktualna wartość parametru $Limit, komunikat alarmowy: „Poza limit ($Limit), nowa rolka” po przekroczeniu progu. Aby zapewnić stabilność wskazań, w programie zastosowano proste uśrednianie kilku kolejnych pomiarów (filtrację), co ogranicza wpływ pojedynczych zakłóceń akustycznych. Miganie diody jest wyraźne i dobrze widoczne z typowej odległości stanowiska operatora. 3. Elementy i wykonanie mechaniczne Konstrukcja mieści się w obudowie G205CMF (poliwęglan, 115×65×55 mm, IP65). Obudowa posiada otwory wyłącznie w miejscach niezbędnych do prawidłowej pracy czujnika i wyprowadzeń przewodów, co minimalizuje wnikanie zanieczyszczeń. Zastosowano: Arduino Nano (ATmega328) z nakładką terminalową (shield) – łatwe przyłącza przewodów, czujnik HC‑SR04, wyświetlacz LCD 2×16 + konwerter I²C LCM1602, potencjometr helipot POT2218M‑10K (wieloobrotowy, charakterystyka liniowa) do regulacji $Limit, zespół sygnalizacji optycznej: dioda LED DLA/6SRD (zestaw 6 diod w korpusie 20 mm; wykorzystywane są 3 diody ze względu na minimalizację przewodów), przewody sygnałowe 2×15 m do połączenia zespołu diod ze sterownikiem, magnesy neodymowe w module głównym i diodzie – umożliwiają szybki, bez narzędziowy montaż i repozycjonowanie. 4. Zasilanie i interfejs serwisowy Urządzenie może być zasilane z gniazda USB typu B albo z baterii 9 V umieszczonej w dedykowanym koszyku. Port USB pełni również funkcję wejścia serwisowego do wgrywania i aktualizacji oprogramowania. Do obsługi wyświetlacza zastosowano bibliotekę LiquidCrystal_I2C (załączona do projektu). 5. Montaż i uruchomienie Montaż mechaniczny: zamocować obudowę i moduł diody LED za pomocą magnesów w miejscu zapewniającym stabilny pomiar – czujnik powinien „widzieć” gładką część rolki pod możliwie prostopadłym kątem. Okablowanie: podłączyć przewody sygnałowe zespołu diod, upewnić się, że nie są narażone na przetarcia. Zasilanie: podłączyć USB B lub włożyć baterię 9 V. Kalibracja $Limit: na pełnej rolce ustawić potencjometrem próg tak, aby sygnalizacja nie była aktywna. Następnie stopniowo zmniejszać papier na rolce (lub odsunąć rolkę), aż uzyska się oczekiwany punkt zadziałania i skorygować ustawienie. Weryfikacja: sprawdzić poprawność komunikatów na LCD oraz działanie migania po przekroczeniu limitu. 6. Eksploatacja i konserwacja Okresowo czyścić okienko czujnika z kurzu i pyłu miękką ściereczką. Sprawdzać mocowanie magnesów i stan przewodów, zwłaszcza w pobliżu ruchomych elementów maszyny. W razie zmiany średnicy nowych rolek lub innej konfiguracji stanowiska ponownie skalibrować $Limit. Nie kierować strumienia sprężonego powietrza bezpośrednio w czujnik – może to zakłócać pomiary. 7. Ograniczenia i zalecenia Czujniki ultradźwiękowe najlepiej współpracują z twardymi, gładkimi i prostopadłymi powierzchniami. W przypadku bardzo małych odległości lub powierzchni pochylonych pomiar może być mniej stabilny – w takich sytuacjach zaleca się ponowną kalibrację i ewentualną korektę położenia czujnika. Rekomendowany dystans roboczy to zakres, w którym wskazania są powtarzalne przy typowych warunkach hałasu akustycznego linii. 8. Testy odbiorcze Po montażu wykonano testy: test poprawności pomiaru (seria odczytów w kilku znanych dystansach), test progu $Limit (sprawdzenie, czy miganie i komunikat uruchamiają się przy przekroczeniu ustawionego dystansu), test czytelności LCD i reakcji potencjometru, test ciągłości przewodów zespołu diod na pełnej długości 2×15 m. 9. Załączniki Zał. 1: schemat połączeń elementów – schemat.pdf Zał. 2: kod programu wgrany do procesora – project.cpp Zał.2 Kod programu do Arduino: #include <Wire.h> #include <LiquidCrystal_I2C.h> #define TRIG_PIN 8 #define ECHO_PIN 7 #define LED_PIN_1 13 // Definiujemy pin dla pierwszej diody LED #define LED_PIN_2 2 // Definiujemy pin dla drugiej diody LED #define LED_PIN_3 3 // Definiujemy pin dla trzeciej diody LED #define POT_PIN A7 // Definiujemy pin dla potencjometru LiquidCrystal_I2C lcd(0x27, 16, 2); // Ustawiamy adres LCD unsigned long lastDisplayTime = 0; // Przechowywanie czasu ostatniego wyświetlenia bool displayState = true; // Stan wyświetlania informacji float Limit = 60.0; // Ustawienie domyślnego limitu na 60 cm void setup() { Serial.begin(9600); // Inicjalizacja komunikacji szeregowej pinMode(TRIG_PIN, OUTPUT); // Trig ustawiamy jako wyjście pinMode(ECHO_PIN, INPUT); // Echo ustawiamy jako wejście pinMode(LED_PIN_1, OUTPUT); // Ustawiamy pin pierwszej diody LED jako wyjście pinMode(LED_PIN_2, OUTPUT); // Ustawiamy pin drugiej diody LED jako wyjście pinMode(LED_PIN_3, OUTPUT); // Ustawiamy pin trzeciej diody LED jako wyjście digitalWrite(TRIG_PIN, LOW); digitalWrite(LED_PIN_1, LOW); // Upewniamy się, że diody LED są na początku wyłączone digitalWrite(LED_PIN_2, LOW); digitalWrite(LED_PIN_3, LOW); lcd.init(); // Inicjalizacja LCD lcd.backlight(); // Włączenie podświetlenia LCD } void loop() { long Time; float Distance; // Odczyt z potencjometru i przekształcenie na wartość limitu int potValue = analogRead(POT_PIN); // Odczyt wartości z potencjometru (0-1023) Limit = map(potValue, 0, 1023, 30, 94); // Mapowanie wartości z zakresu 0-1023 na zakres 30-94 digitalWrite(TRIG_PIN, HIGH); delayMicroseconds(10); digitalWrite(TRIG_PIN, LOW); Time = pulseIn(ECHO_PIN, HIGH); // Pomiar czasu trwania impulsu zwrotnego z pinu Echo // Oblicz odległość w centymetrach Distance = (Time * 0.0343) / 2; // Wydrukuj wynik w centymetrach na konsoli szeregowej Serial.print("Odległość: "); Serial.print(Distance); Serial.print(" cm, Limit: "); Serial.print(Limit); Serial.println(" cm"); // Dodaj nową linię po wydruku // Sprawdzenie odległości i wyświetlanie odpowiedniego komunikatu lcd.clear(); // Czyszczenie wyświetlacza if (Distance > Limit) { // Zmiana warunku na użycie zmiennej Limit lcd.setCursor(0, 0); lcd.print("Poza limit "); lcd.print(Limit); lcd.setCursor(0, 1); lcd.print("Nowa rolka !!!"); // Mryganie diodami LED co pół sekundy static unsigned long lastBlinkTime = 0; // Przechowywanie czasu ostatniego mrygnięcia static bool ledState = LOW; // Stan diod LED unsigned long currentMillis = millis(); // Zapisanie bieżącego czasu if (currentMillis - lastBlinkTime >= 500) { // Mryganie co 500 ms lastBlinkTime = currentMillis; // Zaktualizuj czas ostatniego mrygnięcia ledState = !ledState; // Zmień stan diod LED digitalWrite(LED_PIN_1, ledState); // Ustaw nowy stan pierwszej diody LED digitalWrite(LED_PIN_2, ledState); // Ustaw nowy stan drugiej diody LED digitalWrite(LED_PIN_3, ledState); // Ustaw nowy stan trzeciej diody LED } } else { digitalWrite(LED_PIN_1, LOW); // Zgaśnąć wszystkie diody LED, gdy odległość jest mniejsza lub równa Limit digitalWrite(LED_PIN_2, LOW); digitalWrite(LED_PIN_3, LOW); // Wyświetlanie informacji na LCD co 2 sekundy unsigned long currentMillis = millis(); if (currentMillis - lastDisplayTime >= 2000) { // Co 2000 ms lastDisplayTime = currentMillis; // Zaktualizuj czas ostatniego wyświetlenia displayState = !displayState; // Zmień stan wyświetlania } if (displayState) { lcd.setCursor(0, 0); lcd.print("Zmierzono:"); lcd.setCursor(0, 1); lcd.print(Distance); lcd.print(" cm "); // Dodaj spacje na końcu, aby wyczyścić wcześniejsze znaki } else { lcd.setCursor(0, 0); lcd.print("Limit:"); lcd.setCursor(0, 1); lcd.print(Limit); // Wyświetlanie aktualnego limitu lcd.print(" cm "); // Dodaj spacje na końcu, aby wyczyścić wcześniejsze znaki } } delay(2000); // Krótkie opóźnienie przed następnym pomiarem } schemat.pdf
  2. Hej! Robię projekt, który będzie wykorzystywał pomiar odległości pobierany z czujnika i przesyłany do Raspberry Pi Zero W Basic - chodzi o to żeby całość była dość poręczna. Chciałbym uniknąć wykorzystania płytki stykowej w myśl jak największej poręczności rozwiązania, dlatego myślałem o wykorzystaniu czegoś takiego - czy to będzie działać po podłączeniu do pinów GPIO raspa? W sensie czy wystarczy tylko podłączyć te kabelki z zestawu i nie potrzeba nic więcej? Inną opcją może być też czujnik wykrywający ruch o ile ma wąskie ROI fabrycznie lub możliwe do ustawienia. Przyznam, że ideałem byłaby sytuacja, w której czujnik dzieliłby się na transmiter (przyklejony w jednym miejscu) i odbiornik podłączony do raspa, przekazujący mu pomiar. Do tej pory nie udało mi się znaleźć czegoś takiego ale może źle szukam jeśli ktoś wie o czymś takim, to bardzo chętnie przyjmę tipa. Ewentualnie czujnik będący transmiterem przekazujący pomiar przez bluetooth, radiowo albo jakoś inaczej do kontrolera...Ktokolwiek widział, ktokolwiek wie Pozdrawiam
  3. Witam wszystkich konstruktorów, robotyków, majsterkowiczów. Pierwszy raz za swoją "karierę" elektronika-hobbysta zdecydowałem wziąć udział w konkursie walk robotów minisumo, zacząwszy od analizy projektów z zawodów zauważyłem że większość robotów posiada analogowe czujniki firmy Sharp. Z doświadczenia wiem że są inne czujniki odległościowe takie jak laserowe VL53l0x albo ultradźwiękowe HC-SR04 i chyba są nawet tańsze od sharpów. Z jakiego powodu konstruktorzy decydują się na użycie sharpów? Domyślam się że analiza danych z analogowych czujników jest prostsza od cyfrowych, krótszy czas reakcji. Próbowałem znaleźć dyskusję na ten temat na forumach ale nic ciekawego nie znalazłem. Za wcześnie dziękuję za zaangażowanie w temat.
  4. Chcielibyśmy stworzyć robota omijającego przeszkody lub znajdującego swoją drogę w labiryncie. Potrzebny jest nam wtedy jakiś sposób wykrycia oraz ustalenia odległości od naszej ściany lub przeszkody. Jednym z tańszych sposobów jest zastosowanie ultradźwiękowego czujnika odległości. Odczyt sygnału i jego interpretacja jest tylko jednym z kilku zagadnień użytkowania tego typu sensora. Zgłębmy je razem poniżej. Ten artykuł bierze udział w naszym konkursie! Na zwycięzców czekają karty podarunkowe Allegro, m.in.: 2000 zł, 1000 zł i 500 zł. Potrafisz napisać podobny poradnik? Opublikuj go na forum i zgłoś się do konkursu! Czekamy na ciekawe teksty związane z elektroniką i programowaniem. Sprawdź szczegóły » Zacznijmy od początku W naszych rozważaniach weźmy pod uwagę jeden z najpopularniejszych tego typu czujników – HC-SR04. Powyżej widzimy schemat połączenia czujnika z płytką Arduino Uno. W teorii wystarczy, że określimy wejścia/wyjścia, nadamy odpowiedni impuls na pin Trg, odczytamy długość impulsu na pin Echo i podzielimy go przez podaną w dokumentacji liczbę 58. Otóż ta wartość nie zawsze jest poprawna. Zasada działania czujnika opiera się na tym, że nadany sygnał dźwiękowy odbija się od przeszkody i wraca do odbiornika. W czasie podróży fal dźwiękowych na pinie echo ustawiony jest stan wysoki, zmienia się on na stan niski wraz z odczytaniem przez odbiornik powrotu fali. My odczytujemy długość trwania tego stanu i dzielimy go przez prędkość dźwięku. Prędkość a temperatura Załóżmy, że chcemy by nasz robot pracował na świeżym powietrzu. Liczba 58 o której mówi dokumentacja daje nam po podzieleniu przez czas impulsu odległość mierzoną w centymetrach zakładając, że prędkość dźwięku nie zmienia się. Dla temperatury 20˚C prędkość dźwięku wynosi 343,5 m/s ale dla 10˚C jest to już 337,5 m/s. Jeżeli dla prędkości w 20˚C odczytamy na czujniku 1 metr to dla 10˚C przy pozostawieniu tego samego przelicznika dla tej samej odległości odczytamy 0,98 metra. Poniżej znajduje się wykres, gdzie pokazano o ile procent różnią się pomiary w zależności od temperatury otoczenia w stosunku do pomiaru, gdzie za prędkość dźwięku przyjęliśmy tą podaną w dokumentacji (340 m/s). Prędkość dźwięku w zależności od temperatury liczymy ze wzoru: v = 331,5 + 0,6*T [m/s] Zakładając, że mierzymy odległość 4 metrów to w temperaturze 0˚C nasz pomiar jest o 10 cm różny od rzeczywistego licząc odległość dla 340 m/s. Aby temu zaradzić możemy zastosować czujnik temperatury który umożliwiałby robotowi w odpowiedni sposób zmieniać mnożnik, lub uwzględnić ten błąd pomiarowy w projekcie. Położenie ma znaczenie Błędy pomiarowe opisane powyżej są dla większości rozwiązań akceptowalne i można nie zwracać na nie uwagi. Jednak co jeżeli obiekt jest niewidoczny dla czujnika? W dokumentacji technicznej sensora HC-SR04 możemy wyczytać informację o tym, że kąt pomiarowy wynosi 30˚. Jednak nasuwa się pytanie dla jakich obiektów mierzono, gdzie ustalono wierzchołek kąta mierzenia oraz jakie są kryteria uznania pomiaru za poprawny. Po wykonaniu wielu pomiarów znalezione zostały na nie odpowiedzi. Po to by nasz stożek pomiarowy był symetryczny należy umieścić jego wierzchołek w odpowiednim miejscu. Położeniem tym jest środek czujnika. To właśnie ten punkt uznajemy za miejsce, gdzie kąt pomiaru wynosi 0˚. Symetria stożka pomiarowego ułatwi nam późniejsze projektowanie całego systemu odpowiedzialnego za mierzenie odległości. W naszej analizie będziemy wizualizować wyniki za pomocą schematu poniżej. Nasze rozważania co do kąta zaczniemy od prostokątnego pudełka. W zależności od czujnika zakres ,,widzenia’’ wynosił -11˚÷ 11˚ a w jednym z czujników nawet -6˚÷6˚. Jak można zauważyć efektywne kąty pomiarowe różnią się w zależności od egzemplarza. Pomiar poprawny otrzymujemy już wtedy, kiedy przynajmniej krawędź obiektu znajduje się w obszarze zaznaczonym na zielono. Jako dobry pomiar uznajemy zmierzenie odległości rzędu 50 cm z błędem mniejszym niż 2 cm, uwzględniając korektę temperaturową. Kolejnym elementem będzie ,,ścianka” z kartonu. Z takim obiektem może spotkać się nasz robot wielokrotnie w labiryncie. W tym przypadku wierzchołek pomiarowy jest o wiele mniejszy niż w przypadku pudełka. Zakres dobrych pomiarów wynosi -4˚÷4˚ a dla najgorszego przypadku -1˚÷1˚. Z racji tak wąskiego stożka może zajść potrzeba zastosowania większej liczby czujników bądź dokładne ich rozmieszczenie z uwzględnieniem zakresu dobrych pomiarów wspomnianych powyżej. Dla elementów wklęsłych i wypukłych względem sensora pomiary dla całego stożka są niepoprawne. Podsumowanie Czujnik HC-SR04 nie jest bardzo wysokiej klasy sensorem ultradźwiękowym (świadczy o tym na przykład rozrzut wartości kąta stożka pomiarowego różnych egzemplarzy). Można jednak przy uwzględnieniu warunków atmosferycznych i rodzajów obiektów jakie mamy mierzyć otrzymać dobre wyniki nie narażając się na koszty związane z zakupem sprzętu o lepszych parametrach. Dla poszerzenia kąta pomiarowego w labiryncie z cienkimi ścianami można zastosować kilka czujników. Kwestia zmiany prędkości dźwięku w zależności od temperatury staje się problematyczna dopiero na dużych odległościach, więc w przypadku robotów manewrujących nie musimy jej brać pod uwagę.
  5. Witam. Mam problem z czujnikiem odległości. Gdy wgram program na sam czujnik to działa normalnie, ale jak dołączę do tego ekran LCD 240*240 IPS 1,3", to czujnik pokazuje mi ciągle 0cm. Ma ktos pomysł co to może być ? #define trigPin 12 #define echoPin 10 #define TFT_DC 7 #define TFT_RST 8 #define SCR_WD 240 #define SCR_HT 240 // 320 - to allow access to full 240x320 frame buffer #include <SPI.h> #include <Adafruit_GFX.h> #include <Arduino_ST7789_Fast.h> Arduino_ST7789 lcd = Arduino_ST7789(TFT_DC, TFT_RST); //Arduino_ST7789 lcd = Arduino_ST7789(TFT_DC, TFT_RST, TFT_CS); void setup(void) { Serial.begin(9600); pinMode(trigPin, OUTPUT); //Pin, do którego podłączymy trig jako wyjście pinMode(echoPin, INPUT); //a echo, jako wejście lcd.init(SCR_WD, SCR_HT); lcd.fillScreen(BLACK); lcd.setCursor(0, 0); lcd.setTextColor(WHITE,BLUE); lcd.setTextSize(3); //lcd.println(dystans); } void loop() { long czas, dystans; digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); czas = pulseIn(echoPin, HIGH); dystans = czas / 58; Serial.print(dystans); Serial.println(" cm"); lcd.println(dystans); delay(1000); }
×
×
  • Utwórz nowe...