usar tiene que puertos puerto procedimiento probar pines para los leer entradas entrada ejemplo digitales cuantas configurar como analógicos analogo analogicos analogas analoga arduino

tiene - que es un puerto analogo en arduino



Usando entradas analógicas Arduino (4)

Estoy creando mi primer programa Arduino en el UNO r3. He jugado con el Arduino Uno antes solo con pequeños programas de ejemplo, etc. Estoy usando dos entradas analógicas para detectar la distancia usando 2 sensores láser con escala de 0-5vdc. Estas dos entradas son 0-5vdc y he asegurado la conexión a tierra común en todas partes. Los dos sensores se nombran a la izquierda y a la derecha y se ingresan a A0 y A1 respectivamente. También tengo un POT diferencial que usa un voltaje de limpiaparabrisas POT de 10K ohm como una entrada en A2. La teoría del programa es tomar el valor absoluto de la diferencia en los voltajes de entrada entre los láseres izquierdo y derecho y luego determinar si el resultado es mayor o igual que el voltaje en el pin A2 del limpiaparabrisas POT. En función de las matemáticas resultantes, encienda o apague un relé interpuesto al pin D13 a través de un circuito de transistor.

El PROBLEMA: No puedo lograr cambios precisos en el voltaje en la escala (0-1023) en los pines A0, A1 o A2. Utilicé el monitor serie para diagnosticar este problema. No estoy seguro de cuál es el problema, cualquier ayuda sería genial. Además, no puedo obtener un valor de 0 en ninguno de los pines analógicos anteriores, ¡incluso el limpiaparabrisas POT !!!

Aquí está mi código:

const int lf_dist = A0; //names A0 const int rt_dist = A1; //names A1 const int differential = A2; //names A2 const int relay = 13; // select the pin for the relay coil unsigned int left = 0; // variable to store the value coming from the left sensor unsigned int right = 0; // variable to store the value coming from the right sensor unsigned int diff = 0; // variable to store the value coming from the differential POT for maximum distance differential unsigned int offset = 0; // variable that stores the value between the two laser sensors void setup() { Serial.begin(9600); pinMode(A0, INPUT); pinMode(A1, INPUT); pinMode(A2, INPUT); pinMode(relay, OUTPUT); // declare the relay pin as an OUTPUT: analogReference(DEFAULT); } void loop() { unsigned int left = 0; // variable to store the value coming from the left sensor unsigned int right = 0; // variable to store the value coming from the right sensor unsigned int diff = 0; // variable to store the value coming from the differential POT for maximum distance differential unsigned int offset = 0; // variable that stores the value between the two laser sensors left = analogRead(A0); // read the value from the left laser delay(5); right = analogRead(A1); // read the value from the right sensor delay(5); diff = analogRead(A2); // read the value from the differential POT delay(5); offset = abs(left - right); if(offset >= diff) // does math to check if left and right distances are greater than the value clocked in by the differential POT { digitalWrite(relay, LOW); // turns off the relay, opens the stop circuit, and turns on the yellow light } else { digitalWrite(relay, HIGH); // turns on the relay if all is good, and that keeps the machine running } Serial.print("/n left = " ); Serial.print(left); Serial.print("/n right = " ); Serial.print(right); Serial.print("/n differential = " ); Serial.print(diff); delay(1000); }


La corriente mínima en la que arduino se hunde durante el muestreo desde el potenciómetro no debe perturbar los voltios de entrada abiertos reales en el limpiador.


afaict, esto debería ser debido a los pasadores flotantes que rodean los pines de medición, teniendo valores erráticos, por lo tanto, perturbar sus medidas. Debería ver sus valores usando arduinoscope , que le mostrará los efectos de interferencia de los otros pines flotantes en sus pines de medición.

La solución fácil para esto es conectar a tierra todos los pines de entrada analógica que no esté utilizando, y poner tanto espacio como sea posible entre ambas entradas, para que no interfieran entre sí.


Me doy cuenta de que este hilo no es algo antiguo, pero quizás esto ayude a alguien. Si alimentas el Arduino con solo 5V, como dices que hiciste con un regulador, obtendrás un comportamiento muy errático, particularmente desde los pines analógicos. Esto se debe a que comenzará a oscurecer los reguladores de voltaje internos que proporcionan las salidas AREF, 3.3 y 5.0. He probado esto para un proyecto de robótica en el que estoy trabajando, y justo alrededor de 6,5 voltios, todo comienza a ir mal. Supongo que si siempre proporcionó 5.0 de voltaje de entrada podría compensar este efecto, pero en mi caso usé una batería LiPo que podría oscilar entre 8.4 voltios y 6.0 voltios, y todo se vuelve loco a 6.5 voltios.


Inicialice los pines en el modo de extracción para evitar valores de basura o pines "flotantes" o use sus propios resistores desplegables en los pines :)