События‎ > ‎

Подключение зуммера, датчиков температуры и магнитного поля к Arduino

Отправлено 3 мар. 2013 г., 10:16 пользователем Олег Евсегнеев   [ обновлено 17 янв. 2014 г., 0:04 ]
На днях, в рамках подготовки курса робототехники для старшеклассников, я протестировал три новых замечательных устройства:
  • датчик температуры DS1621;
  • датчик магнитного поля TLE4905L;
  • звукоизлучатель EFM 250A (бипер).
Эти устройства входят в собранный нами учебный комплект, на базе которого ученики будут выполнять свои робо-проекты.

Датчик температуры DS1621

Датчик температуры DS1621 позволяет проводить измерения в диапазоне от -55 до 125 градусов Цельсия. Замер температуры осуществляется каждую секунду.
Для обмена данными с микроконтроллером используется шина I2C. К сожалению, стоит этот датчик целых 162 рубля (в промэлектронике), что весьма не дешево для обычного датчика температуры.

Корпус устройства выполнен в формате DIP8. Ниже приведена схема подключения к Arduino Nano V3.0:

DS1621 + Arduino

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

DS1621 + Arduino

#include <Wire.h>
 
#define DEV_ID 0x90 >> 1
 
 
void setup()
{
    Serial.begin(9600);
 
    Wire.begin();
    Wire.beginTransmission(DEV_ID);    // соединение с DS1621 (#0)
    Wire.write(0xAC);    // команда настройки конфигурации
    Wire.write(0x02);    // установка режима постоянных замеров температуры
    Wire.beginTransmission(DEV_ID);    // перезапуск устройства
    Wire.write(0xEE);    // запуск цикла замеров
    Wire.endTransmission();
}
 
 
void loop()
{
    int8_t firstByte;
    int8_t secondByte;
    float temp = 0;
 
    delay(1000);
 
    Wire.beginTransmission(DEV_ID);
    Wire.write(0xAA);    // команда чтения
    Wire.endTransmission();
    Wire.requestFrom(DEV_ID, 2);    // запрос двух байт для точности 0.5
 
    firstByte = Wire.read();
    secondByte = Wire.read();
 
    temp = firstByte;
 
    if (secondByte)    // если второй байт установлен, добавляем 0.5 к первому байту
        temp += 0.5;
 
    Serial.println(temp);
}

Датчик Холла TLE4905L

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

TLE4905L датчик Холла + Arduino

Тестовая программа ассоциирует выход датчика с прерыванием 0 (D2), при срабатывании которого вызывается процедура perform.

TLE4905L датчик Холла + Arduino

unsigned long pulses = 0;

void setup(){
    Serial.begin(9600);
    attachInterrupt(0, perform, RISING);
}

void loop(){
}

void perform(){
    pulses++;
    Serial.println(pulses);
}

Звукоизлучатель EFM 250A

Следующий на очереди - пьезоэлектрический зуммер EFM 250A. На этот раз схему рисовать не стану, ибо подключается зуммер к любому ШИМ выходу через небольшой резистор (в моем случае 200Ом).

Следующая программа генерирует сигнал SOS с помощью функции tone.

Зуммер EFM250A + Arduino

const byte buzzPin = 3;

void setup(){
    pinMode(buzzPin,OUTPUT);
}
void beep( int delt ){
    tone(buzzPin, 2093);
    delay(delt);
    noTone(buzzPin);
    delay(delt);
}

void loop(){
    beep(50);
    beep(50);
    beep(50);
    delay(100);
    beep(150);
    beep(150);
    beep(150);
    beep(50);
    beep(50);
    beep(50);
    delay(1000);
}

Comments