Saltar la navegación

Projectes

Fer girar el motor 180 graus en una direcció i retornar constantment.
aquest exemple està tret (copiat) dels exemples d'Arduino: https://www.arduino.cc/en/Tutorial/sweep

esquema sweep

Codi
/* Sweep
 by BARRAGAN <http://barraganstudio.com>
 This example code is in the public domain.

 modified 8 Nov 2013
 by Scott Fitzgerald
 http://arduino.cc/en/Tutorial/Sweep
*/

#include <Servo.h>
 
Servo myservo; 

// create servo object to control a servo
// twelve servo objects can be created on most boards
 
int pos = 0;    // variable to store the servo position
 
void setup()
{
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
}
 
void loop()
{
  for(pos = 0; pos <= 180; pos += 1) // goes from 0 degrees to 180 degrees
  {                                  // in steps of 1 degree
    myservo.write(pos);             

// tell servo to go to position in variable 'pos'
    delay(15);                      

// waits 15ms for the servo to reach the position
  }
  for(pos = 180; pos>=0; pos-=1)    

// goes from 180 degrees to 0 degrees
  {                                
    myservo.write(pos);             

// tell servo to go to position in variable 'pos'
    delay(15);                      

// waits 15ms for the servo to reach the position
  }
}

Projecte 2

Amb dos motors que fan el mateix moviment. 180 graus i tornen. Van una mica més depresa que abans

#include
 
Servo myservo1;  // create servo object to control a servo
Servo myservo2;  // a maximum of eight servo objects can be created
 
int pos = 0;    // variable to store the servo position
 
void setup()
{
  myservo1.attach(9);
  myservo2.attach(10);
  // attaches the servo on pin 9 to the servo object
}
 
 
void loop()
{
  myservo1.write(0);
  myservo2.write(0);
   delay (2000);
    myservo1.write(180);
  myservo2.write(180);
   delay (2000);
}

--------------------------------------

Segona opció:

//dos motores servo simultàneos
#include <Servo.h>
Servo myservo1; // creamos objeto Servo1
Servo myservo2; // creamos Servo2
int pos = 0;// variable donde almacenamos la posición
int angulo_paso=1;

//variable donde almacenamos el número de grados de cada paso,

//susceptible de ser modificada por bluetooth u otros mecanismos.
int espera_paso=25;

//variable donde almacenamos el tiempo que transcurre entre paso y paso

void setup()
{
myservo1.attach(9);

// número del pin de arduino donde conectamos el cable de control del servo
myservo2.attach(10);
}
void loop()
{
for(pos = 0; pos < 180; pos += angulo_paso)

// va de 0 a 180º, la variable angulo_paso1 marca los grados de cada salto
{
myservo1.write(pos);// dice al servo1 que vaya a la posición marcada por la variable 'pos'
myservo2.write(pos);// dice al servo2 que vaya a la posición marcada por la variable 'pos'
delay(espera_paso); // espera los milisegundos que le indica la variable 'espera_paso'
}
for(pos = 180; pos>=1; pos -=angulo_paso) // va de 180º a 0º
{
myservo1.write(pos); // dice al servo1 que vaya a la posición marcada por la variable 'pos'
myservo2.write(pos); // dice al servo2 que vaya a la posición marcada por la variable 'pos'
delay(espera_paso); // espera los milisegundos que le indica la variable 'espera_paso'
}

}

Projecte 3

Amb dos motors. En aquest cas un motor va en una direcció i l'altre en la contraria.
exemple "copiat" de: https://www.youtube.com/watch?v=ji1igizjHzc

#include
 
Servo myservo1;  // create servo object to control a servo
Servo myservo2;  // a maximum of eight servo objects can be created
 
int pos = 0;    // variable to store the servo position
 
void setup()
{
  myservo1.attach(9);
  myservo2.attach(10);
  // attaches the servo on pin 9 to the servo object
}
 
 
void loop()
{
  myservo1.write(0);
  myservo2.write(180);
 delay (2000);
  myservo1.write(180);
  myservo2.write(0);
   delay (2000);
}

Més informació

placa per servo

Motorservo i placa arduino
gira 180 graus (màxim) sense parar, primer dreta, despres esquerra
ull! Connectar port primer, abans d'enviar el codi ( anar a Eines i escollir PORT corresponent)

Codi:
#include
//això vol dir que incorporem una biblioteca propia
Servo myservo;
void setup() {
myservo.attach(9); //cable groc a la foto
}

void loop() {
myservo.write(0);
delay(1000);
myservo.write(180);  //es pot canviar entre 1 i 180 màxim
delay(1000);  //1 segon quiet es pot modificar
}

Modificacions

canviar angles i temps d'espera

myservo.write(90); //girar només 90

delay(3000)  //esperar 3 segons en lloc d'un

Fer el gir de 180 en dos passos, amb una etapa intermitja

#include <Servo.h>
Servo myservo;
void setup() {
myservo.attach(9);
}

void loop() {
myservo.write(0);//primer es posa a 0
delay(1000);//espera 1 segon
myservo.write(90);//fa 90 graus
delay(1000);
myservo.write(180);//fa 90 graus més per arribar als 180
delay(1000);
myservo.write(90);//torna als 90
delay(1000);
}

Canviar els passos, modificant els angles (opció d'afegir etapes)

canviar els temps d'espera

hem posat més etapes intermitges, ara va girant cada 30 graus: 30, 60, 90, 120, 150 i 180.

#include <Servo.h>
Servo myservo;

void setup() {
myservo.attach(9);
}

void loop() {
myservo.write(0);
delay(1000);
myservo.write(30);
delay(1000);
myservo.write(60);
delay(1000);
myservo.write(90);
delay(1000);

myservo.write(120);
delay(1000);

myservo.write(150);
delay(1000);

myservo.write(180);
delay(1000);

}

Possible activitat, són 7 punts que podrien ser els 7 dies de la setmana

També poden ser fraccions diferents 30 i 45 graus, per exemple. Es pot canviar els temps d'espera.

Introduir una variable

Aquesta serà la variable «retard» per no haver de anar canviant cada vegada. Serà un sol valor uniforme.
Aquesta variable es posa al principi i ajuda a no haver de fer canvis un a un

#include
Servo myservo;
int retard=1000;
void setup() {
myservo.attach(9);
}

void loop() {
myservo.write(0);
delay(retard);//aqui posem la variable i no una quantitat
myservo.write(90);
delay(retard);
myservo.write(180);
delay(retard);
myservo.write(90);
delay(retard);
}

Pràctica avançada. Regular la velocitat i les etapes

Per programació fer el recorregut de 180 de forma continua i fluida amb un control «espera_paso» a escollir i els angles de pas. La diferència entre la pràctica 1, on passava a molt ràpid, i aquesta -on va molt controlat i suau- el gir es considerable.
Aquesta pràctica incorpora dos variables: una a l'angles de pas de cada etapa (angulo_paso) i l'altre (espera_paso)

#include
Servo myservo;

int pos = 0; // variable donde almacenamos la posición inicial
int angulo_paso=1; //variable donde almacenamos el número de grados de cada paso
int espera_paso=25;//variable donde almacenamos el tiempo, en milisegundos,

void setup() {
myservo.attach(9);
}
void loop() {
for(pos = 0; pos < 180; pos += angulo_paso)
// va de 0 a 180º, la variable angulo_paso marca los grados de cada salto
{

write(pos); // dice al servo que vaya a la posición marcada por la variable 'pos'
delay(espera_paso); // espera los milisegundos que le indica la variable 'espera_paso'
}

for(pos = 180; pos>=1; pos-=angulo_paso) // va de 180º a 0º
{

myservo.write(pos); // dice al servo que vaya a la posición marcada por la variable 'pos'
delay(espera_paso); // espera los milisegundos que le indica la variable 'espera_paso'
}
}

Projecte 4

Dos motors a la vegada. Ull. Protoboard i/o regleta. de cada motor surten 3 fils: negre que van a la protoboard a la linea blava (menys-) el de color groc va  als pins 9 i 10, el de color vermell va a la linea vermella de la protoboard (més +). De la protoboard surten dos cables que van a la placa el vermell a 5V i el negre a GND. Imatge de com han d'estar els cables.

servo_02

Codi:

//dos motores servo misma velocidad
#include <Servo.h>
Servo myservo1; // creamos Servo1
Servo myservo2; // creamos Servo2
int pos = 0; // variable donde almacenamos la posición
int angulo_paso=1;
//variable donde almacenamos el número de grados de cada paso
int espera_paso=25;
/
/variable donde almacenamos el tiempo, milisegundos, que transcurre entre paso y paso
void setup()
{
myservo1.attach(9); // n pin de arduino donde conectamos el cable de control del servo
myservo2.attach(10);
}
void loop()
{
for(pos = 0; pos < 180; pos += angulo_paso)
// va de 0 a 180º, la variable angulo_paso marca los grados de cada salto
{
myservo1.write(pos);
myservo2.write(pos); // dice al servo que vaya a la posición marcada por la variable 'pos'
delay(espera_paso); // espera los milisegundos que le indica la variable 'espera_paso'
}
for(pos = 180; pos>=1; pos-=angulo_paso) // va de 180º a 0º
{
myservo1.write(pos);
myservo2.write(pos);// dice al servo que vaya a la posición marcada por la variable 'pos'
delay(espera_paso); // espera los milisegundos que le indica la variable 'espera_paso'
}
}

Regleta

Es pot emprar una regleta per evitar comprar una protoboard que és més cara.

servo_03

Projecte 5

dos servomotores programados en funcionamiento secuencia. Cuando uno acaba, el otro empieza.

//dos motores servo uno empieza cuando acaba el otro
#include <Servo.h>

Servo myservo1; // creamos Servo1
Servo myservo2; // creamos Servo2
int pos1 = 0;// variable donde almacenamos la posición
int pos2=0;
int angulo_paso1=1;
int angulo_paso2=1;

//variable donde almacenamos el número de grados de cada paso, susceptible de ser modificada por bluetooth u otros mecanismos.
int espera_paso1=25;
int espera_paso2=25;//variable donde almacenamos el tiempo, en milisegundos, que transcurre entre paso y paso
void setup()
{
myservo1.attach(9);

// número del pin de arduino donde conectamos el cable de control del servo
myservo2.attach(10);
}

void loop()
{
for(pos1 = 0; pos1 < 180; pos1 += angulo_paso1)

// va de 0 a 180º, la variable angulo_paso1 marca los grados de cada salto 
{
myservo1.write(pos1);

// dice al servo1 que vaya a la posición marcada por la variable 'pos1'
delay(espera_paso1);

// espera los milisegundos que le indica la variable 'espera_paso1'
}
for(pos2 = 0; pos2 < 180; pos2 += angulo_paso2)

// va de 0 a 180º, la variable angulo_paso2 marca los grados de cada salto
{
myservo2.write(pos2);

// dice al servo2 que vaya a la posición marcada por la variable 'pos2'
delay(espera_paso2);

// espera los milisegundos que le indica la variable 'espera_paso2'
}
for(pos1 = 180; pos1>=1; pos1-=angulo_paso1)

// va de 180º a 0º
{
myservo1.write(pos1);

// dice al servo1 que vaya a la posición marcada por la variable 'pos1'
delay(espera_paso2); // espera los milisegundos que le indica la variable 'espera_paso1'
}
for(pos2 = 180; pos2>=1; pos2-=angulo_paso2) // va de 180º a 0º
{
myservo2.write(pos2);// dice al servo que vaya a la posición marcada por la variable 'pos2'
delay(espera_paso2); // espera los milisegundos que le indica la variable 'espera_paso2'
}
}

Projecte 5 Nova versió

dos servomotores programados en funcionamiento secuencial

cuando uno acaba, el otro empieza. On/off

dos motores servo uno empieza cuando acaba el otro

codi

/*

Hace girar myservo1 un ángulo de 70 grados, espera 1 segundo y luego gira el mismo motor a 120 grados.

Del mismo modo, para hacer el mismo movimiento con myservo2 necesitas desconectar mysevo1 y conectar myservo2.

*/

#include <Servo.h>

Servo myservo1, myservo2;

void setup() {

myservo1.attach(9);

myservo2.attach(10);

}

void loop() {

myservo2.detach();

myservo1.attach(9);

myservo1.write(70); //origen del movimiento en 70

delay(1000);

myservo1.write(120); //final del giro a 120

delay(1000);

myservo1.detach();

myservo2.attach(10);

myservo2.write(70);

delay(1000);

myservo2.write(120);

delay(1000);

}