Już trzy grupy uczestniczą w zajęciach z robotyki – jedna w poniedziałek, druga w środę od 13.30 oraz najbardziej zaawansowana w środę o 15.05. Dzisiaj młodzi adepci robotyki próbowali usprawnić robota z czujnikiem ultradźwiękowym. Kiedy napotyka na przeszkodę cofa się i skręca. Później – w dalszych fazach skomplikowania – czujnik zostanie umocowany na serwie modelarskim i będzie się „rozglądał” wybierając drogę. Dzięki temu będzie znajdował wyjście z labiryntu.
Uczniowie analizują oprogramowanie i próbują je zmieniać. Czasami wyskoczy jakiś błąd i wtedy najwięcej się uczą.
Drugi robot sterowany jest pilotem na podczerwień. Uczniowie nauczyli się odczytywać wartości przypisanych klawiszy i używać w programach. Teraz będziemy ćwiczyć i udoskonalać programy. Pod filmem kody źródłowe obu robotów. Programy napisane na platformę arduino.
Robot z czujnikiem ultradźwiękowym – kiedy napotyka na przeszkodę (np nogę) cofa się i skręca.
Robot sterowany pilotem na podczerwień(tutaj od rzutnika multimedialnego)
Program robota z czujnikiem ultradźwiękowym:
// ————————————————————–Silniki i czujnik
int silnik_lewy[] = {2, 3};
int silnik_prawy[] = {7, 8};
// ultradzwiekowy
int Trig = 9; // Numer pinu wyzwolenia
int Echo = 10; // Numer pinu odpowiedzi
long EchoTime; // Czas trwania sygnału ECHO
int odleglosc; // Odległość w centymetrach
int maxymalnydystans = 200; // Maksymalna odległość
int minimalnydystans = 2; // Minimalna odległoś
// ———————————————————ustawienia
void setup() {
Serial.begin(9600);
// do silników
int i;
for(i = 0; i < 2; i++){
pinMode(silnik_lewy[i], OUTPUT);
pinMode(silnik_prawy[i], OUTPUT);
}
// ustalenie co z czym jesli chodzi o ultradzwiękowy – wysyłanie i odbiór sygnału
pinMode(Trig, OUTPUT);
pinMode(Echo, INPUT);
}
// —————————————————————————glowna petla
void loop() {
// Ustawiamy TRIG w stan niski na 2us
digitalWrite(Trig, LOW);
delayMicroseconds(2);
// Ustawiamy TRIG w stan wysoki na 10us
digitalWrite(Trig, HIGH);
delayMicroseconds(10);
// Ustawiamy TRIG w stan niski – rozpoczynamy pomiar
digitalWrite(Trig, LOW);
// Odczytujamy czas trwania stanu wysokiego na pinie ECHO
EchoTime = pulseIn(Echo, HIGH);
// Obliczamy odległość
odleglosc = EchoTime / 58;
if (odleglosc > 8)
{
jazda_przod();
Serial.println(„dystans ok to zaiwaniam”);
Serial.println(odleglosc);
} else
{
{
jazda_tyl();
Serial.println(„do tylu”);
delay(500);
silniki_stop();
zakret_prawo();
Serial.println(„zakret”);
delay(500);
silniki_stop();
}
}
}
// ———————————————————————- definicja jazdy
void silniki_stop(){
digitalWrite(silnik_lewy[0], LOW);
digitalWrite(silnik_lewy[1], LOW);
digitalWrite(silnik_prawy[0], LOW);
digitalWrite(silnik_prawy[1], LOW);
delay(25);
}
void jazda_przod(){
digitalWrite(silnik_lewy[0], HIGH);
digitalWrite(silnik_lewy[1], LOW);
digitalWrite(silnik_prawy[0], HIGH);
digitalWrite(silnik_prawy[1], LOW);
}
void jazda_tyl(){
digitalWrite(silnik_lewy[0], LOW);
digitalWrite(silnik_lewy[1], HIGH);
digitalWrite(silnik_prawy[0], LOW);
digitalWrite(silnik_prawy[1], HIGH);
}
void zakret_lewo(){
digitalWrite(silnik_lewy[0], LOW);
digitalWrite(silnik_lewy[1], HIGH);
digitalWrite(silnik_prawy[0], HIGH);
digitalWrite(silnik_prawy[1], LOW);
}
void zakret_prawo(){
digitalWrite(silnik_lewy[0], HIGH);
digitalWrite(silnik_lewy[1], LOW);
digitalWrite(silnik_prawy[0], LOW);
digitalWrite(silnik_prawy[1], HIGH);
}
Program robota sterowanego na podczerwień
// ————————————————————————- czujnik ultradzwiekowy
#include <IRremote.h>
#define irPin 11
IRrecv irrecv(irPin);
decode_results results;
// ————————————————————————— silniki
int silnik_lewy[] = {2, 3};
int silnik_prawy[] = {7, 8};
// ————————————————————————— ustawienia
void setup() {
Serial.begin(9600);
irrecv.enableIRIn();
// do silnikow
int i;
for(i = 0; i < 2; i++){
pinMode(silnik_lewy[i], OUTPUT);
pinMode(silnik_prawy[i], OUTPUT);
}
}
// ————————————————————————— glowna petla
void loop() {
if (irrecv.decode(&results)) {
switch (results.value) {
case 0x61D6A857:
Serial.println(„w lewo”);
zakret_lewo();
break;
case 0x61D6AA55:
jazda_przod();
Serial.println(„w gore”);
break;
case 0x61D69A65:
zakret_prawo();
Serial.println(„w prawo”);
break;
case 0x61D618E7:
Serial.println(„w dol”);
jazda_tyl();
break;
case 0x61D628D7:
Serial.println(„srodek”);
silniki_stop();
break;
}
irrecv.resume();
}
}
// ————————————————————————— jazda
void silniki_stop(){
digitalWrite(silnik_lewy[0], LOW);
digitalWrite(silnik_lewy[1], LOW);
digitalWrite(silnik_prawy[0], LOW);
digitalWrite(silnik_prawy[1], LOW);
delay(25);
}
void jazda_przod(){
digitalWrite(silnik_lewy[0], HIGH);
digitalWrite(silnik_lewy[1], LOW);
digitalWrite(silnik_prawy[0], HIGH);
digitalWrite(silnik_prawy[1], LOW);
}
void jazda_tyl(){
digitalWrite(silnik_lewy[0], LOW);
digitalWrite(silnik_lewy[1], HIGH);
digitalWrite(silnik_prawy[0], LOW);
digitalWrite(silnik_prawy[1], HIGH);
}
void zakret_lewo(){
digitalWrite(silnik_lewy[0], LOW);
digitalWrite(silnik_lewy[1], HIGH);
digitalWrite(silnik_prawy[0], HIGH);
digitalWrite(silnik_prawy[1], LOW);
}
void zakret_prawo(){
digitalWrite(silnik_lewy[0], HIGH);
digitalWrite(silnik_lewy[1], LOW);
digitalWrite(silnik_prawy[0], LOW);
digitalWrite(silnik_prawy[1], HIGH);
}