- Ардуино для школьников

Ардуино для школьников

Практика для школьников. Мясищев А.А.

Первый урок: Подключение светодиодов к Ардуино.

Подключение 1-го светодиода(Ардуино UNO)

Подключение 3-х светодиодов

Подключение 4-х светодиодов

Подключение светодиода к Ардуино NANO

Задание.

Последовательно зажечь четыре светодиода от 2-го вывода Ардуино к 5-му и через секунду последовательно с 5-го вывода их погасить

Второй урок: Счетчик на семисегментном индикаторе

Внутренняя схема и подключение семисегментного индикатора с общим анодом

Подключение к Ардуино

Таблица 1. Соответствие сигналов на выходе Ардуино с отображаемыми символами

Фото счетчика от 0 до 9 на Ардуино и семисегментном индикаторе

Программы

Программа для отображения на семисегментном индикаторе цифры 7

Программа для отображения символов 0, 4, 9

byte Seg[11] = { // Битовое кодирование символов в соответствии с табл.1

0b10000001, // Символ 0

0b11101011, // Символ 1

0b01000101,

0b01000011,

0b00101011,

0b00010011,

0b00010001,

0b11001011,

0b00000001,

0b00000011, // Символ 9

0b11111110 // Символ точка

};

void setup() {

Serial.begin(9600);

for(int i=2;i<=9;i++){

pinMode(i,OUTPUT);

digitalWrite(i,HIGH);}

}

void loop() {

// Отображение символа 0

for (int i = 0; i < 8; i++) { // Цикл по 8-битам массива Seg

boolean enSeg = bitRead(Seg[0], i); // Чтение очередного бита Seg[0]

digitalWrite(i+2 , enSeg);// включение/выключение сегмента на основе бита

Serial.print(enSeg); Serial.print(" "); // Контрольная распечатка

}

Serial.println("");

delay(2000);

// Отображение символа 4

for (int i = 0; i <8; i++) {

boolean enSeg = bitRead(Seg[4], i);

digitalWrite(i+2 , enSeg);

Serial.print(enSeg); Serial.print(" ");

}

Serial.println("");

delay(2000);

// Отображение символа 9

for (int i = 0; i < 8; i++) {

boolean enSeg = bitRead(Seg[9], i);

digitalWrite(i+2 , enSeg);

Serial.print(enSeg); Serial.print(" ");

}

Serial.println("");

delay(2000);

}

Здесь функция

bitRead()

считывает состояние указанного бита числа.

Синтаксис:

bitRead(x, n)

Параметры

x: число, у которого необходимо считать бит

n: номер бита, состояние которого необходимо считать. Нумерация начинается с младшего значащего бита (крайнего правого) с номером 0

Возвращаемые значения: 0 или 1

Программа отображения всех символов массива Seg[i] с интервалом 1 секунда

byte Seg[11] = {

0b10000001,

0b11101011,

0b01000101,

0b01000011,

0b00101011,

0b00010011,

0b00010001,

0b11001011,

0b00000001,

0b00000011,

0b11111110

};

void setup() {

for(int i=2;i<=9;i++){

pinMode(i,OUTPUT);

digitalWrite(i,HIGH);}

}

void lcd(int num){

for (int i = 0; i < 8; i++) {

boolean enSeg = bitRead(Seg[num], i);

// включаем/выключаем сегмент на основе полученного значения

digitalWrite(i+2 , enSeg);

}

}

void loop() {

for(int i=0;i<=10;i++) { // последовательное отображение символов массива Seg[i]

lcd(i);

delay(1000);

}

}

Задание.

Вывести на индикатор кроме всех цифр и точки еще 4-е любые символы латинского алфавита

Третий урок: Термометр, отображающий температуру с датчика DS18B20 на один семисегментный индикатор

Основные технические характеристики DS18B20:

Диапазон измерений от –55°C до +125°C;

Точность измерения ±0.5°C в диапазоне от -10°C до +85°C;

Точность измерения: ±2 °C в диапазоне от -55 до 125 °C

Настраиваемое пользователем цифровое разрешение от 9 до 12 бит;

Данные передаются посредством 1-проводного последовательного интерфейса 1-Wire®

Датчик имеет 64-битныйt уникальный серийный номер;

Рабочее напряжение питания от 3.0В до 5.5В;

Время опроса: не более 0.75с.

Датчик DS18B20 и способы подключения одного и нескольких датчиков

Подключение к Ардуино на монтажной плате

Программа вывода целой части значения температуры на один сегмент

#include <OneWire.h>

#include <DallasTemperature.h>

#include <stdio.h>

#include <stdlib.h>

#define ONE_WIRE_BUS 10 // Подключение датчика температуры к 10 выводу

OneWire oneWire(ONE_WIRE_BUS); // Создание экземпляра класса

DallasTemperature sensors(&oneWire); // Создание экземпляра класса

byte buf[4];

byte Seg[12] = { // Массив представления символа

0b10000001, // Ноль

0b11101011,

0b01000101, // Два

0b01000011,

0b00101011,

0b00010011,

0b00010001,

0b11001011,

0b00000001,

0b00000011, // Девять

0b11111110, // Точка

0b11111111 // Пусто

};

void setup() {

sensors.begin(); // Вызов метода класса

for(int i=2;i<=9;i++){

pinMode(i,OUTPUT);

digitalWrite(i,HIGH);}

}

void lcd(int num){ // Функция вывода символа

for (int i = 0; i < 8; i++) {

boolean enSeg = bitRead(Seg[num], i);

// включаем/выключаем сегмент на основе полученного значения

digitalWrite(i+2 , enSeg);

}

}

void loop() {

sensors.requestTemperatures();

float cel=sensors.getTempCByIndex(0); // Определение температуры

dtostrf(cel,2,0,buf); // Запись числа cel в символьный массив buf

int temH=buf[0]-48; //Преобразование десятичного кода символа в число

int temL=buf[1]-48;

lcd(temH); // Вывод старшей части температуры

delay(500);

lcd(11); // Ничего не высвечивать

delay(100);

lcd(temL);// Вывод младшей части температуры

delay(500);

lcd(10); // Вывод точки между высвечиванием температуры

delay(1000);

}

Задание.

Вывести на один семисегментный индикатор целую часть температуры и одну цифру десятичной части (например 26.9)