Servomotores EJERCICIOS Y RESOLUCIONES

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 12

SERVOMOTORES

1. Copiar y pegar el código en cada ejercicio y captura de pantalla de


Tinkercad o foto del circuito real, si es que usaron uno. Si alguien quiere
puede adjuntar un video también.

a. Se desea controlar un servomotor con dos pulsadores, al activar el pulsador


1 hará que el servomotor se mueva en sentido horario y activar el pulsador
2 hará que se mueva en sentido antihorario. Si ningún pulsador está
activado el servomotor estará quieto. Si pulsamos los dos pulsadores a la
vez, el servomotor debe volver a su posición 0.
Tener en cuenta lo siguiente a la hora de usar los pulsadores:
#include <Servo.h>
Servo MiservoMotor;

int boton1 = 12; int


boton2 = 10; int
posicion =0;

void setup() {
Serial.begin(9600);
MiservoMotor.attach(2);
pinMode (boton1, INPUT);
pinMode (boton2, INPUT); }
void loop() {

if (digitalRead(boton1) == HIGH)

posicion++;

if (posicion >= 180)

posicion = 180;

if (digitalRead(boton2) == HIGH)
{

posicion--;
if (posicion <= 0)

posicion = 0;

MiservoMotor.write(posicion);

delay(10);
}

a. Queremos controlar un servomotor mediante un potenciómetro, es decir al


girar el potenciómetro a la izquierda el servomotor tiene que girar hacia el
mismo lado y viceversa. Al llegar al límite izquierdo se tiene que prender un
led de un color y al llegar al límite derecho se tiene que prender otro led de
otro color.
#include<Servo.h>
Servo Servo;
int const PotPin=A0; //Potenciometro pin
int PotVal; //Potenciometro valor
int angulo; int LED1 = 8; int LED2 =
9; void setup()
{
Servo.attach(2); //Servo
Serial.begin(9600); pinMode(8,
OUTPUT); pinMode(9, OUTPUT);
}
void loop()
{
PotVal=analogRead(PotPin); //LEER EL POTENCIOMETRO
Serial.print("Valor del potenciometro:");
Serial.print(PotVal);
Serial.print("\n");
angulo=map(PotVal,0,1023,0,180); //LEER EL SERVO
Serial.print("Valor del angulo=");
Serial.println (angulo);
Servo.write(angulo); //HACER QUE EL SERVO IMITE AL
POTENCIOMETRO
delay(150);

if (angulo != 0 && angulo != 180)


{
digitalWrite(8,LOW);
digitalWrite(9,LOW);
} else if (angulo
== 180)
{
digitalWrite(8,HIGH);
digitalWrite(9,LOW);
}
else if
(angulo == 0)
{
digitalWrite(8,LOW);
digitalWrite(9,HIGH);
}
}

b. Hacer un programa en el cual tengamos un sensor de distancia, y si este


sensor capta un objeto que este a una distancia menor a 15cm un
servomotor se debe mover de 0° a 60°, y quedarse ahí mientras el sensor
capte el objeto a esta distancia, cuando deje de captar el objeto, es decir,
que este a una distancia mayor a 15cm, debe volver a 0° el servomotor.
#include <Servo.h>
int TRIG = 12; int
ECHO = 9;
Servo MiservoMotor;

void setup()
{
pinMode(TRIG, OUTPUT);
pinMode(ECHO, INPUT);
MiservoMotor.attach(3);
Serial.begin(9600);
MiservoMotor.write(0);
}
void loop()
{

if(MDistancia()<= 15){
MiservoMotor.write(60);
}

if(MDistancia()> 15){
MiservoMotor.write(0);
}

Serial.println(MDistancia()); delay(500);
}

float MDistancia(){

float t;
float d;
digitalWrite(TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG, LOW);

t = pulseIn(ECHO,
HIGH); d = t/59;
delay(50); return d;
}

c. Hacer una función que reciba como parámetro una secuencia de 3 colores y
un número de grado (tiene que ser mayor a 90°). En esa función primero se
debe poner el servo a 0 grados y se tiene que prender el primer led de
color, luego ir incrementando de a 1 grado la posición del servomotor cada
100 milisegundos y cuando llegue a la mitad del valor de los grados
enviados como parámetro a la función, se debe apagar el primer led y
prender el segundo led, y cuando llegue al número de grados enviados
apagar el segundo led y prender el tercero. Luego de esto el servomotor
debe volver a 0 grados, al llegar a 0° apagar el tercer led y que vuelva a
hacer la secuencia.
#include <Servo.h>
Servo MiservoMotor;

void setup()
{

pinMode(6, OUTPUT);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
MiservoMotor.attach(4);
Serial.begin(9600);
MiservoMotor.write(0);

void loop()
{

for(int posicion = 0; posicion <= 180; posicion++){

MiservoMotor.write(posicion);
delay(100);

if(posicion<90){
digitalWrite(6, HIGH);
digitalWrite(13, LOW);
}
if(posicion>=90 && posicion < 180){
digitalWrite(12, HIGH);
digitalWrite(6, LOW);
}
if(posicion==180){
digitalWrite(13, HIGH);
digitalWrite(12, LOW);
delay(500);
}

También podría gustarte