Дорогие друзья! Самовывозом можно забрать заказ после подтверждения менеджером. Пожалуйста, оформляйте заказы заранее.
(098) 067-12-26 Киевстар (098) 067-12-26   Киевстар
(066) 142-24-48 Vodafone (066) 142-24-48   Vodafone
(098) 067-12-26 Lifecell (063) 642-36-59   Lifecell
 info@arduino.ua
График работы магазина:
Пн-Пт: 9.00 - 19.00
Сб: 10.00 - 19.00
Вс: выходной
г. Киев, ул. Васильковская, 30
ст.м. "Васильковская"
Каталог

Школа робототехники intRobots

Создаём «умные устройства» на базе Arduino и Raspberry Pi

Всем, кто интересуется «умными устройствами», которые создаются на основе микроконтроллеров, будет интересно познакомиться с двумя современными столпами этих направлений аппаратной платформой Arduino и миникомпьютером Raspberry Pi. В нашей статье мы

Сборка танцующего робота

Сборка любого конструктора интересный и увлекательный процесс не только для детей но и для взрослых. Процесс увлекательный если есть подробное руководство или процесс сборки интуитивно понятен. Если же нет ни того ни другого то процесс сборки может

Доработка клеевого пистолета GlueGun 20W

Давно хотел себе приобрести мелкий клеевой пистолет. Большой есть, но обычно, пока он прогреется, то надобность в клее уже отпадает. А потом он еще и капли пускает, пока не остынет. И вот подвернулся удобный случай, GlueGun 20W всего за 35 грн. Данный

Обзор Arduino набора с UNO R3 от Keyestudio

Если вы хотите познакомиться с домашней автоматизацией, рекомендуем начать изучение этого удивительного направления мира Arduino именно с покупки датчиков в наборах. Во-первых, это обойдётся существенно дешевле, а во-вторых, вы получите полноценный

Набор расширения для платформы mBot Add-on Pack Six-legged Robot

Шестиногий робот mBot - это пакет расширения 3-в-1 на основе набора для конструирования Makeblock mBot
Напиши статью и получи скидку!

Винтажный барометр

2015-12-04

Все статьи →

Александр Чечин

Давным-давно, когда люди только-только начинали покорять космос и учились перепрыгивать через звуковой барьер, все приборы у них были стрелочные. Острый конец пляшущей стрелки исправно указывал человечеству на время, скорость, высоту, вес … Да практически на все. Цифра только-только начинала медленно выползать из секретных лабораторий в нашу обычную жизнь. А теперь? Стрелку почти не видно, она - редкость, почти музейная. Одним словом – винтаж.

Посетила меня мысль, собрать себе барометр, а какой барометр без стрелки? J – никакой. Кто будет на солнце показывать, а на облака? Корявая цифра что ли? Без стрелки барометра явно не получится.

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

Шкала двух цветов – красный и черный, вполне подходяще. Пусть стрелка показывает на красный, когда погода будет лучше, а на черный, когда грядут дожди и бури. Теоретически, в будущем, можно будет аккуратно вскрыть его пластиковый корпус и сделать новую шкалу с солнцем и облаками. Тут современный принтер поможет реализовать любую фантазию.

Начнем. Но прежде, нужно изучить поведение винтажного индикатора и его характеристики. В Интернете легко найти, что номинальный ток у таких приборов пара сотен микроампер. Цифровой pin Arduino такую нагрузку легко выдерживает. (ВНИМАНИЕ - максимальное значение тока 40 мА). Ток ограничим включением последовательно с индикатором обычного резистора на 10 кОм.

Теперь можно собирать схему. Двигать стрелкой будем при помощи ручки потенциометра, меняя напряжение на входе АЦП (analog pin 0). Индикатор подключим к цифровому выходу с ШИМ (digital pin 3).

Единственная сложность скрывается в том, что АЦП будет выдавать число, которое меняется от 0 до 1023, а для ШИМ нужно число от 0 до 255. В этом случае удобно использовать функцию map, которая предназначена для пересчета значений из одного диапазона в другой. Формат вызова функции

map(x, fromLow, fromHigh, toLow, toHigh),

где:

x – переменная хранящее значение,

fromLow – нижняя граница старого диапазона,

fromHigh – верхняя граница старого диапазона,

toLow – нижняя граница нового диапазона,

toHigh – верхняя граница нового диапазона.

Для нашего случая вызов функции будет такой - map(val, 0, 1024, 0, 255).

Скетч:

byte rez = 0; //аналоговый pin

byte indicator = 3; //цифровой pin з ШИМ

void setup() {

//включаем цифровой pin как выход

pinMode(indicator, OUTPUT);

}

int val; //для хранения данных из аналогового порта

void loop() {

val= analogRead(rez); //читаем значенние напряжения

val=map(val, 0, 1024, 0, 255); //пересчитываем диапазон

analogWrite(indicator, val); //выводим на индикатор

}

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

Теперь нужно проверить, как будет вести себя индикатор, если на него подавать сигнал от датчика давления – барометра. Изучение фотографий старинных стрелочных барометров показывает, что давление может меняться в пределах от 700 мм рт.ст. – "Буря", до 800 мм рт.ст. – "Очень сухо". Диапазон 740-760 мм рт.ст. у предков отводился под неопределенную погоду – "Переменно". На будущее, для печати облачков и солнц, составил такую таблицу:

  • 700-710 – буря
  • 710-730 – ливень
  • 730-740 – пасмурно
  • 740-760 – переменно
  • 760-770 – ясно
  • 770-780 – хорошая погода
  • 780-800 – сухая погода

Введем в скетч новую переменную Pmm, которая будет имитировать показания барометра. Числовые значения "давления" будем контролировать по последовательному порту. Пишем новый скетч:

byte rez = 0; //аналоговый pin

byte indicator = 3; //цифровой pin з ШИМ

void setup() {

//включаем последовательный порт

Serial.begin(9600);

//включаем цифровой pin как выход

pinMode(indicator, OUTPUT);

}

int val; //для хранения данных из аналогового порта

int Pmm; //для хранения данных c датчика давления

void loop() {

val = analogRead(rez); //читаем значенние напряжения

Pmm = map(val, 0, 1024, 700, 800); //пересчитываем диапазон

Serial.print("P= "); Serial.println(Pmm); //выводим "давление" в последовательный порт

val = map(Pmm, 700, 800, 0, 255); //снова пересчитываем диапазон

analogWrite(indicator, val); //выводим на индикатор

}

Включаем, открываем "Монитор порта" (Ctrl-Shift-M) и крутим ручку потенциометра. Смотрим на стрелку и значения "давления" в порту.

700 мм рт.ст. это 0 на индикаторе

800 мм рт.ст. – максимум

760 мм рт. ст. (это переход к ясной погоде) – попадает аккурат в 0 индикатора. Просто чудо! Нам явно сопутствует удача.

Теперь к индикатору будем "прикручивать" барометр.

В моей коллекции датчиков для Arduino имелся барометр BMP085, но вы можете взять и BMP180. Они отличаются только размерами, а платы, на которых они распаяны, отличаются напряжением питания. 180-й запитывается от 5В, а 085-й нужно питать (ВНИМАНИЕ!) от 3,3 В.

Оба датчика подключаются к Arduino по шине I2C, их показания можно снимать при помощи библиотеки Adafruit_BMP085, где описан соответствующий класс.

В скетче нужно подключить заголовочный файл библиотеки и объявить переменную (у меня это - press_data), через которую вы можете читать показания давления и температуры. Датчик выдает давление в Паскалях, поэтому для перевода Паскалей в привычные миллиметры ртутного столба показания нужно делить на 133,322.

Напишем небольшой скетч и отправим на данные с датчика в последовательный порт.

#include <Wire.h> //Библиотека для работы с I2C

#include <Adafruit_BMP085.h> //Библиотека для датчика давления

Adafruit_BMP085 press_data; //переменная для работы с датчиком

float Pmm; //для хранения показаний давления

float Tc; //для хранения температуры

void setup()

{

Serial.begin(9600); //инициализируем последовательный порт

press_data.begin(); //подключаемся к датчику

}

void loop()

{

Tc=press_data.readTemperature(); //читаем температуру

Pmm=press_data.readPressure()/133.322; //читаем и пересчитываем давление

//выводим в порт

Serial.print("C= ");

Serial.print(Tc);

Serial.print(" P= ");

Serial.println(Pmm);

delay(1000); //ждем 1 секунду

}

Результат работы

Теперь смело подключаем индикатор.

Возможные "забросы" давления ниже 700 и выше 800 отсечем при помощи функции constrain(), которая все числа, выходящие за указанный диапазон, заменяет на его границы. Формат вызова функции прост:

Pmm=constrain(Pmm, 700, 800);

Если Pmm станет меньше 700, например - 530, то это значение будет заменено на 700. Аналогично будет сделано и в случае если показания давления превысят 800 мм рт.ст.

#include <Wire.h>

#include <Adafruit_BMP085.h>

byte mA = 3;

int tmp;

Adafruit_BMP085 press_data;

float Pmm;

void setup()

{

press_data.begin();

pinMode(mA, OUTPUT);

}

void loop()

{

Pmm=press_data.readPressure()/133.322;

Pmm=constrain(Pmm, 700, 800);

Pmm=map(Pmm, 700, 800, 0, 255);

analogWrite(mA, Pmm);

}

В функцию Loop() можно добавить небольшую задержку, тогда стрелка будет немного подрагивать, сигнализируя вам о том, что прибор исправно работает.

Осталось упаковать все в винтажный корпус, тут каждый может проявить уже свою фантазию. Успехов!

Готовые скетчи скачать можно здесь

Ваша оценка статьи:

Отлично
Хорошо
Удовлетворительно
Плохо
Очень плохо

Общая оценка:

Оценка "Винтажный барометр"
5 из 5
сделана на основе 1 оценки 1 клиентских отзыва.

Благодарим Вас за обращение! Ваш отзыв появится после модерации администратором.
Костя
14.04.2018 17:41:04
Отлично!
оплата картами Visa и MasterCard