niedziela, 5 października 2014

ROBOT  ZA MNIEJ NIŻ 200 ZŁOTYCH?

SZUKASZ PREZENTU DLA SWOJEGO DZIECKA?
Kup podzespoły i zbuduj robota omijającego przeszkody. Stosując się do instrukcji
przekonasz się osobiście, jakie to łatwe.

TEMAT: ROBOT OMIJAJĄCY PRZESZKODY.

PODZESPOŁY.

1. Magician Chassis - Platforma dla robota                              69.99 PLN brutto
2. Arduino Uno R3 (compatibile)                                              65.99 PLN brutto
3. Arduino Motor Shield L293D                                                29.99 PLN brutto
4. Pojemnik na jedną baterię 6F22 (9V) z wyłącznikiem           3.23 PLN brutto
5. Ultradźwiękowy miernik odległości HC-SR04                      10.89 PLN brutto
6. Listwa żeńska 1x10 pin 10.5 mm                                           0.65 PLN brutto
7. Listwa żeńska 1x8 pin 10.5 mm (2 szt.)                                 1.10 PLN brutto
8. Przewody czarne 10 szt. ARE 0009                                       4.99 PLN brutto
9. Listwa kołkowa 1x40 pin kątowa symetryczna                       0.55 PLN brutto
                                                                                               --------------------------
                                                                                                187.38 PLN
Celem, jaki sobie postawiłem, była budowa robota omijającego przeszkody przy pomocy sonaru HC-SR04. Poniżej rzut:















Budowę robota zaczynamy od zmontowania platformy dla robota (poz. 1). Razem z zestawem otrzymujemy dokładną instrukcję "step by step", tak więc nie powinno to stanowić dla nas większego problemu.
Następnym krokiem jest przymocowanie płytki Arduino Uno R3 (poz. 2) do naszego podwozia, przy pomocy słupków dystansowych (poz. 10 w instrukcji - L10 spacer 4PCS), które znajdziemy w zestawie montażowym podwozia. Na zdjęciu widać koszyczek na cztery baterie 1.5 V, ale osobiście polecam taki, jak w wykazie czyli 9V, ważne żeby miał wyłącznik (poz. 4).



Kolejnym krokiem jest osadzenie listew żeńskich 10-pinowej i dwóch 8-pinowych (poz. 6 i 7) we wskazane na fotografii miejsca, oraz dwóch pinów odciętych z listwy kołkowej 1x40 (kątowej symetrycznej) odpowiednio w A0 i A1 płytki Arduino Uno R3. W zasadzie będziemy potrzebować tylko Pin A1, ale w niektórych rozwiązaniach do podłączania Triggera używa się Pinu A0.


W Adafruit Motor Shield ze względu na ilość obsługiwanych silników DC (4 szt.) oraz dwóch serwomechanizmów, które zajmują wszystkie piny cyfrowe (poza 2 i 13), nie przewidziano "przelotek". Do obsługi sonara HC-SR04 potrzebujemy, poza trzema pinami wpiętymi do Servo 2 AdaFruitMotorShield, jeszcze jeden dodatkowy pin Echo (A1) i dlatego zmuszeni jesteśmy pomóc sobie w pokazany wyżej sposób.

No, chyba że potrafisz lutować, na tę okoliczność producent przewidział miejsca, gdzie możesz wlutować Pin 2 oraz Piny od A0 do A5. Do tak przygotowanej płytki Arduino dodajemy Adafruit Motor Shield. Na fotografii poniżej znajdziesz dokładny sposób, jak podłączyć silniki (M2 i M3) do terminalblocków, oraz przewody sonara (Trigger, + i - ) do Servo2, przewód Echo łączymy z pinem wyprowadzonym wcześniej na płytce Arduino Uno R3 (Pin A1).
Uwaga: silniki mają dwa przewody: czarny (GND) i czerwony (V+), w naszym przypadku kolor czerwony skierowany jest w kierunku przodu robota.

Opis pinów w Arduino Motor Shield:

MOTORLATCH 12
MOTORCLK 4
MOTORENABLE 7
MOTORDATA 8

MOTOR1_A 2
MOTOR1_B 3
MOTOR1_PWM 11
MOTOR2_A 1
MOTOR2_B 4
MOTOR2_PWM 3

MOTOR3_A 5
MOTOR3_B 7
MOTOR3_PWM 6

MOTOR4_A 0
MOTOR4B_ 6
MOTOR4_PWM 5

SERVO1_PWM 10
SERVO2_PWM 9


Pozostało nam jeszcze przymocować koszyk na baterię i sam sonar. Ja do tego celu użyłem taśmy dwustronnie klejącej. Do terminalblocków AFM podłączamy baterię 9V (zwróć uwagę na prawidłowe podpięcie przewodów +M i GND). Sonar przykleiłem taśmą do podpórki półek meblowych. Efekt widać na zdjęciu poniżej.

I to właściwie już wszystko. Oczywiście pozostało jeszcze wgrać nasz sketch/program. Jeżeli nigdy dotąd nie miałeś styczności z ideą Arduino, to odsyłam na oficjalną stronę Arduino.cc, gdzie w dziale Getting Started with Arduino on Windows dowiesz się, krok po kroku, od czego zacząć. Również w języku ojczystym jest wiele stron, na których znajdziesz pomoc, jak np. w tym miejscu: http://majsterkowo.pl/od-czego-zaczac-zabawe-z-arduino/.
Będziesz też potrzebował bibliotekę dla Adafruit Motor Shield, pomoc znajdziesz na stronie producenta Adafruit, a samą bibliotekę tutaj >>. Poniżej - pomiędzy liniami - sketch:
--------------------------------------------------------------------------------------------------------------------------
/*W sketchu wykorzystałem Demo Code ze strony:
*/

#include <AFMotor.h>

AF_DCMotor motor1(3); //M3 - motor lewy
AF_DCMotor motor2(2); //M2 - motor prawy

#define echoPin A1 // Echo Pin = Analog Pin A1
#define trigPin A0 // Trigger Pin = Digital Pin 9 - Servo 2
#define LEDPin 13 // Onboard LED

long duration; // Duration used to calculate distance
long HR_dist=0; // Calculated Distance
int minimumRange=5; //Minimum Sonar range
int maximumRange=200; //Maximum Sonar Range


void setup() {

Serial.begin (9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(LEDPin, OUTPUT); // Use LED indicator (if required)

motor1.setSpeed(250);//prędkość silnika lewego
motor1.run(FORWARD);//silnik lewy domyślnie do przodu
motor2.setSpeed(255);//prędkość silnika prawego
motor2.run(FORWARD);//silnik prawy domyślnie do przodu

}

void loop() {

motor1.run(FORWARD); //silnik lewy M3 do przodu
motor2.run(FORWARD);//silnik prawy M2 do przodu
getDistance();
void getDistance(){ 

digitalWrite(trigPin, LOW); 
delayMicroseconds(2); 
digitalWrite(trigPin, HIGH);
delayMicroseconds(10); 
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH); 
HR_dist = duration/58.2;

if (HR_dist >= maximumRange || HR_dist <= minimumRange){

Serial.println("0");
digitalWrite(LEDPin, HIGH); 

} else {

Serial.println(HR_dist);
digitalWrite(LEDPin, LOW);


if (HR_dist <=30 ){//jeżeli robot jest w odległości od przeszkody <=30

motor1.run(RELEASE);//silnik lewy bieg jałowy
motor2.run(RELEASE);//silnik prawy bieg jałowy
delay (500);//przez pół sekundy

motor1.run(BACKWARD);//silnik lewy do tyłu
motor2.run(BACKWARD);//silnik prawy do tyłu
delay (700);//przez 0,7 sekundy

motor1.run(RELEASE);// silnik lewy bieg jałowy
motor2.run(RELEASE);// silnik prawy bieg jałowy
delay(500); //przez pół sekundy

motor1.run(FORWARD);//silnik lewy do przodu |robot skręca w prawo
motor2.run(RELEASE);//silnik prawy bieg jałowy |
delay (500);//przez pół sekundy 

}

}

}
---------------------------------------------------------------------------------


A oto gotowy projekt:







Brak komentarzy:

Prześlij komentarz