Archiwum kategorii: roboty

Testowane czujniki

Ultrasonic, czyli walka czujników z Seeedstudio, HC-SR04 i MaxBotix

Każdemu komu marzy się budowa robota, wcześniej czy później będzie musiał podjąć decyzje o czujniku do wykrywania przeszkód. W końcu nie chcemy, aby nasz robot odbijał się od ściany do ściany. Na rynku dostępnych jest wiele takich czujników od ultradźwiękowych, podczerwieni, aż po najzwyklejsze mechaniczne. My się natomiast skupiliśmy na tych pierwszych z grupy. Czym są czujniki ultradźwiękowe i jak działają. Otóż takie czujniki składają się z nadajnika i odbiornika. Nadajnik emituje krótkie fale dźwiękowe o wysokiej częstotliwości w regularnych odstępach czasu. Kiedy sygnał natrafi na przeszkodę odbija się od niej i wraca do odbiornika. Odległość od przeszkody mierzona jest na podstawie czasu, po którym sygnał powrócił do czujnika. Tu warto dodać, iż w przypadku czujników ultradźwiękowych tło, kolor, rodzaj czy przejrzystość przeszkody nie mają wpływu na pomiar.

Testowane czujniki

Testowane czujniki

Czytaj dalej

Regulatory PID na Arduino. Wstęp

W tym tekście postaram się przybliżyć ideę regulatorów PID, ich zastosowania oraz sposób implementacji w języku C. Jest to wstęp do cyklu wpisów o regulatorach w robotyce. W tej serii nie będę się zagłębiał w Teorię Sterowania, zamiast tego skupię się na wykorzystaniu omówionych regulatorów w praktyce.

Idealny regulator PID

Idealny regulator PID

Czytaj dalej

Jak sterować robotem, czyli budowa i obsługa prostego enkodera.

Jak sami zauważyliście, dwukołowa platforma robota, którą oferuje sklep Nettigo.pl ma tendencję do skręcania. Spróbujcie – napiszcie program, który nakazuje jedynie jazdę na wprost. Celem tego i kilku następnych artykułów będzie analiza i minimalizacja tego zjawiska oraz prezentacja różnych sposobów regulacji. Mam nadzieję, że będzie to przyjemny start w świat regulatorów.

Liczenie obrotów układ

Czytaj dalej

Beam Follower czyli robot z Arduino goni światło

Zasada działania:

W tym przypadku robot zamiast podążać za linią goni światło latarki – zupełnie jak kot, który stara się złapać plamkę lasera. Tak jak wcześniej wykorzystamy falową naturę światła. Mianowicie, naszymi czujnikami natężenia światła będą fototranzystory wrażliwe na podczerwień. Dlaczego takie? Bo działają ;) Światło latarki zawiera sporo promieniowania podczerwonego. Teoretycznie można też użyć fotorezystorów, jednak są one znacznie mniej dokładne.

Podłączenie:

Podłączenie fototranzystora

Jak widać, nie należy ono do bardzo skomplikowanych. Krótsza nóżka do masy, dłuższa do wejścia analogowego w arduino i rezystora. Jak pamiętacie, w module optycznym Line Followera zostawiłem dwa wolne wyprowadzenia. Wykorzystamy je teraz ;) Fototranzystory bez najmniejszego problemu można wlutować w płytkę, na której znajdują się transoptory. Jak widać, na poprzednio zlutowane transoptory nałożyłem warstwę taśmy izolacyjnej aby uniknąć zwarć.

Podłączenie fototranzystora w praktyce

Oczywiście, równie dobrze możecie w ogóle tego nie lutować, tylko wykorzystać płytkę stykową BB-170 przymocowaną np. gumką recepturką do korpusu. To już od Was zależy ;)
Niezależnie od tego, który sposób wybierzecie, nie ustawcie czujników za daleko od siebie, szerokość płytki BB-170 jest optymalna. Poza tym ustawcie je pod kątem do siebie, to zwiększy różnicę między ilością światła padającą na oba fototranzystory.

Moduł linefollowera z dodatkowymi fototranzystorami:

Gotowy moduł, 2 w jednym

Moduł linefollowera z dodatkowymi fototranzystorami, widok z dołu:

Gotowy moduł, widok z dołu

Program, czyli co robot myśli:

Deklaracja zmiennych. “left” i “right” to numery pinów analogowych do których będziemy podłączać czujniki. Tak jak poprzednio, “predkosc” i “predkosc2” to wartości wypełnienia PWM i trzeba je dopasować samodzielnie. Z kolei dwie ostatnie deklaracje odpowiadają za czułość robota. Zbyt mała czułość sprawi, że robot nie będzie jechał za światłem, zbyt duża z kolei – że będzie jechał za nim bardzo wolno. Sprawdźcie sami: w miejsce “wartoscmax” wpiszcie 1000 i zobaczcie co się stanie ;)

#include <MotorShield.h>
MS_DCMotor prawy(MOTOR_A);
MS_DCMotor lewy(MOTOR_B);
#define left 2
#define right 3
#define predkosc 150
#define predkosc2 100 //predkosc przy skrecaniu
#define wartoscmin 0
#define wartoscmax 700

Funkcja odpowiadająca za zapis pomiaru do struktury i jednoczesnemu zaokrągleniu wyniku. Funkcja map() pozwala przeliczyć jakiś zbiór wartości na inny, wg wzoru podanego na stronie. Zmniejszenie przedziału sprawia, że zaokrąglamy odczyty z fototranzystorów.

void zmierz(struct Pomiary &odczyt)
{
odczyt.lewy = map(analogRead(left), 0, 1023, wartoscmin, wartoscmax);
odczyt.prawy = map(analogRead(right), 0, 1023, wartoscmin, wartoscmax);
}

Funkcja sterująca. Dzięki wcześniejszemu zaokrągleniu odczytów możemy zastosować najprostsze rozwiązanie – sprawdzenie czy napięcie na lewym fototranzystorze jest większe/mniejsze/równe napięciu na prawym. W ten sposób wiemy, po  której stronie jest jaśniej.

void steruj(struct Pomiary odczyt)
{
// jesli fototranzystor jest wpięty między analog pin i masę
if(odczyt.lewy == odczyt.prawy)
{
prawy.setSpeed(predkosc);
lewy.setSpeed(predkosc);
}
if(odczyt.lewy < odczyt.prawy)
{
//wiecej swiatla po lewej
prawy.setSpeed(predkosc2);
lewy.setSpeed(0);
}
if(odczyt.lewy > odczyt.prawy)
{
//wiecej swiatla po prawej
prawy.setSpeed(0);
lewy.setSpeed(predkosc2);
}
}

Na koniec…

Program możecie ściągnąć tutaj. Tak jak wcześniej, zachęcam do modyfikowania tego projektu ;)

Jest to przykładowa konstrukcja, dla naszego zestawu Robo Kit

Robo Kit, czyli pierwsze kroki z robotyką. Line Follower.

O co chodzi:

Przyświecała nam idea stworzenia zestawu dzięki któremu można w przyjemny sposób rozpocząć przygodę z robotyką. Prostota obsługi jest tu priorytetem, dlatego też zdecydowaliśmy się na wykorzystanie gotowych modułów do realizacji jak największej ilości funkcji. Pojazd podążający za linią (line follower) jest najlepszy na początek. W miarę prosty w realizacji, pozwala jednocześnie zebrać pierwsze doświadczenia. Dzięki wykorzystaniu gotowych modułów (Arduino UNO, Motor Shield, gotowe podwozie robota) możemy kolejne roboty budować w oparciu o te same podzespoły. Jednocześnie nie jesteście ograniczeni tylko do robotów – Arduino może być sercem projektów niemających nic wspólnego z robotyką.

Zasada działania, czyli teoria do pominięcia:

Jak sprawić by robot widział linię? Żeby odpowiedzieć sobie na to pytanie, należy wpierw zadać sobie inne: W jaki sposób my widzimy? Czemu nocne niebo jest czarne, kartka jest biała, a liście zielone? Wszystko to wynika ze zdolności do odbijania światła. A w zasadzie – do zdolności odbijania fali o konkretnej długości. Liście są zielone, bo zawarty w nich chlorofil odbija fale elektromagnetyczne o długości odpowiadającej zieleni, resztę pochłania. W ten sam sposób – dno studni czy nocne niebo wydaje się nam czarne, bo światło (fale EM) są przez nie pochłaniane. Właśnie z tej własności skorzystamy budując naszego robota.
Jako oczka followera wykorzystamy transoptory odbiciowe CNY70. Transoptor to zestaw diody i fototranzystora. W tym wypadku jest to dioda podczerwona. Podczerwień to fala EM na tyle długa, że ludzkie oko jej nie widzi. Podlega ona jednak tym samym prawom co światło widzialne – “czerń” ją bardzo dobrze pochłania, a “biel” bardzo dobrze odbija. Dzięki temu transoptor położony na kartce będzie dobrze przewodził, z kolei położony na taśmie izolacyjnej – nie będzie przewodził prawie w ogóle.

Czytaj dalej