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
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);
delay (2000);
myservo1.write(180);
myservo2.write(0);
delay (2000);
}
Més informació
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
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
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.
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.
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);
}
Obra publicada con Licencia Creative Commons Reconocimiento Compartir igual 4.0