Книга «Вивчаємо Arduino. 65 проектів своїми руками»

image чи Доводилося вам, розглядаючи який-небудь пристрій, замислюватися над тим, як воно працює в дійсності? Можливо, це був катер з дистанційним управлінням, ліфт, автомат з продажу напоїв або електронна іграшка? А може бути, вам хотілося самому створити робота, придумати електронне управління для моделі залізниці? Або у вас раптом виникало бажання організувати отримання і аналіз довгострокового прогнозу погоди? Як і з чого ви могли б почати власний проект?

Плата Arduino допоможе на практиці розкрити деякі секрети електроніки. Створена Массімо Банци і Девідом Куартиллье, система Arduino пропонує бюджетний спосіб створення інтерактивних проектів та об'єктів, таких як дистанційно керовані роботи, системи запису пройденого маршруту на основі GPS та електронні ігри.

У цій книзі огляд 65 проектів. Приклад одного проекту під катом.

Розділ 10. Сенсорні екрани
У цій главі ви:

• дізнаєтеся, як підключити резистивний сенсорний екран до плати Arduino;
• навчіться читати значення, які може повертати сенсорний екран;
• сконструіруете простий вимикач, що спрацьовує від дотику;
• сконструіруете вимикач з функцією регулювання світла.

Сенсорні екрани оточують нас з усіх боків: смартфони, планшетні комп'ютери та кишенькові ігрові пристрої. Так чому б і нам не використовувати сенсорний екран для взаємодії з користувачем?

Сенсорні екрани
Сенсорні екрани можуть коштувати дуже дорого, але ми будемо використовувати недорогу модель, що випускається компанією SparkFun (артикул LCD-08977 і BOB-09170), первісно розроблену для ігрової консолі Nintendo DS.

Цей сенсорний екран має розміри 5 х 7 см і зображено на рис. 10.1, де він змонтований на макетній платі.

image
Зверніть увагу, що сенсорний екран сполучений шлейфом з маленькою друкованою платою в правому верхньому куті (обведена на рис. 10.1). Цей адаптер використовується для з'єднання сенсорного екрану з макетної платою і Arduino; на рис. 10.2 показано збільшене зображення адаптера.

image
Підключення сенсорного екрану
Адаптер сенсорного екрану підключається до плати Arduino, як показано в табл. 10.1. Таблиця 10.1. Підключення адаптера сенсорного екрану до плати Arduino

image
Проект № 34: Визначення області торкання на сенсорному екрані
Резистивний сенсорний екран складається з скляної панелі і гнучкої пластикової мембрани, між якими розташовані два резистивного шару покриття. Одне резистивні покриття діє як вісь X, а інше — як вісь Y. Опір резистивного покриття змінюється в залежності від точки дотику, тобто, вимірюючи напругу на кожному шарі, можна визначати координати X і Y області дотику.

У цьому проекті ми з допомогою плати Arduino визначимо напругу на кожному шарі і перетворимо його в цілочисельні координати точки дотику.

Обладнання

Нижче перераховано обладнання, яке знадобиться для цього проекту:

• Сенсорний екран з адаптером.
• Один підлаштування резистор з номіналом 10 кОм.
• Один рідкокристалічний індикатор з розміром екрану 16 х 2 символи.
• Кілька відрізків дроту різної довжини.
• Одна макетна плата.
• Плата Arduino і кабель USB

Підключіть сенсорний екран у відповідності з табл. 10.1 і рідкокристалічний індикатор, як показано на рис. 7.2.

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

Проект 34 — Визначення області торкання на сенсорному екрані

#include <LiquidCrystal.h>
LiquidCrystal lcd(4,5,6,7,8,9);
int x,y = 0;
void setup()
{
lcd.begin(16,2);
lcd.clear();
}
 int readX() // повертає координату X на сенсорному екрані
{
int xr=0;
pinMode(A0, INPUT);
pinMode(A1, OUTPUT);
pinMode(A2, INPUT);
pinMode(A3, OUTPUT);
digitalWrite(A1, LOW); // подати низький рівень A1
digitalWrite(A3, HIGH); // подати високий рівень A3
delay(5);
xr=analogRead(0); // зберегти координату X
return xr;
}
 int readY() // повертає координату Y на сенсорному екрані
{
int yr=0;
pinMode(A0, OUTPUT); // A0
pinMode(A1, INPUT); // A1
pinMode(A2, OUTPUT); // A2
pinMode(A3, INPUT); // A3
digitalWrite(14, LOW); // подати низький рівень на A0
digitalWrite(16, HIGH); // подати високий рівень A2
delay(5);
yr=analogRead(1); // зберегти координату Y
return yr;
}
void loop()
{
lcd.setCursor(0,0);
 lcd.print(" x = ");
x=readX();
lcd.print(x);
y=readY();
lcd.setCursor(0,1);
 lcd.print(" y = ");
lcd.print(y);
delay (200);
}

Функції readX() і readY() ( і ) читають напруга на резистивних покриттях сенсорного екрану з допомогою analogRead() і повертають отримане значення. Скетч постійно викликає ці дві функції для забезпечення визначення координат області сенсорного екрана в режимі реального часу і їх виведення на екран РКІ ( і ). (Затримка delay(5) у кожній функції необхідна, вона дає час аналогових входів/виходів змінити свій стан.)

Тестування скетчу
В процесі тестування скетчу спостерігайте за зміною показань на екрані РКІ, виконуючи сенсорного екрану, і зверніть увагу, як змінюються значення X і Y в залежності від позиції точки дотику. Зверніть також увагу, які значення відображаються на екрані РКІ, коли ви не торкаєтеся екрану (рис. 10.3).

image
Запам'ятайте ці значення — вони стануть в нагоді вам в тому випадку, якщо у скетчі ви будете визначати факт відсутності дотики до екрану.

Калібрування сенсорного екрану
Торкнувшись сенсорного екрану в кутах, як показано на рис. 10.4, і записавши отримані значення, ви фактично откалибруете його. У найпростішому випадку координат кутів екрану буде цілком достатньо. Маючи ці значення, ви зможете поділити сенсорний екран на невеликі області і використовувати їх для управління.

image
Откалибровав сенсорний екран і поділивши його на невеликі області, ви зможете за допомогою функцій readX() і readY() визначати факт дотику до різним керуючим областях на екрані і потім використовувати інструкції if-then для виконання певних операцій, як показано в проекті 35.

Проект № 35: Двозонний вимикач
У цьому проекті ми створимо на основі сенсорного екрану простий вимикач. Для початку розділимо екран на дві зони по горизонталі, як показано на рис. 10.5: ліворуч знаходиться зона «включити», а праворуч — «вимкнути».

Порівнюючи координати точки дотику з межами зон, плата Arduino буде визначати зону, в якій відбулося торкання. Після визначення зони можна встановити високий або низький рівень напруги на цифровому виході, але в даному скетчі ми просто виведемо в монітор порту назва зони.

image
Скетч
Введіть завантажте наступний скетч:
// Проект 35 — Двозонний вимикач

int x,y = 0;
void setup()
{
Serial.begin(9600);
pinMode(10, OUTPUT);
}
void switchOn()
{
digitalWrite(10, HIGH);
Serial.print("Turned ON at X = ");
Serial.print(x);
Serial.print(" Y = ");
Serial.println(y);
delay(200);
}
void switchOff()
{
digitalWrite(10, LOW);
Serial.print("Turned OFF at X = ");
Serial.print(x);
Serial.print(" Y = ");
Serial.println(y);
delay(200);
}
int readX() // повертає координату X на сенсорному екрані
{
int xr=0;
pinMode(A0, INPUT);
pinMode(A1, OUTPUT);
pinMode(A2, INPUT);
pinMode(A3, OUTPUT);
digitalWrite(A1, LOW); // подати низький рівень A1
digitalWrite(A3, HIGH); // подати високий рівень A3
delay(5);
xr=analogRead(0);
return xr;
}
int readY() // повертає координату Y на сенсорному екрані
{
int yr=0;
pinMode(A0, OUTPUT);
pinMode(A1, INPUT);
pinMode(A2, OUTPUT);
pinMode(A3, INPUT);
digitalWrite(A0, LOW); // подати низький рівень на A0
digitalWrite(A2, HIGH); // подати високий рівень A2
delay(5);
yr=analogRead(1);
return yr;
}
void loop()
{
x=readX();
y=readY();
 // Дотик в зоні "включити"?
if (x<=900 && x>=500)
{
switchOn();
}
 // Дотик в зоні "вимкнути"?
if (x<500 && x>=100)
{
switchOff();
}
}

Принцип дії
Дві інструкції if функції void loop() визначають зону, в якій відбулося торкання. Якщо точка дотику знаходиться в лівій зоні, то дотик інтерпретується як команда «включити» . Якщо точка дотику знаходиться в правій зоні, то дотик інтерпретується як команда «вимкнути».

Примітка
Координата Y в цьому проекті ігнорується, тому що сенсорний екран умовно розбитий вертикальної кордоном на дві зони по горизонталі. Якщо б ми визначили ще й горизонтальні межі, тоді необхідно було б перевіряти і координату Y, як ми побачимо в проекті 36.

» Більш докладно з книгою можна ознайомитися на сайті видавництва
» Зміст
» Уривок

Для Хаброжителей знижка 25% по купону — Arduino За фактом оплати паперової книги відправляємо на e-mail електронну версію книги.
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.