Главная » Статьи » Программирование » Программирование в BascomAVR

Подключаем ИК-дальномер Sharp GP2Y0A21 (10-80см)
   Чтобы подключить данный дальномер. нам потребуется ацп. Как с ним работать я уже рассказывал в статье "Тестируем АЦП на контроллере". Поэтому заострять внимания на ацп не будем. Лучше расскажу о дальномерах. Дальномеры предоставляют данные о расстояние(определение расстояния до объекта) или могут использоваться как датчик для определения препятствия. Коротенько о их работе:

   Для определения расстояния либо просто наличия объекта в поле зрения сенсора используется метод триангуляции и малая линейная CCD матрица. Основная идея в следующем. Импульсы ИК излучения испускаются излучателем. Это излучение распространяется и отражается от обьектов находящихся в поле зрения сенсора. Отраженное излучение возвращается на приемник. Испускаемый и отраженный лучи образуют треугольник «излучатель — обьект отражения — приемник». Угол отражения напрямую зависит от расстояния до обьекта. Полученные отраженные импульсы собираются высококачественной линзой и передаются на линейную CCD матрицу. По засветке определенного участка CCD матрицы определяется угол отражения и высчитывается растояние до обьекта. Этот метод более защищен от эффектов интерференции излучения и разной отражающей способности поверхностей, выполненных из различных материалов и окрашенных в различные цвета. Например, стало возможно определение черной стены при ярком освещении. Если надо будет узнать о дальномерах более подробно, то поищите по интернету.



   Характеристика на Sharp GP2Y0A21:
  • Минимальное расстояние: 10 см
  • Максимальное расстояние: 80 см
  • Напряжение питания: 4.5 - 5.5В - это очень важно!
  • Уровень сигнала: 3.1 - 0.4В
  • Потребление типовое: 33мА
  • Потребление максимальное: 50мА
  • Полный цикл измерения: 39 ms
Выходной сигнал на дальномере, аналоговый, что позволяет использовать ацп мк. Дальномер подсоединяем на ацп PA0. Программу можно взять из статьи "Тестируем АЦП на контроллере", её немного лишь дополнить нужно будет. А именно формула для расчёта сырых данных(ацп, значения от 0 до 1023). Их нужно перевести в см.

Code
Vout1 = Vout + B                                          ' (Vout+B)
Range = M / Vout1                                         ' M/(Vout+B)
Sharp_d12 = Range - K                                     ' Range = M/(Vout+B)-K

Где Vout-ацп, M,B,K-константы заданные в программе, всё остальное целочисленные переменные.

 Так как константа К=0, то некоторые строки сделаны как комментарии, если потребуются просто уберите знак " ' "
Code
$regfile = "m16def.dat"                                     ' используем ATmega16
$crystal = 16000000                                         ' частота установленного кварца 16 mHz
$lib "lcd4.lbx"     'используем 4-х битное подключение дисплея с помощью альтернативной библиотеки

Config Lcdpin = Pin , Rs = Portb.0 , E = Portb.2 , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7
Config Lcd = 20 * 4                                         'используем дисплей на 4 строчки по 20 знакомест в каждой
Config Adc = Single , Prescaler = Auto , Reference = Internal       'конфигурация АЦП

'объявляем переменные
Dim Range As Integer , Vout As Integer , Vout1 As Integer   ' , Sharp_d12 As Integer

'объявляем константы
Const M = 10000
Const K = 0
Const B = -40

Cursor Off                                                  'отключаем отображение курсора на ЖК
Cls                                                         'очитка дисплея
Locate 1 , 7 : Lcd "Enore.ru"                               'позиция курсора, выводим надпись
Locate 2 , 6 : Lcd "Sharp test" : Waitms 2000               'позиция курсора, выводим надпись, задержка 2 секунды
Cls                                                         'очитка дисплея

Do                                                          'главный цикл программы

  Start Adc                                                 'запускаем аналого-цифровое преобразование
  Vout = Getadc(0)                                          'считываем результат с пина 0 порта А.
  Stop Adc
  Vout1 = Vout + B                                          ' (Vout+B)
  Range = M / Vout1                                         ' M/(Vout+B)
  'Sharp_d12 = Range - K                                     ' Range = M/(Vout+B)-K
                                                        'очитка дисплея
  Locate 1 , 1                                              ' позиция курсора
  'Lcd "ADC(0):" ; Sharp_d12 ; " cm"                         'выводим результат преобразования на ЖК
  Locate 2 , 1                                              ' позиция курсора
  Lcd "ADC(0):" ; Vout ; " vout"                            'выводим результат преобразования на ЖК
  Locate 3 , 1                                              ' позиция курсора
  Lcd "ADC(0):" ; Vout1 ; " vout1"                          'выводим результат преобразования на ЖК
  Locate 4 , 1                                              ' позиция курсора
  Lcd "Range: " ; Range ; " cm"                             'выводим результат преобразования на ЖК
  Waitms 100                                                ' зедержка 0,1 секунды
Loop
End



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

Ссылка на следующую статью.



Источник: www.enore.ru
Категория: Программирование в BascomAVR | Добавил: Space (30.01.2011) | Автор: Кирилл E W
Просмотров: 2265 | Теги: GP2Y0A21, ик-дальномер, бампер, датчик препятствия, Sharp GP2Y0A21, инфракрасный датчик, ацп, Sharp, ик-бампер
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]