Buenas amigos, soy nuevo en este foro de Arduino, ojala puedan echarme la mano en algunas dudas que me surgen poco a poco ya que me es necesario aprenderlo para la universidad, aun que debo decirles que ya le agarre cariño a mi Arduino UNO y tengo en mente ya algunos proyectos aun que sencillos pero buenos. Bueno al grano, estoy trabajando con un sensor ultrasonico HC-SR04 y un servomotor de 180°, estoy censando lecturas del ultrasonico con la función "map" todo bien hasta ahí, logro el objetivo que es que mi máxima distancia que detecta el sensor son 51 cm. y conforme va disminuyendo la distancia del sensor, el servo va moviendose de forma descendiente desde 90° hasta su mínimo de 0° en relación a la distancia captada del sensor hasta llegar a 0 cm, y en "monitor serie" aparecen bien las lecturas, sensor 51 y posición del servo en 90°, pero aquí mi problema, quiero que la máxima distancia de mi sensor en "map" sea de 20 cm que a partir de ahí el servo comience a disminuir su angulo, pero al cambiarle 51 por 20 cambia la proporcionalidad con la posición establecida del servo (pos=map(distancia,20,0,90,0)) y en monitor serie ya no es proporcional, me aparece 51 con 229 sel servo, ya intente cambiar valores máximos y mínimos del servo pero nada, me pareció ver que hay una formula para sacar lo proporcional al valor máximo y mínimo del sensor, pero ya me desespere, ya aplique reglas de 3 a ver si por ahí iba pero no . jeje. ojala alguien me pueda echar la mano, se que resultara algo tanto sencillo que jamas paso por mi cabeza, y de antemano les ofrezco una disculpa, jeje aquí les dejo mi código. Saludos!
#include <Ultrasonic.h>
#include <Servo.h>
Ultrasonic ultrasonic(10,A0); // (Trig PIN,Echo PIN)
Servo myservo;
int pos = 0;
long distancia=0 ;
void setup() {
Serial.begin(9600);
myservo.attach(11);
myservo.write(pos);
}
void loop() {
distancia = ultrasonic.Ranging(CM);
pos=map(distancia,51,0,90,0);
myservo.write(pos);
Serial.print("Ultrasonico=");
Serial.print(distancia);
Serial.print("\t posicion");
Serial.println(pos);
delay(100);
}