AFON // радиотехник affonya@mail.ru
← Все проекты для дронов

ИК-дальномер (Sharp)

Чтение аналогового ИК-дальномера Sharp через АЦП.

DMC.31 · Датчики · ATmega328P

Задача

Считывать напряжение ИК-дальномера и оценивать близость препятствия.

Алгоритм

Sharp даёт нелинейное напряжение от расстояния; АЦП читает его, порог отсчётов = близко/далеко.

Исходный код (C, avr-gcc)

⇩ Скачать 31-ir-distance.c

#ifndef F_CPU
#define F_CPU 16000000UL
#endif

#include <avr/io.h>
#include <util/delay.h>
static uint16_t adc_read(uint8_t ch){
  ADMUX=(1<<REFS0)|(ch&0x0F);
  ADCSRA=(1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);
  ADCSRA|=(1<<ADSC); while(ADCSRA&(1<<ADSC)); return ADC;
}
int main(void){
  DDRB|=(1<<PB5);
  for(;;){
    uint16_t v=adc_read(4);        // ADC4
    if(v>500) PORTB|=(1<<PB5); else PORTB&=~(1<<PB5); // ближе = больше напряжение
    _delay_ms(80);
  }
}

Сборка: avr-gcc -mmcu=atmega328p -DF_CPU=16000000UL -Os файл.c -o файл.elf

Пояснения

Для физических см нужна таблица/аппроксимация под конкретную модель. Здесь — пороговая близость.