Renacuajobot: Actividades

Probamos a tarxeta

Vaite á seguinte ligazón, que ten todo moi ben explicado: Blink

Movemos un servo

Conectamos

Colle o servo de rotación continua e ponlle os cornos. Si, non son celosos, podes proceder sen preocuparte dos seus sentimentos.

Repara en que temos 3 cables, conectalos na Freaduino é moi sinxelo, fai que coincida o cable negro co pin (si, esa especie de pinchiño) negro da saída 9 e os outros encaixan de seguido. Se estás a usar un Arduino UNO orixinal, tes que coller uns cables macho-macho e conectar o cable negro ao furado que pon "GND", o vermello ao furado que pon "5V" e o branco ao pin 9.

E programamos!

Abre o Arduino IDE e vai ao exemplo "exemplos-Servo-Sweep". Cárgao e comproba o funcionamento.

Moveuse o servo? iso é que esta xente de bq vende productos fiables, sabendo que o cacharro funciona, imos ver agora como controlalo nós para que faga o que queiramos. Partindo dese mesmo exemplo "sweep" no que estabamos, imos facer unha labor de poda severa e lle imos quitar un montón de liñas que non queremos. telo que deixar en algo como esto:

#include <Servo.h>

Servo myservo;

void setup()

{

myservo.attach(9);

}

void loop()

{

myservo.write(90);

}

Cando lle subas o código, o máis normal é que vexas que o motor fai un tembloriño chungo e nada máis... será que xa se estropeou?

Localiza a liña myservo.write(90) e cambia o 90 por números entre 0 e 180. Comproba o que pasa se...

  • pos un número perto do 0

  • pos un número perto do 180

  • pos un número un chisco maior que o 90

  • pos un número un chisco menor que o 90

Xa te vas decatando? Podemos programar o arduino para que o motor se mova cara onde nós queiramos, á velocidade que queiramos! Agora ben... fainos falta ter todo isto permanentemente conectado ao ordenador? Se fose así, non sei se o noso robot podería con el, así que, se queres, proba a desconectar a placa do ordenador e a conectala ao portapilas. Sigue todo a funcionar?

Tal e como temos o programa, o motor vai andar todo o tempo a unha velocidade fixa, e sempre na mesma dirección. Con dous destes xa poderiamos facer un robot kamikaze, programado para turrar cara adiante e nunca deixar de turrar pase o que pase (bueno, cando caia da mesa igual para). Os robots kamikaze son fieis e obedientes, pero non moi intelixentes, imos tentar facer algo un pouco máis evolucionado.

Un pasiño para diante, un pasiño para atrás...

Se te fixaches un pouco cando lle cargamos o Blink ao Arduino por vez primeira, había unha instrucción no medio dos encendidos e apagados, era delay(unNumeroTirandoAGrande). Esta é unha orde que lle ten que gustar moito a un alumno, porque basicamente quere dicir "Durante o tempo que che diga, contado en milisegundos, queda como estás e non penses nada máis". Isto, para o Arduino significa que, se estaba andando, seguirá andando ese tempo, se estaba parado, seguirá parado, se estaba a medias, seguirá a medias... así que imos aproveitar esta orde para facer que o noso servo faga un movemento algo máis complexo. Copia e pega o seguinte código

#include <Servo.h>

Servo myservo;

void setup()

{

myservo.attach(9);

}

void loop()

{

myservo.write(0);

delay (2000);

myservo.write(180);

delay (2000);

myservo.write(90);

delay (2000);

}

Ves o que fai o servo? Con un programiña coma este, xa podería facer que algo andivese un cachiño nun sentido, logo noutro, que se parase... todo o que ti queiras durante o tempo que ti queiras!

Todo isto estaría xa mellor que o kamikaze, pero aínda é un robot que está "cego" ao que pasa ao seu redor... así que imos poñerlle uns ollos! (non os que parecen ollos de verdade, eses en realidade non ven nada).

Sensores: detectamos liñas negras

Conectar o sensor é tamén moi doado, o proceso é o mesmo, o cable negro que coincida co pin negro 2 e os outros xa caen onde lles corresponde. Se estás a usar un Arduino UNO orixinal, o cable negro vai a GND, o vermello a 5V (vas ter que quitar o servo ou facer un empalme) e o amarelo ao 2. Fai as conexións e cárgalle o exemplo que atopas en "Archivo>Exemplos > Basicos > digitalReadSerial". Cando o cargues, verás que non fai nada, pero preme na lupiña que está arriba á dereita no IDE... que pasa?

Proba a achegar o sensor a unha superficie branca e logo a unha superficie negra (un cacho de cinta illante negra sobre unha cartulina branca é moi boa opción). Ves que vaia cambiando algo? colle un desparafusador finiño e axusta a sensibilidade do sensor.

Controlamos o motor

Xa temos uns ollos! Bon, ollos non son, pero polo menos distinguen o branco do negro, e iso é o que precisamos para seguir unha liña ben seguida! Agora imos ter conectado ao mesmo tempo o servo e o sensor, e imos facer que interactúen... (Se tes un Arduino UNO orixinal, a montaxe é un chisco máis complexa, dille ao teu profe que che explique como xuntar dous cables para conectar as liñas de alimentación (vermellas) do servo e máis o sensor no único pin de 5V do que dispós.)

Fai as conexións e carga o seguinte código

#include <Servo.h>

Servo myservo;

void setup()

{

myservo.attach(9);

pinMode(2,INPUT);

}

void loop()

{

int colorSensor=digitalRead(2);

if (colorSensor==1) {

myservo.write(180);

}

else {

myservo.write(90);

}

delay (10);

}

Que che parece? xa temos algo que nos detecta se estamos enriba dunha superficie branca ou dunha superficie negra... e podemos facer que un motor se comporte de xeito diferente segundo o caso... que cres que poderás facer con iso?

4 - Ler dous sensores

Servo myservo;

void setup()

{

myservo.attach(9);

pinMode(2,INPUT);

pinMode(3,INPUT);

Serial.begin(9600);

}

void loop()

{

int colorSensorE=digitalRead(2);

int colorSensorD=digitalRead(3);

if (colorSensorE==1 && colorSensorD==1) {

Serial.println("adiante");

}

else if (colorSensorE==1 && colorSensorD==0){

Serial.println("xiro dereita");

}

else if (colorSensorE==0 && colorSensorD==1){

Serial.println("xiro esquerda");

}

delay (10);

}

Movemos o robot:

#include <Servo.h>

Servo servoE;

Servo servoD;

void setup(){

servoE.attach(9);

servoD.attach(10);

}

void loop() {

adiante(2000);

para(2000);

atras (2000);

para(2000);

}

void adiante(int tempo) {

servoE.write(0);

servoD.write(180);

delay(tempo);

}

void atras(int tempo) {

servoE.write(180);

servoD.write(0);

delay(tempo);

}

void para(int tempo) {

servoE.write(90);

servoD.write(90);

delay(tempo);

}

5 - Colocamos os sensores: Seguir a liña.

#include <Servo.h>

Servo servoE;

Servo servoD;

int colorSensorE;

int colorSensorD;

void setup(){

servoE.attach(9);

servoD.attach(10);

pinMode(2,INPUT);

pinMode(3,INPUT);

}

void loop() {

ler();

if (colorSensorE==1 && colorSensorD==1){

adiante(100);

}

else if(colorSensorE==0 && colorSensorD==1){

xiraE(100);

}

else if(colorSensorE==1 && colorSensorD==0){

xiraD(100);

}

}

void adiante(int tempo) {

servoE.write(0);

servoD.write(180);

delay(tempo);

}

void xiraE(int tempo) {

servoE.write(180);

servoD.write(180);

delay(tempo);

}

void xiraD(int tempo) {

servoE.write(0);

servoD.write(0);

delay(tempo);

}

void atras(int tempo) {

servoE.write(180);

servoD.write(0);

delay(tempo);

}

void para(int tempo) {

servoE.write(90);

servoD.write(90);

delay(tempo);

}

void ler(){

colorSensorE=digitalRead(2);

colorSensorD=digitalRead(3);

delay(10);

}