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);
}