Датчик измерения влажности почвы на ATMEGA 16/32

Датчик влажности почвы

Датчик влажности почвы представляет собой простой датчик, состоящий из двух токопроводящих пластин. Эти пластины действуют как зонд и измеряют содержание влаги в почве.

Сопротивление между двумя проводящими пластинами обратно пропорционально содержанию влаги в почве.

Это изменение сопротивления можно использовать как меру содержания влаги в почве.

Датчик используется последовательно с фиксированным сопротивлением для формирования цепи делителя напряжения. Выходной сигнал такой схемы изменяется в зависимости от содержания влаги в почве.

Выходное напряжение может обрабатываться через АЦП и использоваться в соответствии с потребностями приложения.

Для получения дополнительной информации о датчике влажности почвы и о его использовании, обратитесь к теме Датчик влажности почвы в разделе датчики и модули.

Для получения информации об АЦП в ATmega16 и о том, как его использовать, прочтите статью АЦП в AVR.

Схема подключения датчика влажности почвы к ATmega 16/32

Подключение дисплея 16 на 2 и датчик влажности почвы к Атмега 16/32
Рисунок 1. Подключение дисплея 16 на 2 и датчик влажности почвы к Атмега 16/32

Полная схема подключения датчика влажности почвы показана на рисунке выше.

Здесь мы используем модуль датчика влажности почвы, который выдает как аналоговый, так и цифровой сигнал. В примере мы будем использовать аналоговый выход этого модуля.

Выход датчика влажности почвы изменяется в диапазоне значений АЦП от 0 до 1023, а для отображения считанного значения в процентах используйте приведенные ниже формулы:

\[ \text{Аналоговый выход} = { \text{Значение АЦП} \over {1023}}\]
\[\text{Влажность в процентах} = 100 \text{ — } \text{Аналоговый выход } \times 100 \]

Для нулевой влажности мы получаем максимальное значение 10-битного АЦП. То есть значение — 1023, что, в свою очередь, дает 0% влажности.

Пример программного кода для демонстрации примера

#include <avr/io.h>
#include "LCD16x2_4bit.h"
#include <util/delay.h>
#include <stdlib.h>
#include <string.h>

void ADC_Init()
{
    DDRA=0x0;        
    ADCSRA = 0x87;            
}

int ADC_Read()
{
    ADMUX = 0x40;        
    ADCSRA |= (1 << ADSC);    
    while ((ADCSRA & (1 << ADIF))==0);    
    ADCSRA |=(1 << ADIF);    
    return(ADCW);        
}

int main(void)
{
    lcdinit();        
    lcd_clear();        
    ADC_Init();        
    char array[10];
    int adc_value;
    float moisture;

    while(1)
    {
        adc_value = ADC_Read();    
        moisture = 100-(adc_value*100.00)/1023.00; 
        lcd_gotoxy(0,0);
        lcd_print("Moisture: ");
        dtostrf(moisture,3,2,array);
        strcat(array,"%   ");    
        lcd_gotoxy(0,1);    
        lcd_print(array);    
        memset(array,0,10);
        _delay_ms(500);
    }
}

Загрузки

Где купить

  • ATMEGA16 DIP-40
  • ATMEGA32 DIP-40
  • LCD 1602
  • Датчик влажности почвы
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии