суббота, 28 мая 2016 г.

Метеостанция на 4 строчном ЖК дисплее…

Вот наконец получил и держу в руках четырех строчный LCD дисплей с I2C модулем. Дисплей выглядит впечатляющее: довольно больших размеров, и при этом на нем в каждой из четырех строк может поместиться 20 символов. Как раз более чем достаточно для нашего нового проекта. В новом проекте будем собирать многоцелевое устройство, которое может измерять атмосферное давление, температуру и влажность. Все это будет выводится на экран.

Первым делом просто подключаю дисплей к плате с нашего прошлого проекта «метео-1». Даже скетч не стал переписывать, для первого тестирования дисплея сойдет и старый. Вот подключаю четыре провода от I2C модуля, и можно приступать к тесту. Подключаю к ардуино повербанк и на экране появилась информация о температуре, давлении и влажности…

Теперь самое время заняться улучшениями. Первое что нужно сделать, так это давление выводить отдельной строкой. Добавляю в скетч пару строчек кода, тестирую… Работает! Следующим шагом нужно настроить правильный вывод размерности величин: после цифры дальше должно идти или проценты, или значок С, или мм РТ ст…


Снова работаем с программой. Скетч пришлось пару раз переделывать, так как пришлось «выловить» и исправить пару ошибок, и один недочет. Зато теперь все получилось как у настоящей метеостанции. Как говориться для начала хватит! Главное что все работает теперь как и планировалось. 
Скетч:

#include <Wire.h>
#include <Adafruit_BMP085.h>
float t;
float p;

Adafruit_BMP085 bmp;
#include <Wire.h> // Добавляем необходимые библиотеки
#include <LiquidCrystal_I2C.h>
#include "DHT.h"
#define DHTPIN A0 // к какому пину будет подключен сигнальный

//выход датчика
//выбор используемого датчика
#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT22 // DHT 22 (AM2302)
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
//инициализация датчика
DHT dht(DHTPIN, DHTTYPE);
byte degree[8] = // кодируем символ градуса
{
   B00111,
   B00101,
   B00111,
   B00000,
   B00000,
   B00000,
   B00000,
};
LiquidCrystal_I2C lcd(0x27,16,2); // Задаем адрес и размерность


void setup()
{
lcd.init(); // Инициализация lcd
lcd.backlight(); // Включаем подсветку
lcd.createChar(1, degree); // Создаем символ под номером 1
Serial.begin(9600);
dht.begin();
Serial.begin(9600);
  if (!bmp.begin()) {
  Serial.println("Could not find a valid BMP085 sensor, check wiring!");
  while (1) {}
  }
}
void loop() {
// Добавляем паузы в несколько секунд между измерениями
delay(2000);
// Reading temperature or humidity takes about 250 milliseconds!
// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
float h = dht.readHumidity();
t=bmp.readTemperature();
p=bmp.readPressure();
p=p/133.33;
p=p+8.8; // поправка
// Выводим показания влажности и температуры
lcd.setCursor(0, 0); // Устанавливаем курсор в начало 1 строки
lcd.print("Hum = "); // Выводим текст
lcd.setCursor(7, 0); // Устанавливаем курсор на 7 символ
lcd.print(h, 0); // Выводим на экран значение влажности
lcd.setCursor(12,0);
lcd.print("%");

lcd.setCursor(0, 1); // Устанавливаем курсор в начало 2 строки
lcd.print("Tem =  "); // Выводим текст, \1 - значок градуса
lcd.setCursor(7, 1); // Устанавливаем курсор на 7 символ
lcd.print(t,1); // Выводим значение температуры
lcd.setCursor(12,1);
lcd.print("C");
//delay(2500);
lcd.setCursor(0, 2); // Устанавливаем курсор в начало 1 строки
lcd.print("P = "); // Выводим текст
lcd.setCursor(4, 2); // Устанавливаем курсор на 7 символ
lcd.print(p, 1); // Выводим на экран значение давления
lcd.setCursor(10,2);
lcd.print("mm Hg ");


}

пятница, 20 мая 2016 г.

Телеграфный ключ – радиомаяк

Всем читателям привет! По-прежнему пишу в блоге, как только выпадает свободное время. А тут как говориться середина мая, дел должно быть невпроворот, но погода как всегда внесла свои коррективы. Одним словом благодаря тому, что у нас зарядили частые дожди, на даче дел не так много. Вот и время появилось. Ну и конечно же приступил к работе с ардуино.  В эфире просто пока не рискую работать: погода меняется так, что в течении дня то пасмурно, то дожди, то грозы. Но вот с ардуино можно и поработать…

Решил продолжить работу над  новым проектом:  автоматический телеграфный ключ – радиомаяк. Как раз для такого расширенного проекта не жаль будет использовать микроконтроллер ардуино. А то как то два МК  один для ключа, другой для нового маяка использовать – это будет нерационально. А вот два проекта в одном – это самое то! Так что с задачами определился и приступил к работе. Первым делом нужно  начертить схему. В проекте будут задействованы: два переменных резистора, несколько кнопок (которые работают как тумблеры), LCD дисплей. Так что первым делом разрабатываю схему. За основу взял прошлые схемы, и объединил их в одну. Так же не забыл добавить кнопку переключения режимов…

Со схемой все просто. Следующий шаг это написать скетч. Здесь конечно ушло гораздо больше времени. Хотя дело несложное: объединить коды из двух предыдущих проектов. Но не все так просто оказалось. Сначала пришлось искать ошибки компиляции. Но с этим справился. И в первой тестовой версии  решил пока что остановиться на отладке электронного ключа. То есть провести полное тестирование, и если нужно будет настройку параметров самого ключа. Вот наконец все сделал, объединенный код  (от двух прошлых проектов: ключ и маяк) скомпилировался без ошибок…Скетч можно загрузить с Яндекс диска по ссылке...

Собираю  схему на большой макетной плате. На средней было бы сложно и даже очень разместить большое количество проводов. А так благодаря начерченной в программе «Эсплан» схеме процесс сборки прототипа идет быстро и без ошибок. Да не зря тратим время на чертеж схемы. Собираю и проверяю на всякий случай правильность установленных компонентов: кнопки управления, кнопок имитирующих работу манипулятора, переменный резистор и ЖК дисплей.  На дисплей  решил пока выводить  режимы работы: «CW KEY MODE» или  «Радиомаяк».  Но сейчас важно проверить как работает первый режим:  электронный телеграфный ключ.

Все схема готова! Подключаю ардуино к ноутбуку, и записываю скетч в МК (микроконтроллер).  Все готово. ЖК экран приветливо написал соответствующий режим работы : «CW KEY MODE». Пробую переключить режим кнопкой выбора режима. Все работает: дисплей послушно отображает надписи каждого режима. В режиме маяка пока только тестовый писк. Зато ключ работает. Но пришлось немного поиграться с настройкой «отбивания» скорости и в итоге добился изменения скорости от минимума к максимуму.


На этом настройку первого режима работы  «CW KEY MODE» можно считать завершенной. Далее остается немного изменить скетч, добавив в него блок радиомаяка.  Опять выловить ошибки компиляции и можно будет сделать первую оценку всей большой работы. И если все будет работать как планировалось, то можно приступать к разработке шилда для этого проекта. Шилд  поможет правильно подключить  (благодаря шлефам) все нужные компоненты:  кнопки, ЖКИ, переменные резисторы. А еще параллельно буду решать еще задачу: поиском подходящего корпуса.

воскресенье, 15 мая 2016 г.

Управление кнопкой…

Всем читателям привет! Снова я с вами, рад очередной встрече в моем блоге. С одной стороны начать придется немного издалека. Все знают, что я уже сделал проект радиомаяк. Во второй версии радиомаяка уже можно управлять скоростью передачи и длительностью пауз после завершения цикла передачи. Так же попробовал реализовать и электронный телеграфный ключ. В общем, кто следит за блогом – тот в курсе. Наступило время, когда можно будет объединить эти проекты в один (тогда уже и ардуино плату не жалко под такое отдать на постоянную основу)…

Как это будет выглядеть? Давайте пофантазируем.  Представим коробочку с ЖК экраном, двумя регуляторами (ручки переменных резисторов), тремя кнопками (включение,  переключение режимов работы и включение-отключения звукового контроля передачи), а так же разъемами к которому можно будет подключить джек 3.5 мм (один выход на трансивер, другой вход для телеграфного манипулятора). При этом на ЖК экране в верхней строчке будет отображаться режим работы: «Beacon Mode» или «CW KEY Mode». В нижней строчке будет отображаться скорость передачи, обратный отчет времени паузы… Да идея хорошая, но теперь пожалуй пора приступить к ее реализации…

А начинать будем с банальной простой задачи: управлением кнопкой. То есть нам мало подключить кнопку к ардуино, нужно еще научить понимать МК в каком состоянии находиться кнопка (или тумблер). Таких состояний только два: включено (логическая единица) или выключено (логический ноль). А для определений этих состояний идеально подойдут цифровые входы. Они работают таким образом, что если на входе напряжение меньше 2,5 В то считается что вход имеет состояния 0 (отключено), соответственно если больше 2,5В то состояние 1 (включено).

Итак, начнем. Сначала соберем схему. Здесь все как раз просто. Обратите внимание на один важный момент: мы подключили выключатель (тумблер) не просто к пину и к земле, а через нагрузочный резистор сопротивлением 10 кОм. Это нужно чтобы избежать наводок на пине, когда он отключен от земли. Только с нагрузочным резистором у нас будет только два состояния: ноль или единица. А теперь давайте познакомимся с скетчем…
int ledPin=9;
int inputPin=5;
void setup() {
 pinMode (inputPin, INPUT); // задаем пин как вход
 pinMode (ledPin, OUTPUT); // задаем пин как выход
}

void loop() {
  int reading=digitalRead(inputPin); // считываем состояние выключателя

if (reading==0)
{
  analogWrite(9, random(255)); // если 0 то запускаем режим1 мерцания
  delay (random(100));
}
else
{
digitalWrite(9, 1);// если 1 то запускаем режим2 свечения
}
}

Вот и все. Мы добились того, что при помощи одной кнопки мы можем задавать два разных режима работы. В будущем это будет режим радиомаяка, и режим телеграфного ключа. Первый шаг к решению задачи сделан. Осталось поработать с ЖК индикатором, но этим займемся уже в следующий раз. А пока всем передаю 73!

понедельник, 9 мая 2016 г.

Тестируем все датчики походной метеостанции…

Да уже май наступил, и даже не вериться! Вот буквально отметили 1 мая, а уже 9! Так что пользуясь случаем всех поздравляю с Днем Победы. Но даже в праздник нашел немного времени, чтобы провести очень интересный тест. Да как вы уже поняли из названия будем тестировать датчики нашей метеостанции построенной на базе Ардуино...

Вообще пока что в моем проекте работают два датчика: DHT-11 (который в моем случае мерит только влажность), а так же модуль датчик атмосферного давления GY-68 (который кроме атмосферного давления еще и температуру измеряет). Настал момент, когда мы попробуем проверить точность наших датчиков.

Проверка датчика давления. Здесь просто в течении нескольких дней наблюдал и сравнивал показания барометра-анероида, и нашей цифровой метеостанции. И оказалось, что показания очень хорошо сходиться. Далее первое значение это показания анероида, второе разность показаний обеих приборов: 760-0, 763-0,5, 765-1, 767-0,4. Как говориться точностью я остался очень доволен. Так же параллельно сравнивал и температуру – точность тоже оказалась на высоте… Итак, вывод датчик GY-68 выдержал тест, и по точности можно ему поставить пять баллов.

А вот теперь пора заняться и датчиком DHT-11. Его показания будем сравнивать с расчетными значениями влажности (по психометрическим таблицам, и специальной расчётной программы) взятыми с аспирационного психрометра. Понятно что это очень точный прибор (который еще раз подтвердил что температура полученная с датчика GY-68 поразительно сходиться с показаниями ртутного термометра), поэтому я очень доверяю его показаниям.  А вот разница составила в два раза!  Значит что-то не так, это уже даже не погрешность, а ошибка.
Гипотеза ошибки наводит на два соображения, каждое из которых нужно опять таки проверять (ну что поделать наука и научный метод требуют этого). А так вполне возможно, что проблема как раз состоит в…

1.       Первая гипотеза – неисправен, бракованный сам датчик DHT-11. К счастью это можно легко проверить: у меня есть еще один такой точно датчик. Заменил его, показания абсолютно точно такие же! Значит датчик похоже исправен. Первая гипотеза похоже неверна.
2.       Вторая гипотеза – возможно библиотека датчика писалась главным образом для другого датчика (хоть и родственник нашему но все же отличаются они): DHT-22. Однако проверить такую гипотезу пока не представляется возможным, из-за отсутствия такового датчика DHT-22. Как появиться – заменим и посмотрим….
3.       Третья гипотеза – возможно сама библиотека содержит ошибку в расчетах. В этом случае ставь хоть 11 хоть 22 датчик, показания будут их не сильно отличаться. Тогда это дело можно будет исправить в скетче: просто подкорректировать значения с учетом поправки. А чтоб понять какую поправку вводить, то нужно еще понаблюдать за влажностью и каждый раз отмечать на сколько раз все отличается…

В общем как видите в результате нашего теста, появился новый фронт для исследований. Будем снова измерять, проверять данные. А еще будем ждать DHT-22, как говориться нужно отработать все гипотезы. А пока что всем удачи, и до встречи в моем блоге…


среда, 4 мая 2016 г.

Походная станция на базе ардуино…

Процесс постижения микроконтроллера Arduino идет у нас полным ходом. Как говориться когда есть новые модули и датчики, то хочется их протестировать и тут же найти им применение в новом очередном проекте. Вот и на этот раз… Нет, конечно проект далеко не новый таких проектов оказывается много, и в интернете все найти можно. Но настолько полно там «воды» что разбираться начинающим просто невероятно. Но может быть единицы разобрались и сделали…

Ладно ближе к делу. В прошлый раз мы научились выводить на LCD экран информацию с датчика DHT-11. Провели тестирование датчика в общем получилось неплохо. Но с другой стороны если делать, так делать то что действительно будет нужно. А нужна мне небольшая метеостанция, которую можно было бы взять с собой в экологическую экспедицию. К тому же модуль датчик атмосферного давления GY-68 уже так и ждет когда я его подключу к МК. Так что за дело. С чего нужно начать? Правильно с исследования датчика: как его правильно подключить, и найти нужную библиотеку. Вот здесь поджидал первый сюрприз: датчик оказывается тоже нужно подключить к пинам А4 и А5, но они вроде как уже «заняты» LCD. Попробовал найти даже готовый проект где бы данный датчик подключался через I2C к LCD экрану. Искал долго, но не нашел. Но нашел зато полезную информацию: оказывается к I2C можно подключить одновременно несколько самых разных устройств. Это уже радует. Но опять таки в интернете только одна теория: что такое I2C, как это работает. А вот практики вроде того как же подключить GY-68 через I2C включая LCD экран к Arduino нет ни слова. Даже схемы и то нет. Ладно будем действовать старым проверенным способом: метод проб и ошибок.

Но сначала нужно было еще спаять кое что. В моем случае к датчику GY-68 нужно было припаять штырьковый разъем, а если еще точнее четыре «ножки». В общем это дело простое, и любой с этим справиться. А вот дальше нужно найти библиотеку для датчика. В интернете есть много источников, но почти все эти библиотеки оказались нерабочими. Как только дело доходит до компиляции примера скетча (в самой библиотеке) так тут же всплывает и ошибки. Но все же удалось в конце концов найти и работающую библиотеку. Эта библиотека называется Adafruit_BMP085. Так же не забудьте поставить (если вы еще не установили) библиотеки: LiquidCrystal_I2C1602V1 а так же DHT-sensor-library-master. И последнее очень важно компиляцию и запись скетча в МК осуществляйте старой версией arduino-1.6.4-windows.

Первый тест был связан с проверкой и ответом на вопрос: а вообще работает ли датчик? И случайно я его при пайке не перегрел? В общем в стандартной библиотеке нашелся пример, где можно будет проверить датчик и информацию вывести в монитор порта. Все получилось! Первый шаг сделан – ура. Теперь остается самое главное: переработать (дополнить) скетч который мы с успехом применили в первом проекте. Пришлось добавить библиотеку для датчика GY-68, и написать перерасчет давления из Паскалей в наши родные миллиметры ртутного столба. Еще немного изменить скетч пришлось и в месте, где информация выводиться на экран дисплея. Скетч новый проверил на ошибки, «выловил» две ошибки, и в итоге все. Но это только скетч (загружаем его по ссылке здесь), а еще нужно правильно подключить датчик давления…

Даже не просто подключить датчик давления, но и при этом еще начертить схему. Ведь в итоге на макетной плате появиться еще один модуль и еще четыре провода нужно будет подключить. Благодаря программе sPlan, черчение заняло всего то пару минут. Теперь нужно собрать и саму схему. Присоединяю датчик к макетке, тут же подключаю провода. Да не запутаться бы. Но все пару раз проверил – все точно. А теперь будем пробовать: подключаю ардуино к компьютеру, записываю скетч в МК. Проходит загрузка, экран засветился приветливо и. Ура! Все работает! Получилось точно так, как и планировалось.

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

А теперь подведем важнейшие итоги:
·         Перед компиляцией скетча не забудьте подключить три библиотеки: Adafruit_BMP085 (датчик давления), LiquidCrystal_I2C1602V1 (работа с LCD дисплеем с I2C модулем), DHT-sensor-library-master (сенсор с которого мы будем получать только влажность, температуру мы будем получать с датчика GY-68).
·         К I2C можно одновременно подключить несколько разных устройств. В моем случая я даже не заморачивался которое из них будет «мастер», а которое «слейв». Все работает и без этих указаний. Подключите все устройства согласно схеме и все обязательно получиться.
·         Для компиляции и записи скетча (скетч метеостанции здесь) в МК используйте старую версию ардуино: arduino-1.6.4-windows. Так как в новой возникает проблема с выводом информации на дисплей: будет выводиться только один символ. Со старой версией такой проблемы нет.

Алексей Тепцов

(RN6LLV)

вторник, 3 мая 2016 г.

Простой термо-гигрометр на ардуино…

 Всем читателям привет! Рад очередной встрече на страницах блога. Сегодня мы попробуем сделать простейший прибор для измерения температуры и влажности, на базе Arduino с выводом информации на LCD экран. А начнем с того что перечислим что нам нужно будет для осуществления этого проекта: датчик влажности или температуры DHT11, LCD дисплей с I2C модулем, резистор на 10 кОм.

Как и что подключать вы без труда поймете из принципиальной схемы. Выводы датчика подключаем S на А0, питание на +5В (к плате ардуино), и минус к GND. Обратите внимание что на датчике 4 вывода, но использоваться будут только 3. Дисплей LCD подключается как и в прошлом проекте: VCC на +5, GND на GND, SDA на А4, SLC на А5.

Итак, все подключили (еще раз сверьтесь со схемой) пора заняться программированием МК. Скетч я нашел готовый в интернете, который неплохо будет работать. Сам скетч беремс яндекс диска жми сюда. Как видите все просто, можно даже и не уметь программировать на Си+, но тем не менее практически работать с МК.

Еще одно важное замечание. Перед тем как начать компиляцию, обязательно установите библиотеки (на этот раз две): DHT и LiquidCrystal_I2C. Так же эти библиотеки можно загрузить с Яндекс диска: библиотека DHT здесь, а LiquidCrystal_I2Cздесь. Вот теперь устанавливаем отсутвующие библиотеки (в стандартный набор библиотек они не входят). Если какой-то из этих библиотек вы не установили то при попытке скомпилировать будет ошибка.
Надеемся, что все у вас получилось. И в случае успеха на экране появиться температура и влажность. Убедимся, что датчик работает: можно на него подышать, и тем самым нагнать и температуру и влажность.

Скетч нашего проекта:

#include <Wire.h> // Добавляем необходимые библиотеки
#include <LiquidCrystal_I2C.h>
#include "DHT.h"
#define DHTPIN A0 // к какому пину будет подключен сигнальный выход датчика
//выбор используемого датчика
#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT22 // DHT 22 (AM2302)
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
//инициализация датчика
DHT dht(DHTPIN, DHTTYPE);
byte degree[8] = // кодируем символ градуса
{
   B00111,
   B00101,
   B00111,
   B00000,
   B00000,
   B00000,
   B00000,
};
LiquidCrystal_I2C lcd(0x27,16,2); // Задаем адрес и размерность дисплея
void setup()
{
lcd.init(); // Инициализация lcd
lcd.backlight(); // Включаем подсветку
lcd.createChar(1, degree); // Создаем символ под номером 1
Serial.begin(9600);
dht.begin();
}
void loop() {
// Добавляем паузы в несколько секунд между измерениями
delay(2000);
// Reading temperature or humidity takes about 250 milliseconds!
// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
float h = dht.readHumidity();
// Read temperature as Celsius
float t = dht.readTemperature();
// Read temperature as Fahrenheit
float f = dht.readTemperature(true);
// Выводим показания влажности и температуры
lcd.setCursor(0, 0); // Устанавливаем курсор в начало 1 строки
lcd.print("Hum = % "); // Выводим текст
lcd.setCursor(7, 0); // Устанавливаем курсор на 7 символ
lcd.print(h, 1); // Выводим на экран значение влажности
lcd.setCursor(0, 1); // Устанавливаем курсор в начало 2 строки
lcd.print("Temp = \1C "); // Выводим текст, \1 - значок градуса
lcd.setCursor(7, 1); // Устанавливаем курсор на 7 символ
lcd.print(t,1); // Выводим значение температуры
}


воскресенье, 1 мая 2016 г.

Работаем с LCD дисплеем 1602


Всем читателям привет! Рад нашей новой встрече на страницах блога. Спасибо вам что посещаете мои странички. Сегодня мы научимся работать с жидкокристаллическим дисплеем (далее LCD). Так же разберемся с некоторыми проблемами, с которыми вы можете столкнуться. А пока начнём с самого начала.


Несколько важных замечаний:
1.       Дисплеи могут отличаться количеством символов и строк. Например 1602 означает что у нас двухстрочный дисплей с длиной строки в 16 символов. 1604 означает что у нас четерехстрочный дисплей, с длиной строки в 16 символов.
2.       Мы будем работать с дисплеем с I2C модулем, благодаря чему управление LCD дисплеем будет осуществляться двумя проводами (подключенные к А4 и А5), конечно же дисплей нужно будет еще запитать двумя проводами, которые мы подключим к пинам «земля» и «+5В». Благодаря I2C модулю мы избавимся от кучи проводов!
3.       Для записи скетча в плату ардуино, мы будем пользоваться программами старых версий (1.6.4 для «Виндовс 7 или 8» и 1.6.0. для «ХР»). При использовании новой версии 1.6.7 возникает проблема – не все символы (или только один) будут выводиться на экран дисплея. Возможно что в новых версиях эту проблему исправят)… Я предлагаю использовать архив с уже готовой к работе программы (то есть не требует установки на компьютер, это важно если у вас на компостере уже установлена новая версия).
4.       У дисплея может быть другой IIC адрес, вместо 0x27 может оказаться 0x3F. Чтобы точно определить адрес можете воспользоваться «сканером». Просто запишите скетч «сканер» подключите дисплей и включите ардуино. Откройте окно «порта» и посмотрите какой адрес у вашего устройства.
5.       Для работы дисплея мы будем использовать библиотеку LiquidCrystal_I2C. Если вы используете программу из архива, то установка библиотеки не потребуется (она уже имеется в архиве).

// i2c_scanner
#include <Wire.h>
  
void setup()
{
  Wire.begin();
   Serial.begin(9600);
  while (!Serial);             // Leonardo: wait for serial monitor
  Serial.println("\nI2C Scanner");
}

 void loop()
{
  byte error, address;
  int nDevices;
   Serial.println("Scanning...");
   nDevices = 0;
  for(address = 1; address < 127; address++ )
  {
        Wire.beginTransmission(address);
    error = Wire.endTransmission();
     if (error == 0)
    {
      Serial.print("I2C device found at address 0x");
      if (address<16)
        Serial.print("0");
      Serial.print(address,HEX);
      Serial.println("  !");
       nDevices++;
    }
    else if (error==4)
    {
      Serial.print("Unknow error at address 0x");
      if (address<16)
        Serial.print("0");
      Serial.println(address,HEX);
    }   
  }
  if (nDevices == 0)
    Serial.println("No I2C devices found\n");
  else
    Serial.println("done\n");
   delay(5000);           // wait 5 seconds for next scan
}


Теперь приступим к сборке схемы. Все очень просто: нам нужно подключить 4 вывода от I2C модуля к плате ардуино. При этом подключаем выводы так: GND — GND, VCC — 5V, SDA — A4, SCL — A5. На картинках и фотографиях все предельно понятно (поэтому в этот раз мы обойдемся без схемы). Благодаря I2C плате мы можем управлять LCD двумя проводами. А вот какбы выглядела наша схема без этой "волшебной" платы:

А теперь самое время записать скетч в плату ардуино. Скетч выведет на экран «R6LCA RadioScout» а в нижней начнет отчет времени в секундах слева, а справа будет «LCD 1602». Сам скетч:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);  // Устанавливаем дисплей
void setup()
{
  lcd.init();                    
  lcd.backlight();// Включаем подсветку дисплея
  lcd.print("R6LCA RadioScout");
  lcd.setCursor(8, 1);
  lcd.print("LCD 1602");
}
void loop()
{
  // Устанавливаем курсор на вторую строку и нулевой символ.
  lcd.setCursor(0, 1);
  // Выводим на экран количество секунд с момента запуска ардуины
  lcd.print(millis()/1000);

}
Как видите все действительно просто. По крайней мере изучив материал блога, у вас точно все должно получиться. Но не будем останавливаться на таком простом примере. Ведь у нас есть датчик температуры и влажности, и даже датчик атмосферного давления. Вы наверно уже догадались над чем нам предстоит еще поработать. Так что до новых встреч!