SlideShare una empresa de Scribd logo
1 de 11
Descargar para leer sin conexión
Robòtica 4t d’ESO Dpt de Tecnologia1
4t ESO
DOSSIER ROBÒTICA
TECNOLOGIA
COGNOMS,
NOM
GRUP
Robòtica 4t d’ESO Dpt de Tecnologia2
ROBÒTICA 4t ESO-Arduino (Processing)
Baixar el software de la pàgina Arduino.cc (http://arduino.cc/en/Main/Software)
Descarregar la darrera versió (1.0.6) (opció Windows Installer)
Instal·lar el software 1.0.6
Configurar la placa Arduino. Connectar-la amb el cable USB (rect-quadrat) a l’ordinador
Evolució dels programes
• Blink (file-examples-basics)
void setup() {
// initialize the digital pin as an output.
// Pin 13 has an LED connected on most Arduino boards:
pinMode(13, OUTPUT);
}
void loop() {
digitalWrite(13, HIGH); // set the LED on
delay(1000); // wait for a second
digitalWrite(13, LOW); // set the LED off
delay(1000); // wait for a second
}
*Variacions sobre el programa:
canviar el temps
canviar el pin
• Button (file-examples-digital)
const int buttonPin1 = 2; //He fet canvis en les noms de les tres variables
const int ledPin1 = 13;
int buttonState1 = 0;
void setup() {
pinMode(ledPin1, OUTPUT);
pinMode(buttonPin1, INPUT);
}
void loop(){
buttonState1 = digitalRead(buttonPin1);
if (buttonState1 == HIGH) {
digitalWrite(ledPin1, HIGH);
}
else {
digitalWrite(ledPin1, LOW);
} //tanquem l’else
} //tanquem el loop
*Variacions sobre el programa:
Afegir un LED. ledPin2. Al prémer el polsador, fer que un LED estigui encès l’altre estigui
apagat
Afegir un polsador. buttonPin2. Fer que cada polsador encengui un LED diferent. Què
passa quan es premen els 2 polsadors a l’hora?
Substituir els polsadors per sensors òptics
Robòtica 4t d’ESO Dpt de Tecnologia3
• LED temporitzat (variant del button)
const int buttonPin1=2;
int j; //s’ha d’afegir aquesta variable
...
if (buttonState1 == HIGH) {
for (j = 0; j <300; j++){ //inicia un comptador
digitalWrite(ledPin1, HIGH);
delay(5);
}//final del for.
}//final de l’if
...
*Variacions sobre el programa:
Canviar el valor límit de la j
Substituir els polsadors per sensors òptics. Canviar el terme interrup per optic
• 2_Polsadors_2_LEDs (variant del button)
int interrup_e=2; //els noms dels polsadors estan canviats
int interrup_d=3;
int led1=12; //els noms dels LEDs estan canviats
int led2=13;
int estat_interrup_e=0;
int estat_interrup_d=0;
void setup()
{
pinMode(interrup_e, INPUT);
pinMode(interrup_d, INPUT);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
}
void loop()
{
estat_interrup_e = digitalRead(interrup_e);
estat_interrup_d = digitalRead(interrup_d);
if (estat_interrup_e == HIGH && estat_interrup_d == LOW) {
digitalWrite(pin1, HIGH);
digitalWrite(pin2, HIGH);
delay(15);
}
else if (...s’ha de completar...) {
...s’ha de completar...
delay(15);
}
else{
digitalWrite(pin1, LOW);
digitalWrite(pin2, LOW);
delay(15);
} //tanquem l’else
} //tanquem el loop
*Variacions sobre el programa:
Fer que cada polsador encengui un LED diferent
Què passa quan es premen els 2 polsadors a l’hora ?
Substituir els polsadors per sensors òptics. Canviar el terme interrup per optic
Robòtica 4t d’ESO Dpt de Tecnologia4
• Servo_serial_read2 (moodle)
//*És útil per controlar els servos
#include <Servo.h> //Aquesta instrucció si s’escriu no funciona. Cal copiar-la d’un programa existent
Servo myservo; // create servo object to control a servo
void setup()
{
myservo.attach(11); // pin on cal punxar el senyal del Servomotor
Serial.begin(9600);
}
// la resta del programa no l’analitzem
*Utilització del programa
Obrir la finestra emergent
Provar aquests valors numèrics i picar la tecla intro. Els servos haurien de girar en un sentit,
parar-se (90) i girar en l’altre sentit
Podeu provar diferents valors.
*Provar els servos de gir limitat. Quina és la diferència?
Robòtica 4t d’ESO Dpt de Tecnologia5
• 1motor_2polsadors (moodle)
//El programa té 2 polsadors i un motor.
//Amb un polsador el motor gira en horari i amb l'altre polsador gira en antihorari
//El programa no està complet. S’ha de completar
#include <Servo.h> //Aquesta instrucció si s’escriu no funciona. Cal copiar-la d’un programa existent
Servo myservo1;
const int polsador1 = 5;
const int polsador2 = 6;
int horari=##; //valor que fa girar el servo en sentit horari
int antihorari=##; //valor que fa girar el servo en sentit antihorari
int estat_polsador1 = 0;
int estat_polsador2 = 0;
void setup()
{
myservo1.attach(9); // pin on cal punxar el senyal del Servomotor
pinMode(polsador1, INPUT);
pinMode(polsador2, INPUT);
}
void loop()
{
estat_polsador1 = digitalRead(polsador1);
estat_polsador2 = digitalRead(polsador2);
if(estat_polsador1 == HIGH){
myservo1.write(antihorari);
delay(15);
}
else if (// s’ha de completar...) {
//instrucció que fa moure el servo en l’altre sentit
delay(15);
}
else{ // en cas que no premem cap dels 2 polsadors el servo no s’ha de moure
myservo1.write(##); //valor que bloqueja el servo
delay(15);
} //tanquem l’else
} //tanquem el loop
Robòtica 4t d’ESO Dpt de Tecnologia6
• 2motors_introduccio_a_les_funcions (moodle)
//*Introducció a les funcions
#include <Servo.h>
Servo myservo1;
Servo myservo2;
int horari=20;
int antihorari=150;
void setup()
{
myservo1.attach(9);
myservo2.attach(10);
}
void endavant(){
myservo1.write(horari);
myservo2.write(antihorari);
delay(15);
}
void loop()
{
endavant();
}
*Variacions sobre el programa:
Dissenyar les funcions enrere, parar, girar_dreta, girar_esquerra. Totes per separat
• 2motors_2polsadors (variant del 2motors_introduccio_a_les_funcions, 2_Polsadors_2_LEDs i LED
temp)
//Fer que el robot actuï durant un temps concret a l’activar-se un sensor. Per exemple: Si el robot
xoca contra un obstacle fer que es desplaci una mica enrere i que giri una mica abans de tornar a
avançar
*Exercici
Afegir les variables interrup_e, interrup_d, estat_interrup_e i estat_interrup_d
Afegir en el setup pinMode(interrup_e, INPUT); i pinMode(interrup_d, INPUT);
Afegir en el loop:
• estat_interrup_e = digitalRead(interrup_e);
• estat_interrup_d = digitalRead(interrup_d);
Dissenyar el primer if:
if (estat_interrup_e == HIGH && estat_interrup_d == LOW) {
//Afegir un for
for (j = 0; j <30; j++){ //inicia un comptador
//cridar a alguna de les funcions prèviament dissenyades
}//tanquem el for
}//tanquem l’if
Dissenyar la resta d’ifs:
Tancar el loop()
• Seguidor de línia negra
*Exercici
Canviar les variables interrup_e, interrup_d per les varialbes se, sm i sd
Canviar les variables estat_interrup_e i estat_interrup_d per estat_se, estat_sm, i
estat_sd
No calen els for. Les accions a fer pel robot són “puntuals”
Dissenyar el primer if:
if (estat_se == LOW && estat_sm== LOW && estat_sd== LOW) {
//cridar a alguna de les funcions prèviament dissenyades
}//tanquem l’if
Dissenyar la resta d’ifs:
Tancar el loop()
Robòtica 4t d’ESO Dpt de Tecnologia7
• Gp2_funcio (moodle)
//funció que ens permet controlar el sensor IR
int IRpin = A5; // analog pin for reading the IR sensor
void setup() {
Serial.begin(9600); // start the serial port
}
void IR1() {
float volts = analogRead(IRpin)*0.0048828125; // value from sensor * (5/1024) - if running 3.3.volts
then change 5 to 3.3
float distance1 = (32*pow(volts, -1.10))-4; // worked out from graph 65 = theretical distance /
(1/Volts)S - luckylarry.co.uk
float distance = distance1-distance1/5;
Serial.print(distance); // print the distance
Serial.println("cm");
delay(100); // arbitary wait time.
}
void loop() {
IR1();
}
*Variacions sobre el programa:
Canviar el pin A5, per la rest de pins analògics
• IR_segueix_la_ma (variant del Gp2_funcio, 2motors_introduccio_a_les_funcions)
//Obrir un programa que contingui, la següent instrucció i canviar el nom del programa i esborrar la
resta d’instruccions
#include <Servo.h>
Servo myservo1;
Servo myservo2;
int IRpin = A5;
//Afegir les variables horari, antihorari
void setup() {
Serial.begin(9600);
//Afegir myservo1.attach(10); myservo2.attach(11);
}
//...afegir diferents funcions de moviment, també la de parar...
void IR1() {//...la resta de la funció és la mateixa fins al delay(100)...
//...
delay(100); // a partir d’aquest delay ve la modificació que cal fer
if (distance>3 && distance<20){//dissenyem la condició. Per sota de 20 cm s’activarà
Serial.println("endavant ");
endavant();}
else{
Serial.println("IR NO detecta");
parar();}
delay(5);
}
void loop() {
IR1();}
Robòtica 4t d’ESO Dpt de Tecnologia8
• Ultrasonic_3pins (file-examples-sensors-Ping)
//programa que ens permet controlar el sensor ultrasònic de 3 pins
*Exercici1
Eliminar totes les instruccions en gris (les que hi ha darrera de les //
Salvar el programa amb el nom: Ultrasonic
*Comprovar el programa
Observem que el programa ens dóna la distància en polzades i cm.
Té una precisió de fins a 2 cm. Millor que l’IR
***Els ultrasons consumeixen molta energia i fer-ne funcionar més d’un és difícil!!
*Exercici2
Eliminar les següents instruccions (els càlculs en polzades)
inches = microsecondsToInches(duration);
Serial.print(inches);
Serial.print("in, ");
long microsecondsToInches(long microseconds)
{
return microseconds / 74 / 2;
} //al tanto amb les dues claus, també s’han d’eliminar
*Comprovar el programa
*Exercici3. Transformarem el programa en una funció
Canviar: void loop() per void ultraso()
Fer un void loop() nou davant de la instrucció: long
microsecondsToCentimeters(long microseconds)
.....
void loop(){
ultraso();
}
long microsecondsToCentimeters(long microseconds)
{
return microseconds / 29 / 2;
}
*Comprovar el programa
*Salvar el programa
Robòtica 4t d’ESO Dpt de Tecnologia9
• Ultrasonic_4pins (variant del file-examples-sensors-Ping)
//programa que ens permet controlar el sensor ultrasònic de 4 pins
//És una variant del de 3 pins
*Exercici. Quins canvis hi ha amb el de 3 patilles?
const int pingPin_out = 6;
const int pingPin_in = 7;
void setup() {
// initialize serial communication:
Serial.begin(9600);
}
void loop()
{
long duration, cm;
pinMode(pingPin_out, OUTPUT);
delayMicroseconds(15);
digitalWrite(pingPin_out, HIGH);
delayMicroseconds(15);
digitalWrite(pingPin_out, LOW);
delayMicroseconds(15);
pinMode(pingPin_in, INPUT);
duration = pulseIn(pingPin_in, HIGH);
cm = microsecondsToCentimeters(duration);
Serial.print(cm);
Serial.print("cm");
Serial.println();
delay(100);
}
long microsecondsToCentimeters(long microseconds)
{
return microseconds / 29 / 2;
}
Robòtica 4t d’ESO Dpt de Tecnologia10
• Ultraso_segueix_ma (variant de l’ultrasonic, i de l’IR_segueix_ma)
Obrir el programa Ultrasonic
Obrir el programa IR_segueix_la_ma i salvar-lo amb el nom: Ultraso_segueix_ma
Copiar del programa Ultrasonic al programa Ultraso_segueix_ma les següents instruccions:
La variable const int pingPin = 6; // a la zona de les variables
la funció void ultraso() // a sota del void setup()
les instruccions
long microsecondsToCentimeters(long microseconds)
{
return microseconds / 29 / 2;
} //van al final del programa
Dissenyar la condició que analitza la distància a la que es troba la mà i fa moure el robot
if (distance>3 && distance<20){//dissenyem la condició. Per sota de 20 cm s’activarà
Serial.println("endavant ");
endavant();}
else{
Serial.println("Ultraso NO detecta");
parar();}
delay(5);
Copiar aquesta instrucció de la funció IR1 (del propi programa)
Traslladar-la darrera del delay(100) en la funció ultraso()
......
Serial.print(cm);
Serial.print("cm");
Serial.println();
delay(100);
//traslladar-la aquí!!
}
long microsecondsToCentimeters(long microseconds)
{
return microseconds / 29 / 2;
}//final del programa
*La variable distance (de l’IR1) s’ha de canviar per la variable equivalent de la funció
ultrasó. Quina és?
*Salvar el programa
*Comprovar el programa
Observarem que el robot no es mou de manera contínua. Com es pot corregir?
Robòtica 4t d’ESO Dpt de Tecnologia11
• Sumo1 (variant de 2motors_2polsadors)
//Fer que el robot avanci i que quan trobi una línia negra faci una maniobra enrere i un petit gir per
esquivar la línia
Obrir el programa 2motors_2polsadors
Canviar les variables interrup_e, interrup_d per les varialbes optic_e, optic_d
Canviar les variables estat_interrup_e i estat_interrup_d per estat_ optic_e, estat_
optic_d
• Sumo2 (variant de Sumo1 i IR_segueix_la_ma)
//afegir la funció IR1()
void loop ()
{
estat_optic_e=digitalRead(optic_e);
estat_optic_d=digitalRead(optic_d);
if (estat_optic_e==HIGH && estat_optic_d==LOW){
Serial.println("optic_e");
//cridar a alguna de les funcions prèviament dissenyades
}
else if (// la resta de combinacions...){
//cridar a alguna de les funcions prèviament dissenyades
}
else {
IR1();
}
}

Más contenido relacionado

Similar a Dossier robòtica 4t eso

Disseny d'interacció: Arduino
Disseny d'interacció: ArduinoDisseny d'interacció: Arduino
Disseny d'interacció: ArduinoJordi Zango Novell
 
Programem la placa Arduino - Presentación para la asignatura de robótica
Programem la placa Arduino - Presentación para la asignatura de robóticaProgramem la placa Arduino - Presentación para la asignatura de robótica
Programem la placa Arduino - Presentación para la asignatura de robóticaemunoz341
 
Iniciació a la Robòtica amb S4A
Iniciació a la Robòtica amb S4AIniciació a la Robòtica amb S4A
Iniciació a la Robòtica amb S4Acarlesfornas
 
Lego mindstorm by dan
Lego mindstorm by danLego mindstorm by dan
Lego mindstorm by danDan Maruoka
 
Guia ràpida de la placa Raspberry Pi
Guia ràpida de la placa Raspberry PiGuia ràpida de la placa Raspberry Pi
Guia ràpida de la placa Raspberry PiJosep Comas
 
Un tast de ROBÒTICA
Un tast de ROBÒTICAUn tast de ROBÒTICA
Un tast de ROBÒTICAEloy
 
Marcos Baldoví Disseny D'interacció Practica FInal
Marcos Baldoví Disseny D'interacció Practica FInalMarcos Baldoví Disseny D'interacció Practica FInal
Marcos Baldoví Disseny D'interacció Practica FInalMarcos Baldovi
 
Presentacio treball bricx cc alexhermoso
Presentacio treball bricx cc alexhermosoPresentacio treball bricx cc alexhermoso
Presentacio treball bricx cc alexhermosoAlex Pascual
 
Presentacio treball bricx cc alexhermoso
Presentacio treball bricx cc alexhermosoPresentacio treball bricx cc alexhermoso
Presentacio treball bricx cc alexhermosoAlex Pascual
 
OP electrònica (metodologies)
OP electrònica (metodologies)OP electrònica (metodologies)
OP electrònica (metodologies)Antoni Ubieto
 
Informàtica powerpoint
Informàtica powerpointInformàtica powerpoint
Informàtica powerpointlaurettaa_2002
 

Similar a Dossier robòtica 4t eso (20)

Programem Arduino 01. Sortides Digitals
Programem Arduino 01. Sortides DigitalsProgramem Arduino 01. Sortides Digitals
Programem Arduino 01. Sortides Digitals
 
Disseny d'interacció: Arduino
Disseny d'interacció: ArduinoDisseny d'interacció: Arduino
Disseny d'interacció: Arduino
 
Programem la placa Arduino - Presentación para la asignatura de robótica
Programem la placa Arduino - Presentación para la asignatura de robóticaProgramem la placa Arduino - Presentación para la asignatura de robótica
Programem la placa Arduino - Presentación para la asignatura de robótica
 
Iniciació a la Robòtica amb S4A
Iniciació a la Robòtica amb S4AIniciació a la Robòtica amb S4A
Iniciació a la Robòtica amb S4A
 
Ejercicios Para La Academia MARF
Ejercicios Para La Academia MARFEjercicios Para La Academia MARF
Ejercicios Para La Academia MARF
 
Lego mindstorm by dan
Lego mindstorm by danLego mindstorm by dan
Lego mindstorm by dan
 
Guia ràpida de la placa Raspberry Pi
Guia ràpida de la placa Raspberry PiGuia ràpida de la placa Raspberry Pi
Guia ràpida de la placa Raspberry Pi
 
UT6 Arduino
UT6 ArduinoUT6 Arduino
UT6 Arduino
 
Un tast de ROBÒTICA
Un tast de ROBÒTICAUn tast de ROBÒTICA
Un tast de ROBÒTICA
 
Marcos Baldoví Disseny D'interacció Practica FInal
Marcos Baldoví Disseny D'interacció Practica FInalMarcos Baldoví Disseny D'interacció Practica FInal
Marcos Baldoví Disseny D'interacció Practica FInal
 
Sistema de control
Sistema de controlSistema de control
Sistema de control
 
Presentacio treball bricx cc alexhermoso
Presentacio treball bricx cc alexhermosoPresentacio treball bricx cc alexhermoso
Presentacio treball bricx cc alexhermoso
 
jordipascualfontanilles
jordipascualfontanillesjordipascualfontanilles
jordipascualfontanilles
 
joseangelmorenasimon
joseangelmorenasimon joseangelmorenasimon
joseangelmorenasimon
 
davidcarpinteropleguezuelos
davidcarpinteropleguezuelosdavidcarpinteropleguezuelos
davidcarpinteropleguezuelos
 
Presentacio treball bricx cc alexhermoso
Presentacio treball bricx cc alexhermosoPresentacio treball bricx cc alexhermoso
Presentacio treball bricx cc alexhermoso
 
OP electrònica (metodologies)
OP electrònica (metodologies)OP electrònica (metodologies)
OP electrònica (metodologies)
 
Informàtica powerpoint
Informàtica powerpointInformàtica powerpoint
Informàtica powerpoint
 
Sistema de control
Sistema de controlSistema de control
Sistema de control
 
Metasploit framework mini how-to
Metasploit framework mini how-toMetasploit framework mini how-to
Metasploit framework mini how-to
 

Dossier robòtica 4t eso

  • 1. Robòtica 4t d’ESO Dpt de Tecnologia1 4t ESO DOSSIER ROBÒTICA TECNOLOGIA COGNOMS, NOM GRUP
  • 2. Robòtica 4t d’ESO Dpt de Tecnologia2 ROBÒTICA 4t ESO-Arduino (Processing) Baixar el software de la pàgina Arduino.cc (http://arduino.cc/en/Main/Software) Descarregar la darrera versió (1.0.6) (opció Windows Installer) Instal·lar el software 1.0.6 Configurar la placa Arduino. Connectar-la amb el cable USB (rect-quadrat) a l’ordinador Evolució dels programes • Blink (file-examples-basics) void setup() { // initialize the digital pin as an output. // Pin 13 has an LED connected on most Arduino boards: pinMode(13, OUTPUT); } void loop() { digitalWrite(13, HIGH); // set the LED on delay(1000); // wait for a second digitalWrite(13, LOW); // set the LED off delay(1000); // wait for a second } *Variacions sobre el programa: canviar el temps canviar el pin • Button (file-examples-digital) const int buttonPin1 = 2; //He fet canvis en les noms de les tres variables const int ledPin1 = 13; int buttonState1 = 0; void setup() { pinMode(ledPin1, OUTPUT); pinMode(buttonPin1, INPUT); } void loop(){ buttonState1 = digitalRead(buttonPin1); if (buttonState1 == HIGH) { digitalWrite(ledPin1, HIGH); } else { digitalWrite(ledPin1, LOW); } //tanquem l’else } //tanquem el loop *Variacions sobre el programa: Afegir un LED. ledPin2. Al prémer el polsador, fer que un LED estigui encès l’altre estigui apagat Afegir un polsador. buttonPin2. Fer que cada polsador encengui un LED diferent. Què passa quan es premen els 2 polsadors a l’hora? Substituir els polsadors per sensors òptics
  • 3. Robòtica 4t d’ESO Dpt de Tecnologia3 • LED temporitzat (variant del button) const int buttonPin1=2; int j; //s’ha d’afegir aquesta variable ... if (buttonState1 == HIGH) { for (j = 0; j <300; j++){ //inicia un comptador digitalWrite(ledPin1, HIGH); delay(5); }//final del for. }//final de l’if ... *Variacions sobre el programa: Canviar el valor límit de la j Substituir els polsadors per sensors òptics. Canviar el terme interrup per optic • 2_Polsadors_2_LEDs (variant del button) int interrup_e=2; //els noms dels polsadors estan canviats int interrup_d=3; int led1=12; //els noms dels LEDs estan canviats int led2=13; int estat_interrup_e=0; int estat_interrup_d=0; void setup() { pinMode(interrup_e, INPUT); pinMode(interrup_d, INPUT); pinMode(led1, OUTPUT); pinMode(led2, OUTPUT); } void loop() { estat_interrup_e = digitalRead(interrup_e); estat_interrup_d = digitalRead(interrup_d); if (estat_interrup_e == HIGH && estat_interrup_d == LOW) { digitalWrite(pin1, HIGH); digitalWrite(pin2, HIGH); delay(15); } else if (...s’ha de completar...) { ...s’ha de completar... delay(15); } else{ digitalWrite(pin1, LOW); digitalWrite(pin2, LOW); delay(15); } //tanquem l’else } //tanquem el loop *Variacions sobre el programa: Fer que cada polsador encengui un LED diferent Què passa quan es premen els 2 polsadors a l’hora ? Substituir els polsadors per sensors òptics. Canviar el terme interrup per optic
  • 4. Robòtica 4t d’ESO Dpt de Tecnologia4 • Servo_serial_read2 (moodle) //*És útil per controlar els servos #include <Servo.h> //Aquesta instrucció si s’escriu no funciona. Cal copiar-la d’un programa existent Servo myservo; // create servo object to control a servo void setup() { myservo.attach(11); // pin on cal punxar el senyal del Servomotor Serial.begin(9600); } // la resta del programa no l’analitzem *Utilització del programa Obrir la finestra emergent Provar aquests valors numèrics i picar la tecla intro. Els servos haurien de girar en un sentit, parar-se (90) i girar en l’altre sentit Podeu provar diferents valors. *Provar els servos de gir limitat. Quina és la diferència?
  • 5. Robòtica 4t d’ESO Dpt de Tecnologia5 • 1motor_2polsadors (moodle) //El programa té 2 polsadors i un motor. //Amb un polsador el motor gira en horari i amb l'altre polsador gira en antihorari //El programa no està complet. S’ha de completar #include <Servo.h> //Aquesta instrucció si s’escriu no funciona. Cal copiar-la d’un programa existent Servo myservo1; const int polsador1 = 5; const int polsador2 = 6; int horari=##; //valor que fa girar el servo en sentit horari int antihorari=##; //valor que fa girar el servo en sentit antihorari int estat_polsador1 = 0; int estat_polsador2 = 0; void setup() { myservo1.attach(9); // pin on cal punxar el senyal del Servomotor pinMode(polsador1, INPUT); pinMode(polsador2, INPUT); } void loop() { estat_polsador1 = digitalRead(polsador1); estat_polsador2 = digitalRead(polsador2); if(estat_polsador1 == HIGH){ myservo1.write(antihorari); delay(15); } else if (// s’ha de completar...) { //instrucció que fa moure el servo en l’altre sentit delay(15); } else{ // en cas que no premem cap dels 2 polsadors el servo no s’ha de moure myservo1.write(##); //valor que bloqueja el servo delay(15); } //tanquem l’else } //tanquem el loop
  • 6. Robòtica 4t d’ESO Dpt de Tecnologia6 • 2motors_introduccio_a_les_funcions (moodle) //*Introducció a les funcions #include <Servo.h> Servo myservo1; Servo myservo2; int horari=20; int antihorari=150; void setup() { myservo1.attach(9); myservo2.attach(10); } void endavant(){ myservo1.write(horari); myservo2.write(antihorari); delay(15); } void loop() { endavant(); } *Variacions sobre el programa: Dissenyar les funcions enrere, parar, girar_dreta, girar_esquerra. Totes per separat • 2motors_2polsadors (variant del 2motors_introduccio_a_les_funcions, 2_Polsadors_2_LEDs i LED temp) //Fer que el robot actuï durant un temps concret a l’activar-se un sensor. Per exemple: Si el robot xoca contra un obstacle fer que es desplaci una mica enrere i que giri una mica abans de tornar a avançar *Exercici Afegir les variables interrup_e, interrup_d, estat_interrup_e i estat_interrup_d Afegir en el setup pinMode(interrup_e, INPUT); i pinMode(interrup_d, INPUT); Afegir en el loop: • estat_interrup_e = digitalRead(interrup_e); • estat_interrup_d = digitalRead(interrup_d); Dissenyar el primer if: if (estat_interrup_e == HIGH && estat_interrup_d == LOW) { //Afegir un for for (j = 0; j <30; j++){ //inicia un comptador //cridar a alguna de les funcions prèviament dissenyades }//tanquem el for }//tanquem l’if Dissenyar la resta d’ifs: Tancar el loop() • Seguidor de línia negra *Exercici Canviar les variables interrup_e, interrup_d per les varialbes se, sm i sd Canviar les variables estat_interrup_e i estat_interrup_d per estat_se, estat_sm, i estat_sd No calen els for. Les accions a fer pel robot són “puntuals” Dissenyar el primer if: if (estat_se == LOW && estat_sm== LOW && estat_sd== LOW) { //cridar a alguna de les funcions prèviament dissenyades }//tanquem l’if Dissenyar la resta d’ifs: Tancar el loop()
  • 7. Robòtica 4t d’ESO Dpt de Tecnologia7 • Gp2_funcio (moodle) //funció que ens permet controlar el sensor IR int IRpin = A5; // analog pin for reading the IR sensor void setup() { Serial.begin(9600); // start the serial port } void IR1() { float volts = analogRead(IRpin)*0.0048828125; // value from sensor * (5/1024) - if running 3.3.volts then change 5 to 3.3 float distance1 = (32*pow(volts, -1.10))-4; // worked out from graph 65 = theretical distance / (1/Volts)S - luckylarry.co.uk float distance = distance1-distance1/5; Serial.print(distance); // print the distance Serial.println("cm"); delay(100); // arbitary wait time. } void loop() { IR1(); } *Variacions sobre el programa: Canviar el pin A5, per la rest de pins analògics • IR_segueix_la_ma (variant del Gp2_funcio, 2motors_introduccio_a_les_funcions) //Obrir un programa que contingui, la següent instrucció i canviar el nom del programa i esborrar la resta d’instruccions #include <Servo.h> Servo myservo1; Servo myservo2; int IRpin = A5; //Afegir les variables horari, antihorari void setup() { Serial.begin(9600); //Afegir myservo1.attach(10); myservo2.attach(11); } //...afegir diferents funcions de moviment, també la de parar... void IR1() {//...la resta de la funció és la mateixa fins al delay(100)... //... delay(100); // a partir d’aquest delay ve la modificació que cal fer if (distance>3 && distance<20){//dissenyem la condició. Per sota de 20 cm s’activarà Serial.println("endavant "); endavant();} else{ Serial.println("IR NO detecta"); parar();} delay(5); } void loop() { IR1();}
  • 8. Robòtica 4t d’ESO Dpt de Tecnologia8 • Ultrasonic_3pins (file-examples-sensors-Ping) //programa que ens permet controlar el sensor ultrasònic de 3 pins *Exercici1 Eliminar totes les instruccions en gris (les que hi ha darrera de les // Salvar el programa amb el nom: Ultrasonic *Comprovar el programa Observem que el programa ens dóna la distància en polzades i cm. Té una precisió de fins a 2 cm. Millor que l’IR ***Els ultrasons consumeixen molta energia i fer-ne funcionar més d’un és difícil!! *Exercici2 Eliminar les següents instruccions (els càlculs en polzades) inches = microsecondsToInches(duration); Serial.print(inches); Serial.print("in, "); long microsecondsToInches(long microseconds) { return microseconds / 74 / 2; } //al tanto amb les dues claus, també s’han d’eliminar *Comprovar el programa *Exercici3. Transformarem el programa en una funció Canviar: void loop() per void ultraso() Fer un void loop() nou davant de la instrucció: long microsecondsToCentimeters(long microseconds) ..... void loop(){ ultraso(); } long microsecondsToCentimeters(long microseconds) { return microseconds / 29 / 2; } *Comprovar el programa *Salvar el programa
  • 9. Robòtica 4t d’ESO Dpt de Tecnologia9 • Ultrasonic_4pins (variant del file-examples-sensors-Ping) //programa que ens permet controlar el sensor ultrasònic de 4 pins //És una variant del de 3 pins *Exercici. Quins canvis hi ha amb el de 3 patilles? const int pingPin_out = 6; const int pingPin_in = 7; void setup() { // initialize serial communication: Serial.begin(9600); } void loop() { long duration, cm; pinMode(pingPin_out, OUTPUT); delayMicroseconds(15); digitalWrite(pingPin_out, HIGH); delayMicroseconds(15); digitalWrite(pingPin_out, LOW); delayMicroseconds(15); pinMode(pingPin_in, INPUT); duration = pulseIn(pingPin_in, HIGH); cm = microsecondsToCentimeters(duration); Serial.print(cm); Serial.print("cm"); Serial.println(); delay(100); } long microsecondsToCentimeters(long microseconds) { return microseconds / 29 / 2; }
  • 10. Robòtica 4t d’ESO Dpt de Tecnologia10 • Ultraso_segueix_ma (variant de l’ultrasonic, i de l’IR_segueix_ma) Obrir el programa Ultrasonic Obrir el programa IR_segueix_la_ma i salvar-lo amb el nom: Ultraso_segueix_ma Copiar del programa Ultrasonic al programa Ultraso_segueix_ma les següents instruccions: La variable const int pingPin = 6; // a la zona de les variables la funció void ultraso() // a sota del void setup() les instruccions long microsecondsToCentimeters(long microseconds) { return microseconds / 29 / 2; } //van al final del programa Dissenyar la condició que analitza la distància a la que es troba la mà i fa moure el robot if (distance>3 && distance<20){//dissenyem la condició. Per sota de 20 cm s’activarà Serial.println("endavant "); endavant();} else{ Serial.println("Ultraso NO detecta"); parar();} delay(5); Copiar aquesta instrucció de la funció IR1 (del propi programa) Traslladar-la darrera del delay(100) en la funció ultraso() ...... Serial.print(cm); Serial.print("cm"); Serial.println(); delay(100); //traslladar-la aquí!! } long microsecondsToCentimeters(long microseconds) { return microseconds / 29 / 2; }//final del programa *La variable distance (de l’IR1) s’ha de canviar per la variable equivalent de la funció ultrasó. Quina és? *Salvar el programa *Comprovar el programa Observarem que el robot no es mou de manera contínua. Com es pot corregir?
  • 11. Robòtica 4t d’ESO Dpt de Tecnologia11 • Sumo1 (variant de 2motors_2polsadors) //Fer que el robot avanci i que quan trobi una línia negra faci una maniobra enrere i un petit gir per esquivar la línia Obrir el programa 2motors_2polsadors Canviar les variables interrup_e, interrup_d per les varialbes optic_e, optic_d Canviar les variables estat_interrup_e i estat_interrup_d per estat_ optic_e, estat_ optic_d • Sumo2 (variant de Sumo1 i IR_segueix_la_ma) //afegir la funció IR1() void loop () { estat_optic_e=digitalRead(optic_e); estat_optic_d=digitalRead(optic_d); if (estat_optic_e==HIGH && estat_optic_d==LOW){ Serial.println("optic_e"); //cridar a alguna de les funcions prèviament dissenyades } else if (// la resta de combinacions...){ //cridar a alguna de les funcions prèviament dissenyades } else { IR1(); } }