Hacer funcionar un servomotor con el pulso de un sensor infrarrojo

Hola, lo que pasa es que necesito que con la señal que mande el sensor, pueda mover un servomotor de 0 a 60(cuando llegue por primera vez la señal), 60 a 120(cuando por segunda vez llegue la señal) y 120 a 180 grados(y por tercera vez llegue la señal) y que se haga de nuevo.
Pero nose mucho de programar y se me complica combinar el sensor con el servomotor. Nose si alguien me pueda guiar o ayudar para alcanzar mi objetivo, se lo agradecería mucho.

Para comenzar dandos datos de que estas usando.
Servo que modelo. Ya lo conectaste y probaste?

Lo que tienes que hacer es solo tomar el ejemplo de la librería Servo y usar un interruptor tal que cada vez que presiones haga la tarea que mencionas sea 0-60 que llamaremos tarea1, la 2 ode 60-120 o la 3 de 120-180.

Cada vez que pulses miras incrementas un contador. Mismo que no puede tomar valores mas alla de 3 y lo pones a 0 nuevamente.

Ya tienes gran parte del código.

Ahora te falta el sensor de IR. No se que usaras como emisor IR y que usaras como receptor IR.

Eso también tiene muchas librerías pero cuando des precisiones también nosotros podremos guiarte.

1 Like

angeel666:
Pero nose mucho de programar y se me complica combinar el sensor con el servomotor.

Hola,
¿Puedes hacer funcionar el sensor y el servo por separado?
Saludos.

Se llama mot-100 es de 180 grados. Mi sensor es el tcrt500 infrarrojo. Lo uso para detectar cajas en una banda transportadora y controlar un rele para diversas funciones. Lo que quiero es que con el pulso que manda al rele, también pueda controlar el servomotor.

angeel666:
Se llama mot-100 es de 180 grados. Mi sensor es el tcrt500 infrarrojo. Lo uso para detectar cajas en una banda transportadora y controlar un rele para diversas funciones. Lo que quiero es que con el pulso que manda al rele, también pueda controlar el servomotor.

Hola,
Me despisto con los tiempos verbales:
"Lo uso para detectar cajas": ¿está funcionando?. Si lo está se agradecería (necesitaría) un esquema.
"con el pulso que manda al rele": Ídem.
Saludos.

Lo del rele si funciona, pero yo quiero que cuando el sensor detecte el objeto este controle al servomotor moviendo los grados que quiero.

Que parte no comprendiste de mi explicación del post#1?

Tomas la librería servo. Pruebas con sus ejemplos. Logras que se mueva cumpliendo los grados que has indicado.

Luego lo repites con un pulsador y cada vez que pulses haga cada movimiento.
Y finalmente repites con el sensor Infrarrojo con el que previamente has aprendido a detectar que tienes o no algo que lo atraviese.

Probé con este código y con el botón funcionaba, pero con el sensor no me funciono.

#include <Servo.h>
const int sensor = 8;
const int servoPin = 3;
Servo servo;
int counter = 0;
void setup() { 
 servo.attach (servoPin);
  pinMode(sensor, INPUT); 
  Serial.begin(9600);
}

void loop() {
 Serial.print("inicio de programa ");
 Serial.println(counter);
int sensorState;
   sensorState = digitalRead(buttonPin);
   if (sensorState == LOW)
   {
   counter++;
   delay(1000);
 }
  if(counter == 0)
   servo.write (0);
   else if(counter == 1)
   servo.write(60);
 else if(counter == 2)
   servo.write (120); 
 else if(counter == 3)  
   servo.write (180);
   else
  counter = 0;
}

Una pregunta: has leído algún hilo además del tuyo? Lo pregunto porque en todos los hilos que lees un código ves que estan posteados con etiquetas. Y tu colocas un texto plano sin formatear y sin haber leído las normas.
Se que eres nuevo pero todo usuario nuevo del foro debe leer las normas y aplicarlas.

Te pido por favor que edites tu post anterior y uses la etiqueta </> para que el código se lea como corresponde.

Bueno ese codigo es un buen comienzo, aunque le falta trabajo.

Te diré que esta bien, justamente el hecho que lo has hecho tu y te has esforzado. Un gran avance.

Qué esta mal? Que hay que mantener presionado el boton para que las tareas cambien y ademas que ocurren cada 1 segundo sin capacidad alguna para detenerse en una tarea en espicial.

Te voy a ayudar con una parte y esperaré a que tu sepas modificarlo con la guia que te daré para que resuelvas el problema por tu cuenta.

void loop() {
  Serial.println(counter);
  int sensorState;
  sensorState = digitalRead(buttonPin);
  if (!sensorState && sensorStateAnt) { // debes definir como global a sensorStateAnt
    counter++;
    if (counter > 2) counter = 2;          // tienes 3 tareas para que permitir que counter supere 2?
  }
  sensorStateAnt = sensorState;

Repito: define como global sensorStateAnt y de paso haría lo mismo con sensorState de modo que luego en el loop no uses int sensorState

Bien, esta trozo de código difiere del tuyo en que cada vez que presiones, estaremos viendo el flanco de bajada o sea vengo de 1 y paso a 0. Tu antes solo veías o prestabas atención a 0. Este código no. Mira cuando pasa de 1 a 0. En que cambia... que counter solo se incrementa 1 vez y no hay un delay(1000). Asi que sueltas y no pasa nada pero el resto del código seguira funcionando.

El resto del codigo ahora puede seguir ejecutandose..

puedes usar un switch(counter) y con cada case 0 case 1 y case 2 invocar el movimiento del servo que gustes.

Esa es la parte que te dejo a ti.

Si repites sensorState te dará error. Se definen una vez y te pedí que lo hagas como globales o sea antes de setup()

A ver como lo resuelves.

Buenas noches alguien me podria ayudar a conectar un sensor que solo detecta blanco y negro a un servo para que cuando el sensor detecte algo se mueva el servo me ayudaria mucho si me podrian comentar gracias

No revivas hilos con mas de 120 dias sin movimientos. Solo el autor puede. Falta 1.
Falta 2. Lo haces para preguntar algo que no tiene nada que ver con el hilo en cuestión.
Lee las normas del foro, 1er hilo de cada sección.
Este hilo permanecerá cerrado.