sistema automático de riego de la planta utilizando un microcontrolador

0

Estoy tratando de construir un sistema automático de riego de plantas con ATmega16. Estamos utilizando el sensor de humedad YL69 para nuestro proyecto. La siguiente es la imagen del sensor de humedad que hemos utilizado.

El diagrama del circuito del proyecto es el siguiente:

El siguiente es el fragmento de código que usamos:

#include<avr/io.h>
int adc(void);
void pump(void);
int adc_value;
int main(void)
 {
  DDRC=0x01;                          //Defining PC0 as output
  ADCSRA=0x87;                    //Setting the mode of operation
  ADMUX=0x00;                     //Selection of channel and bit alignment
  while(1)
   {
     adc_value=adc();                //reading moisture level
     pump();                               //Pump activator routine
   }
   return 0;
 }

int adc(void)
{
   int lower_bits,higher_bits,result; 
   ADCSRA |= (1 << ADSC)|(1 << ADIF);  //Turn on conversion and clear flag
   while(ADCSRA & (1 << ADIF) == 0);  //wait for flag
   lower_bits=ADCL;
   higher_bits=ADCH;
   result=lower_bits|(higher_bits<<8);         //Accessing converted value by shifting
   return result;
 }

void pump(void)
 {
  if(adc_value>=700)                                //Pump ON trigger point
   {
     PORTC|=(1<<0);
   }
  else if(adc_value<=600)                        //Pump Off trigger point
   {
     PORTC&=~(1<<0);
   }
 }

¿Hay algún error en el código? Porque después de quemarlo, recibo voltaje bajo (0.15) para suelo húmedo y alto voltaje (4.84) para suelo seco de la entrada del sensor analógico, lo cual está bien ... pero el problema es que siempre estoy obteniendo voltaje en 0.7 (y algunas veces como 0.15) en PC0 en ambos casos (estoy usando un multímetro para medir esto). No hay cambios en los valores para suelo seco y húmedo en PC0 .. en tal caso, ¿dónde está el problema real? ¿Hay algo malo en el diseño del circuito o en el código? Y una cosa más, ¿puede alguien decirme la forma correcta de medir el valor de salida que estoy obteniendo de PC0 que a su vez está encendiendo / apagando la bomba?

Otra pregunta es, estoy usando el programador AVR para suministro de 5V DC. En el diseño de circuito anterior no he realizado ninguna conexión en el pin MOSI, MISO, RESET y SCK (de ATmega 16) con el programador AVR. ¿Tendré que hacer esto?

    
pregunta user5411115

1 respuesta

1

¿Ha medido este voltaje con la resistencia desconectada? Debe medirlo en relación con la GND y luego con respecto a + 5V para asegurarse. De lo contrario, es difícil determinar el pin mal configurado.

Intenta depurar tu código. Agregue 4-5 LED, ya que tiene muchos pines libres y emite los bits más altos de ADC a estos LED.

O envíe los valores de ADC a UART y léalos a través del terminal.

Por cierto, ¿por qué AVCC está conectado a +5 a través de un condensador? ¿Está seguro de que ADC funciona correctamente de esta manera?

  

En el diseño de circuito anterior no he realizado ninguna conexión en el pin MOSI, MISO, RESET y SCK (de ATmega 16) con el programador AVR. ¿Tendré que hacer esto?

No entiendo. Necesita estas conexiones cuando programe, por supuesto, pero no cuando se ejecuta :)

    
respondido por el Rodion Gorkovenko

Lea otras preguntas en las etiquetas