Дата публикации: Mar 03, 2013 6:16:22 PM
На днях, в рамках подготовки курса робототехники для старшеклассников, я протестировал три новых замечательных устройства:
датчик температуры DS1621;
датчик магнитного поля TLE4905L;
звукоизлучатель EFM 250A (бипер).
Эти устройства входят в собранный нами учебный комплект, на базе которого ученики будут выполнять свои робо-проекты.
Датчик температуры DS1621 позволяет проводить измерения в диапазоне от -55 до 125 градусов Цельсия. Замер температуры осуществляется каждую секунду.
Для обмена данными с микроконтроллером используется шина I2C. К сожалению, стоит этот датчик целых 162 рубля (в промэлектронике), что весьма не дешево для обычного датчика температуры.
Корпус устройства выполнен в формате DIP8. Ниже приведена схема подключения к Arduino Nano V3.0:
Для эксперимента я нашел простую программу, которая каждую секунду считывает данные с датчика и отправляет их через последовательный порт на компьютер.
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);
}
Выбранный датчик является униполярным, и может детектировать магнитное поле только в одном направлении. Датчик планируется использовать для слежения за блокировкой колес мобильного робота. Схема подключения ниже.
Тестовая программа ассоциирует выход датчика с прерыванием 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. На этот раз схему рисовать не стану, ибо подключается зуммер к любому ШИМ выходу через небольшой резистор (в моем случае 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);
}