Vanemate ringitund 05.04.17

ARDUINO ROBOTAUTO

Ultrasonic sensor car

Meie uus robotauto hakkab valmima.

Robotauto ehitamine

http://www.makeuseof.com/tag/build-4wd-arduino-robot-beginners/

https://blog.miguelgrinberg.com/post/building-an-arduino-robot-part-i-hardware-components

Joone jälgimine

https://diyhacking.com/make-line-follower-robot/

http://www.circuitstoday.com/line-follower-robot-using-arduino

Takistuste vältimine

http://robotshop.com/letsmakerobots/obstacle-avoidance-robot-car-arduino

http://www.webondevices.com/arduino-robot-car-obstacle-avoidance

http://forum.arduino.cc/index.php?topic=165987.0

http://communityofrobots.com/tutorial/kawal/how-make-your-first-robot-using-arduino

 

Kood, kuidas robotauto juba eelnevalt programmeeritud suundades liigub.

// Motor A pins (enableA = enable motor, pinA1 = forward, pinA2 = backward)
int enableA = 5; //11;
int pinA1 = 8; // 6;
int pinA2 = 7; //5;

//Motor B pins (enabledB = enable motor, pinB2 = forward, pinB2 = backward)
int enableB = 10;
int pinB1 = 4; //4;
int pinB2 = 2; //3;

//This lets you run the loop a single time for testing
boolean run = true;

void setup() {
pinMode(enableA, OUTPUT);
pinMode(pinA1, OUTPUT);
pinMode(pinA2, OUTPUT);

pinMode(enableB, OUTPUT);
pinMode(pinB1, OUTPUT);
pinMode(pinB2, OUTPUT);
}

void loop() {
delay(5000);

if (run) {
delay(2000);
enableMotors();
//Go forward
forward(1000);
//Go backward
backward(1000);
//Turn left
turnLeft(2000);
coast(200);
//Turn right
turnRight(2000);
coast(200);
//This stops the loop
run = false;
}
}

//Define high-level H-bridge commands
void enableMotors()
{
motorAOn();
motorBOn();
}

void disableMotors()
{
motorAOff();
motorBOff();
}

void forward(int time)
{
motorAForward();
motorBForward();
delay(time);
}

void backward(int time)
{
motorABackward();
motorBBackward();
delay(time);
}

void turnLeft(int time)
{
motorABackward();
motorBForward();
delay(time);
}

void turnRight(int time)
{
motorAForward();
motorBBackward();
delay(time);
}

void coast(int time)
{
motorACoast();
motorBCoast();
delay(time);
}

void brake(int time)
{
motorABrake();
motorBBrake();
delay(time);
}

//Define low-level H-bridge commands

//enable motors
void motorAOn()
{
digitalWrite(enableA, HIGH);
}

void motorBOn()
{
digitalWrite(enableB, HIGH);
}

//disable motors
void motorAOff()
{
digitalWrite(enableB, LOW);
}

void motorBOff()
{
digitalWrite(enableA, LOW);
}

//motor A controls
void motorAForward()
{
digitalWrite(pinA1, HIGH);
digitalWrite(pinA2, LOW);
}

void motorABackward()
{
digitalWrite(pinA1, LOW);
digitalWrite(pinA2, HIGH);
}

//motor B controls
void motorBForward()
{
digitalWrite(pinB1, HIGH);
digitalWrite(pinB2, LOW);
}

void motorBBackward()
{
digitalWrite(pinB1, LOW);
digitalWrite(pinB2, HIGH);
}

//coasting and braking
void motorACoast()
{
digitalWrite(pinA1, LOW);
digitalWrite(pinA2, LOW);
}

void motorABrake()
{
digitalWrite(pinA1, HIGH);
digitalWrite(pinA2, HIGH);
}

void motorBCoast()
{
digitalWrite(pinB1, LOW);
digitalWrite(pinB2, LOW);
}

void motorBBrake()
{
digitalWrite(pinB1, HIGH);
digitalWrite(pinB2, HIGH);
}

Kood, kuidas robotauto kaugusandurit testida

Selleks on vaja allalaadida teek (library), kus on vajalikud protseduurid kirjas. Selleks on NewPing.h.

https://bitbucket.org/teckel12/arduino-new-ping/downloads/

Allalaetud ZIP fail lisada Arduino stuudiosse:
Sketch -> Include Library -> Add .ZIP Library

#include <NewPing.h>

//Tell the Arduino where the sensor is hooked up
NewPing sonar(12, 13);

long inches;

void setup() {
//Activate the serial monitor so you can see the output of the sensor
Serial.begin(9600);
}

void loop() {
delay(50);
//Ping the sensor to determine distance in inches
inches = sonar.ping_in();
//Print the distance in inches to the serial monitor
Serial.print(inches);
Serial.print(” in.”);
Serial.print(“\n”);
}

Kood, kuidas robotauto väldib takistusi ja pöörab siis otsa ümber.

#include <NewPing.h>

//Tell the Arduino where the sensor is hooked up
NewPing sonar(12, 13);

int enableA = 11;
int pinA1 = 6;
int pinA2 = 5;

int enableB = 10;
int pinB1 = 4;
int pinB2 = 3;

long inches;

void setup() {
pinMode(enableA, OUTPUT);
pinMode(pinA1, OUTPUT);
pinMode(pinA2, OUTPUT);

pinMode(enableB, OUTPUT);
pinMode(pinB1, OUTPUT);
pinMode(pinB2, OUTPUT);
}

void loop() {

//Run the motors at slightly less than full power
analogWrite(enableA, 200);
analogWrite(enableB, 200);

//Ping the sensor and determine the distance in inches
inches = sonar.ping_in();

//If the robot detects an obstacle less than four inches away, it will back up, then turn left; if no obstacle is detected, it will go forward
if (inches < 4) {
analogWrite(enableA, 255);
analogWrite(enableB, 255);
backward(600);
coast(200);
turnLeft(600);
coast(200);}
else {
forward(1);

}
}

//Define high-level H-bridge commands
void enableMotors()
{
motorAOn();
motorBOn();
}

void disableMotors()
{
motorAOff();
motorBOff();
}

void forward(int time)
{
motorAForward();
motorBForward();
delay(time);
}

void backward(int time)
{
motorABackward();
motorBBackward();
delay(time);
}

void turnLeft(int time)
{
motorABackward();
motorBForward();
delay(time);
}

void turnRight(int time)
{
motorAForward();
motorBBackward();
delay(time);
}

void coast(int time)
{
motorACoast();
motorBCoast();
delay(time);
}

void brake(int time)
{
motorABrake();
motorBBrake();
delay(time);
}

//Define low-level H-bridge commands

//enable motors
void motorAOn()
{
digitalWrite(enableA, HIGH);
}

void motorBOn()
{
digitalWrite(enableB, HIGH);
}

//disable motors
void motorAOff()
{
digitalWrite(enableB, LOW);
}

void motorBOff()
{
digitalWrite(enableA, LOW);
}

//motor A controls
void motorAForward()
{
digitalWrite(pinA1, HIGH);
digitalWrite(pinA2, LOW);
}

void motorABackward()
{
digitalWrite(pinA1, LOW);
digitalWrite(pinA2, HIGH);
}

//motor B controls
void motorBForward()
{
digitalWrite(pinB1, HIGH);
digitalWrite(pinB2, LOW);
}

void motorBBackward()
{
digitalWrite(pinB1, LOW);
digitalWrite(pinB2, HIGH);
}

//coasting and braking
void motorACoast()
{
digitalWrite(pinA1, LOW);
digitalWrite(pinA2, LOW);
}

void motorABrake()
{
digitalWrite(pinA1, HIGH);
digitalWrite(pinA2, HIGH);
}

void motorBCoast()
{
digitalWrite(pinB1, LOW);
digitalWrite(pinB2, LOW);
}

void motorBBrake()
{
digitalWrite(pinB1, HIGH);
digitalWrite(pinB2, HIGH);
}

 

Nooremate ringitund 04.04.17

SCRATCH

Rallirada

Auto rallirada, kus tuleb terve tee läbida ilma rajalt välja sõitmata ja võimalikult kiiresti. Ringide arvu saab ise määrata. Lisaks on võimalik mõõta kui kiiresti ringid läbitaks.

Kõigepealt tuleb ise joonistada sobiva rajaga taust.

Siin on auto kood.

Siin saab määrata tegevuse, mis juhtub kui auto jõuab finišisse.

 

OZOBOT

Aardejaht

Ozobotile tuleb kirjutada kood, et jõuda stardist aarete kirstuni. See võib olla näiteks kõige kiirem rada, kõige lühema koodireaga jne.

Rajad näevad sellised välja.

Üks võimalik variant, milline kood võiks välja näha. Kas oskad aru saada, millise raja jaoks see tehtud on?

Starship Technologies pakirobotid 2

Läksime teist korda Starship Technologies kontorisse pakiroboteid vaatama, kuna ühe korraga me ei oleks sinna ära mahtunud. Seegi kord võeti meid kohe ukse peal rõõmsalt vastu, aga eelmise korra kolmas korrus oli asendunud kuuenda korrusega. Selgus, et nad olid vahepeal kolinud ja nüüd oli meil ka võimalus nende uued ruumid üle vaadata.

Kõigepealt me tutvusimegi kohe ühe pakirobotiga. Saime teada, et see kaalub umbes 20 kg. Ja kui keegi tänaval peaks ta tahtma kaasa võtta, siis oleks see üsna keeruline. Meilgi ei õnnestunud teda kuidagi üles tõsta. See eest lugesime üle kõik sensorid ja kaamerad ning vaatasime pakiroboti sisse. Igal robotil on ka oma number. Samuti nagu autodel on registreerimisnumbrid.

Robotite ehitamise toas näidati meile ühte päris uut robotit, mis pidavat paari päeva pärast ka õue pääsema. Uuematel mudelitel olevat mõned osad juba täiesti teistsugused (näiteks kaamerad). Ka roboti peal olev kaas on nüüd valget värvi. Põhjuseks, et soojadel maadel kuuma päikese käes olles kaup üle ei kuumeneks.

Siis viidi meid ühte eriti huvitavasse tuppa. See oli nagu arstituba ja kool koos. Seal robotid harjutasid mööda tõusu üles liikuma, kuna nad peavad oskama Mercedes bussidesse sisse sõitma. Lisaks oli seal seinte ääres veel palju erivärvi ruutudega pilte, mille järgi robotid suudavad kindlaks teha erinevaid mõõtmeid. Näiteks kui suured/kõrged on kõnnitee ääred. Seda tegevust nimetati kalibreerimiseks.

Enne kui me robotite juhtimise juurde jõudsime nägime juba liftist, kuidas üks nendest tänaval sõitis. Handler ikka saatjaks kaasas.

Robotite juhtimise ruumis oli palju arvuteid, kus neid siis juhiti ja oldi ühenduses saatjatega. Üks robotitest asus samal ajal lausa Londonis. Ilm paistis seal ka päris ilus olevat.

Enne lahkumist pakuti meile veel suures koguses kommi. Selgus, et ka sealsed robotite inimesed on väga magusamaiad. Nii nagu meiegi. Seetõttu on neil alati ka kommid kontoris olemas. Jätsime meiegi omalt poolt ühe kommikarbi neile tänutäheks.

Tegime veel ettepaneku, et nad võiksid teha samasuguseid aga väiksemaid pakiroboteid. Lastele. Pultidega juhtimiseks. Nagu selgus, siis me ei olnud ainsad, kes nii arvasid. Aga neil endal olevat plaan neid roboteid veel suurematena teha, et saaks rohkem kaupa sisse panna.

Vanemate ringitund 29.03.17

LITTLE ROBOT FRIENDS

Robotsõbra erinevat värvi silmad

Kuidas panna robotsõbral silmad erinevat värvi põlema. Värvide vahetuse ajal kasutada viiteks “delay” käsku (1000 tähendab 1 sek).

#include <LittleRobotFriends.h> //import LRF library

void setup() {
// turn things on/off before we set-up
lrf.motion.disable();
lrf.hearing.disable();
lrf.touch.disable();
lrf.sight.disable();

lrf.setup(); //setup LRF library
}
void loop() {
lrf.loop(); //service LRF loop

lrf.eyes.set(0, 0, 250); //set LRF LEDs to full brightness
delay(500);
lrf.eyes.set(0, 250, 0); //set LRF LEDs to full brightness
delay(500);
lrf.eyes.set(250, 0, 0); //set LRF LEDs to full brightness
delay(500);
lrf.eyes.setColor(LRFColor_Clear); //clear LRF LEDs (turn off)
delay(500);
lrf.eyes.setLeft(250, 0, 0); //set LRF LEDs to full brightness
delay(500);
lrf.eyes.setRight(250, 0, 0); //set LRF LEDs to full brightness
delay(500);
}