Урок 22.Клавиатура и кодовый замок.Часть 2

Сегодня мы рассмотрим сборку кодового замка.Рассмотрим схему:

Безымянный22

Данный замок при нажатии кодовой цифры включает светодиод на определенный промежуток времени.Запрограммируем arduino следующим кодом:

#include <Keypad.h>

const byte ROWS = 4; // четыре ряда
const byte COLS = 3; // три колонки
char keys[ROWS][COLS] = {
{‘1′,’2′,’3’},
{‘4′,’5′,’6’},
{‘7′,’8′,’9’},
{‘*’,’0′,’#’}
};
byte rowPins[ROWS] = {5, 4, 3, 2}; // подключение к строкам клавиатуры
byte colPins[COLS] = {8, 7, 6}; // подключение к столбцам клавиатуры

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

void setup(){
Serial.begin(9600);
pinMode(12, OUTPUT);
}

void loop(){
char key = keypad.getKey();

if (key){
Serial.println(key);
}
if (key == 4)//Наш код
{
// если номер совпал включим светодиод.
digitalWrite(12, HIGH);

delay(2000);

digitalWrite(12, LOW);
// и отправим сообщение.
Serial.println(«Hi elemic»);
}

Урок 21.Клавиатура.Или задел на замок.Часть 1.

В этом уроке мы рассмотрим пример работы с клавиатурой 4х4 и даже замахнемся на кодовый замок.Рассмотрим подключение клавиатуры:Безымянный21

Рассмотрим пример кода и скачаем библиотеки: https://cloud.mail.ru/public/CGsW/mQqU2XSdQ

В данном примере мы рассмотрим набор текста и вывод его в «Мониторе порта»

#include <Keypad.h>

const byte ROWS = 4; // четыре ряда
const byte COLS = 3; // три колонки
char keys[ROWS][COLS] = {
{‘1′,’2′,’3’},
{‘4′,’5′,’6’},
{‘7′,’8′,’9’},
{‘*’,’0′,’#’}
};
byte rowPins[ROWS] = {5, 4, 3, 2}; // подключение к строкам клавиатуры
byte colPins[COLS] = {8, 7, 6}; // подключение к столбцам клавиатуры

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

void setup(){
Serial.begin(9600);
}

void loop(){
char key = keypad.getKey();

if (key){
Serial.println(key);
}
}

Урок 19.Работа с часами реального времени

Рассмотрим в этом уроке работу с часами реального времени.Данный урок понадобиться нам для создание даталоггера. Устройство записывающие сигналы в зависимости от времени.Рассмотрим вывод времени с помощью

Соберем сxему:

Безымянный19
RTC DS1302 Arduino UNO
GND                  GND
VCC                   +5V
RST                     10
CLK                     13
DAT                    12

Библиотеки можно скачать тут: https://cloud.mail.ru/public/96gE/RRqfV1VCU
Запрограммируем arduino следующим кодом:

#include RTC time;// подключаем библиотеки
void setup() {
delay(300);
Serial.begin(9600);// настраиваем порт
time.begin(RTC_DS1302,10,13,12);// инициализируем модуль
}

void loop()

{

if(millis()%1000==0){ // если секунда прошла

Serial.println(time.gettime(«d-m-Y, H:i:s, D»)); // выводим данные

delay(1); // Ждем одну милисекунду чтобы избежать ошибку

} }

Удачи.Пользуйтесь на здоровье.

 

Урок 11.Ультразвуковой дальномер.Часть 2

В первом уроке мы рассмотрели измерение расстояния до объекта.Сегодня мы попробуем выводить расстояние на дисплей.Для этого нам понадобиться:

http://electromicro.ru/market/izmeritel_nye_pribory_i_instrumenty/2/  Дисплей

Соберем схему показанную на рисунке:

Безымянный11

Запрограммируем arduino следующим кодом:

int echoPin = 2; // Эхо живет на 2 пине
int trigPin = 3; // Сигнал живет на 13 пине
int duration, cm;
#include <LiquidCrystal.h> //Подключаем библиотеку для работы с LCD
LiquidCrystal lcd(12,11,7,6, 5, 4); // инициализируем LCD, указывая управляющие контакты
void setup() {
Serial.begin (9600); // Настраиваем порт.Необходимо всегда писать данную строку если хотите что либо выводить в консоль или монитор порта
pinMode(trigPin, OUTPUT); // настраиваем на выход
pinMode(echoPin, INPUT); // настраиваем на выход
lcd.begin(16, 2);// задаем размерность дисплея
lcd.print(cm); // выводим на дисплей циферки
}
void loop() {

lcd.begin(16, 2);// задаем размерность дисплея
digitalWrite(trigPin, LOW); // Подаем низкий сигнал
delayMicroseconds(2); // Ждем
digitalWrite(trigPin, HIGH); // Подаем высокий сигнал.Тем самым имитируя подачу импульса на встречу с объектом.
delayMicroseconds(10); // Ждем
digitalWrite(trigPin, LOW); // Снова низкий сигнал.
duration = pulseIn(echoPin, HIGH); // Измеряем дистанцию по отбежавшим от объекта волнам.
cm = duration / 58;// Делим на 58.Необходимо для преобразования сигнала в сантиметры
Serial.print(cm); // Выводим на экран cm
Serial.println(» cm»); // Выводим на экран cm
lcd.print(cm); // выводим на дисплей циферки
delay(100);// Ждем 100 мили секунд
}

Для работы с прошивкой необходимо установить библиотеки.Это можно сделать скачав файл  https://cloud.mail.ru/public/5rVo/AqX2oiLJ4 .Распаковав его переместите папку в папку adruno — libraries.Папка находится в установочных файлах на вашем диске.И только потом запускайте arduino ide.

Пользуйтесь на здоровье.

 

 

Урок 18.Управление серводвигателем с помощью компьютера.

Сегодня мы с помощью «Монитора порта и схемой из прошлого урока будем управлять 3 серводвигателями.Соберем схему из прошлого урока:

Безымянный17

Запрограммируем arduino cследующим кодом:

#include «Servo.h»
Servo servo1; // Создаем переменную
Servo servo2; // Создаем переменную
Servo servo3; // Создаем переменную
int val; //здесь будет храниться принятый символ

void setup()
{
servo1.attach(7);// Пин на котором находится сервопривод 1
servo2.attach(8);// Пин на котором находится сервопривод 2
servo3.attach(10); // Пин на котором находится сервопривод 3
Serial.begin(9600); //Настраиваем порт
}

void loop()
{
if (Serial.available()) { //если есть символ,
val = Serial.read(); // то читаем его
if (val == ‘Q’) { // если принят симовол ‘Q’,…
servo1.write(90); // Повернуть серво на 90 градусов.
}
}
if (Serial.available()) { //если есть принятый символ,
val = Serial.read(); // то читаем его и сохраняем в val
if (val == ‘W’) { // если принят симовол ‘W’,…
servo2.write(90); // Повернуть серво на 90 градусов.
}
}
if (Serial.available()) { //если есть символ,
val = Serial.read(); // то читаем его и сохраняем в val
if (val == ‘E’) { // если принят симовол ‘E’,…
servo3.write(90); // Повернуть серво на 90 градусов.
}
}
}

 

Радуемся и переходим к следующим урокам!

Урок 17.Управление несколькими сервоприводами

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

Соберем схему:

Безымянный17

Запрограммируем arduino следующим кодом:

#include «Servo.h»// Подключим библиотеки
Servo servo1; // Обозначим переменную
Servo servo2; // Обозначим переменную
Servo servo3; // Обозначим переменную
void setup()
{
servo1.attach(7); // Servo присоединен к 3 выводу
servo2.attach(8); // Servo присоединен к 3 выводу
servo3.attach(10); // Servo присоединен к 3 выводу
}
void loop()
{
servo1.write(0); // Повернуть серво влево на 0 градусов
delay(1000); //ждем одну секунду
servo1.write(45); // Повернуть серво влево на 45 градусов
delay(1000); //ждем одну секунду
servo1.write(90); // Повернуть серво влево на 90 градусов
delay(2000); //ждем две секунды
servo1.write(135); // Повернуть серво влево на 135 градусов
delay(2000); //ждем две секунды
servo1.write(180); // Повернуть серво влево на 180 градусов
delay(1000); //ждем одну секунду
servo2.write(0); // Повернуть серво влево на 0 градусов
delay(1000); //ждем одну секунду
servo2.write(45); // Повернуть серво влево на 45 градусов
delay(1000); //ждем одну секунду
servo2.write(90); // Повернуть серво влево на 90 градусов
delay(2000); //ждем две секунды
servo2.write(135); // Повернуть серво влево на 135 градусов
delay(2000); //ждем две секунды
servo2.write(180); // Повернуть серво влево на 180 градусов
delay(1000); //ждем одну секунду
servo3.write(0); // Повернуть серво влево на 0 градусов
delay(1000); //ждем одну секунду
servo3.write(45); // Повернуть серво влево на 45 градусов
delay(1000); //ждем одну секунду
servo3.write(90); // Повернуть серво влево на 90 градусов
delay(2000); //ждем две секунды
servo3.write(135); // Повернуть серво влево на 135 градусов
delay(2000); //ждем две секунды
servo3.write(180); // Повернуть серво влево на 180 градусов
delay(1000); //ждем одну секунду
}

Урок 16.Управления сервоприводом.

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

http://electromicro.ru/market/akkumulyatory_i_zaryadnye_ustrojstva/mikro-akkumulyator_11-97_4/

Соберем схему:

Безымянный16

Запрограммируем arduino следующим кодом:

#include «Servo.h»// Подключим библиотеки
Servo servo1; // Обозначим переменную

void setup()
{
servo1.attach(3); // Servo присоединен к 3 выводу
}
void loop()
{
servo1.write(0); // Повернуть серво влево на 0 градусов
delay(1000); //ждем одну секунду
servo1.write(45); // Повернуть серво влево на 45 градусов
delay(1000); //ждем одну секунду
servo1.write(90); // Повернуть серво влево на 90 градусов
delay(2000); //ждем две секунды
servo1.write(135); // Повернуть серво влево на 135 градусов
delay(2000); //ждем две секунды
servo1.write(180); // Повернуть серво влево на 180 градусов
delay(1000); //ждем одну секунду
}

Радуемся и продолжаем учиться!

Урок 15.Считываем данные с карт метрополитена и делаем первую полезную штуку.Часть 2

Теперь перейдем к замку.Для примера мы взяли электромагнит.

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

http://electromicro.ru/market/izmeritel_nye_pribory_i_instrumenty/tverdotel_noe_rele_24-380_v_25_a_ssr-25/

Теперь соберем схему:

Безымянный15

Перейдем к коду:

#include <SPI.h>
#include <MFRC522.h> // это библиотека «RFID».

/*
подключение для Arduino Uno и Mega, производится к разным Pin!
——————————————————
* Pin layout should be as follows:
* Signal Pin Pin Pin
* Arduino Uno Arduino Mega MFRC522 board
* ————————————————————
* Reset 9 5 RST
* SPI SS 10 53 SDA
* SPI MOSI 11 51 MOSI
* SPI MISO 12 50 MISO
* SPI SCK 13 52 SCK

*/

// два Pin (SS и RST) допускают произвольное подключение и конфигурируются в коде.
// !(SS — он же — SDA).
#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN); // объект MFRC522C / reate MFRC522 instance.
unsigned long uidDec, uidDecTemp; // для отображения номера карточки в десятичном формате

void setup() {
Serial.begin(9600); // Настраиваем порт
Serial.println(«Prilozhite kartu / Waiting for card…»);
pinMode(13, OUTPUT);
SPI.begin(); // инициализация SPI
mfrc522.PCD_Init(); // инициализация MFRC522
}
void loop() {
// Поиск новой карточки
if ( ! mfrc522.PICC_IsNewCardPresent()) {
return;
}

// Выбор карточки
if ( ! mfrc522.PICC_ReadCardSerial()) {
return;
}

uidDec = 0;

// Выдача серийного номера карточки.
for (byte i = 0; i < mfrc522.uid.size; i++)
{
uidDecTemp = mfrc522.uid.uidByte[i];
uidDec = uidDec*256+uidDecTemp;
}
Serial.println(«Serijnyj nomer karty / Card UID: «);
Serial.println(uidDec);

// начинаем сравнивать номер прочитанной корты, с записанным номером карты.
// замените! № «422455350», на номер № вашей карты.
if (uidDec == 422455350)
{
// если номер совпал включим светодиод.
digitalWrite(13, HIGH);
// и отправим сообщение.
Serial.println(«Hi Dmitry»);
}

// также и с другими номерами карт.
else if (uidDec == 959884118)
{
digitalWrite(13, HIGH);
Serial.println(«Hi Anna»);
}

else if (uidDec == 695670870)
{
digitalWrite(13, HIGH);
Serial.println(«Hi Sergey»);
}

else if (uidDec == 695670614)
{
digitalWrite(13, HIGH);
Serial.println(«Hi Sacha»);
}

else
{
digitalWrite(13, LOW);

// если номер карты не совпал, выключим реле.
Serial.println(«Neizvestnaja karta / unknown card»);
}

Serial.println(«=====================================»);
delay(1000);
// выключаем Реле.
}

Радуемся и пользуемся.

 

 

Урок 14.Считываем данные с карт метрополитена и делаем первую полезную штуку.Часть 1

Мы соберем электронный замок)))

Для начала разработки замка рассмотрим процесс считывания и почитаем данные карты метрополитена.Именно их мы и будем использовать их.Для этого нам понадобиться:

http://electromicro.ru/market/izmeritel_nye_pribory_i_instrumenty/rfid_rc522/

Библиотеки можно скачать тут: https://cloud.mail.ru/public/2ooU/aHpQGCHq8

Перейдем к схеме:

Безымянный14

Если тут не возникает вопросов.То перейдем к коду:

#include <SPI.h>
#include <MFRC522.h>

#define RST_PIN 9
#define SS_PIN 10

MFRC522 mfrc522(SS_PIN, RST_PIN); // Создаем экземпляр MFRC522

void setup() {
Serial.begin(9600); // Настраиваем порт
while (!Serial);
SPI.begin(); //Начинаем работать по spi с устройством
mfrc522.PCD_Init();
ShowReaderDetails(); // Показать детали карты
Serial.println(F(«Сканирование PICC, смотрим блоки UID …»));
}

void loop() {
// Ищем новые карты
if ( ! mfrc522.PICC_IsNewCardPresent()) {
return;
}

// Выберите одну из карт
if ( ! mfrc522.PICC_ReadCardSerial()) {
return;
}

// Выдача отладочной информации о карточке
mfrc522.PICC_DumpToSerial(&(mfrc522.uid));
}

void ShowReaderDetails() {
// Получаем программное обеспечение MFRC522
byte v = mfrc522.PCD_ReadRegister(mfrc522.VersionReg);
Serial.print(F(«MFRC522 Software Version: 0x»));
Serial.print(v, HEX);
if (v == 0x91)
Serial.print(F(» = v1.0″));
else if (v == 0x92)
Serial.print(F(» = v2.0″));
else
Serial.print(F(» (unknown)»));
Serial.println(«»);
// Когда 0x00 0xFF , вероятно, не удалось связаться
if ((v == 0x00) || (v == 0xFF)) {
Serial.println(F(«WARNING: Карты неисправна или проверьте считыватель!»));
}
}

Теперь в «Мониторе порта» вы можете наблюдать данные с карты.Модуль работает по интерфейсу SPI (англ. Serial Peripheral Interface, SPI bus — последовательный периферийный интерфейс, шина SPI) — последовательный синхронный стандарт передачи данных в режиме полного дуплекса, предназначенный для обеспечения простого и недорогого сопряжения микроконтроллеров и периферии. SPI также иногда называют четырёхпроводным (англ. four-wire) интерфейсом.Удачи.

Урок 13.Измеряем температуру и влажность.Часть 2

Теперь когда мы можем понаблюдать за температурой и влажностью в «Мониторе порта».Теперь мы сделаем индикатор превышения порога температуры.С помощью все тех же компонентов и уже установленных библиотек с прошлых уроков.Соберем схему ниже:

Безымянный13

Запрограммируем следующим кодом:

#include «DHT.h»// Подключаем библиотеки
#define DHTPIN 12 // это пин для датчика
#define DHTTYPE DHT11 // тип датчика

DHT dht(DHTPIN, DHTTYPE);

void setup() {
Serial.begin(9600);// настраиваем порт
Serial.println(«elemic_test!»); // выводим небольшой текст в начале
pinMode(5, OUTPUT);// Подключаем светодиод
dht.begin();// начиваем работать
}
void loop() {
delay(2000);// задержка на старт датчика
float h = dht.readHumidity(); // измеряем влажность
float t = dht.readTemperature();// измеряем температуру
float f = dht.readTemperature(true); // вычисляем коэффициент и выводим точную температуру в не зависимости от влажности
if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println(«Failed sensor!»);// выводим если датчик не работает
return;
}
float hif = dht.computeHeatIndex(f, h);//вычисляем
float hic = dht.computeHeatIndex(t, h, false);// вычисляем

Serial.print(«Humidity: «);// вывод показаний
Serial.print(h);// вывод показаний
Serial.print(» %\t»);// вывод показаний
Serial.print(«Temperature: «);// вывод показаний
Serial.print(t);// вывод показаний
Serial.print(» *C «);// вывод показаний
Serial.print(f);// вывод показаний
Serial.print(» *F\t»);// вывод показаний
Serial.print(«Heat index: «);// вывод показаний
Serial.print(hic);// вывод показаний
Serial.print(» *C «);// вывод показаний
Serial.print(hif);// вывод показаний
Serial.println(» *F»);// вывод показаний
if(hic<28) digitalWrite(5, HIGH); // при сигнале до 28.Включаем светодиод
else digitalWrite(5, LOW); // если от 28.То,выключаем светодиод
}

Если вы захотите изменять температуру срабатывания просто поменяйте в коде в строке:if(hic<28) digitalWrite(5, HIGH); , меняем 28 на любое число, которое вам нужно.

Удачи в обучении.