Примеры подключения компонентов Arduino

Светодиод

	
const int led = 10; // задаём номер рабочего пина для светодиода

void setup()
{
	pinMode(led, OUTPUT);
}

void loop()
{
	// выполняем мигание светодиодом
	digitalWrite(led, HIGH);   
	delay(1000);                       
	digitalWrite(led, LOW);    
	delay(1000);                       
}
	

Замечание: подключение светодиода к ШИМ позволяет управлять его яркостью

RGB-светодиод

	
// задаём номера рабочих пинов для светодиода
const int red = 9; 
const int green = 10;
const int blue = 11;

void setup()
{
	pinMode(red, OUTPUT);
	pinMode(green, OUTPUT);
	pinMode(blue, OUTPUT);
}

void loop() 
{
	// получаем фиолетовый цвет  
	setColor(255,0,255);                  
}

void setColor(int redValue, int greenValue, int blueValue) // функция установки яркости светодиодов
{
	analogWrite(red, redValue);
	analogWrite(green, greenValue);
	analogWrite(blue, greenValue);
}
	

Замечания:

  • подключение выводов RGB-светодиода к ШИМ позволяет управлять яркостью светодиодов и получать различные оттенки цветов
  • данная программа работает только при подключении светодиода к пинам с ШИМ

DC мотор

	
const int motor = 10; // задаём номер рабочего пина для мотора

void setup() 
{
	pinMode(motor, OUTPUT);
}

void loop() 
{
   for (int i = 0; i < 255; i = i + 1) // постепенно увеличиваем вращение
   {
	  analogWrite(motor, i);
	  delay(50);
   }
   for (int i = 255; i > 0; i = i - 1) //постепенно уменьшаем вращение
   {
	  analogWrite(motor, i);
	  delay(50);
	}
}
	

Замечание: DC мотор можно подключать и к обычным пинам, которые не имеют ШИМ

Кнопка

	
void setup() 
{
	Serial.begin(9600);
	pinMode(2, INPUT_PULLUP); // подтяжка к питанию
}

void loop() {
	int butt
	onState= digitalRead(2); // состяние кнопки
	Serial.println(buttonState);
}

	

Пример ниже демонстрирует пример реализации включателя с помощью кнопки:


int lastButtonState = 0;
bool buttonFlag = false; // флаг переключателя по нажатию кнопки

void setup() 
{
	Serial.begin(9600);
	pinMode(2, INPUT_PULLUP);
}

void loop() 
{
	int buttonState = digitalRead(2);
	if (buttonState != lastButtonState)
  	{    
		if (buttonState == LOW) 
		{
			buttonFlag = !buttonFlag; // переключаем флаг
		}   
		delay(5); 
 	}
	lastButtonState = buttonState; // сохраняем считанное состояние 
	delay(10);
}
	

Замечание: в случае подтяжки к питанию через (INPUT_PULLUP) не требуется подключение внешнего резистора, однако работа кнопки инвертируется

Ультразвуковой дальномер

	
int trigPin = 10; // объявляем пин trig
int echoPin = 11; // объявляем пин echo

void setup()
{
	Serial.begin(9600); //открытие последовательного порта для чтения/записи 
	pinMode(trigPin, OUTPUT); 
	pinMode(ecohPin, INPUT); 	
}
void loop()
{
	long duration, distance;
	digitalWrite(trigPin, LOW); // этой и 4 следующими строчками создаём импульс длиной 5 мкс
	delayMicroseconds(2);
	digitalWrite(trigPin, HIGH);
	delayMicroseconds(5);
	digitalWrite(trigPin, LOW);

	duration = pulseIn(echoPin, HIGH); // измеряем время, за которое на пине echoPin установится высокий сигнал
	distance = duration / 29 / 2;
	Serial.print(distance);
	Serial.println(“ cm”);
	delay(100);
}
	

Переменный резистор (потенциометр)

	
int inputPin = A0; // входной пин, на котором есть АЦП
int value = 0; // переменная для хранения значений

void setup() 
{
	Serial.begin(9600); //открытие последовательного порта
	pinMode(A0, INPUT);
}

void loop() 
{
	value = analogRead(A0); // считывание значения в переменную
	Serial.println(value); // вывод значения в монитор порта
}
	

Сервопривод

	
#include <Servo.h> // библиотека для работы с сервоприводами
int pos = 0; // переменная-счётчик для цикла 
Servo servo; // переменная типа данных Servo (объект)

void setup()
{
	servo.attach(9); // подключаем сервопривод к пину 9
}

void loop()
{
	for (pos = 0; pos <= 180; pos += 1)  //цикл для поворота сервопривода
  	{
		servo.write(pos); // указываем позицию, в которую нужно повернуться
		delay(15); 
  	}
	for (pos = 180; pos >= 0; pos -= 1) //цикл для обратного поворота
  	{
		servo.write(pos); // указываем позицию, в которую нужно повернуться
		delay(15);
  	}
}
	

LCD дисплей

	
#include <LiquidCrystal.h>  // библиотека для работы c LCD дисплеем

LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // инициализация, передача номеров пинов  

void setup() 
{
	lcd.begin(16, 2); // установка кол-ва столбцов и строк на дисплее 
	lcd.print("hello, world!"); // вывод надписи на экран
}

void loop() 
{
	lcd.setCursor(0, 1); // установка курсора в первую ячейку второй строки
	int value = 1024;
	lcd.print(value); // вывод значения переменной на второй строке
}
	

Таблица ниже описывает подкючение пинов дисплея к пинам Arduino:

LCD pin Arduino pin
RS 12
E 11
D4 5
D5 4
D6 3
D7 2
R/W GND
VSS GND
VCC 5V

Датчик температуры

	
#define TMP A5 // объявляем идентификатор TMP на пин A5
int temp = 0; // объявляем переменную для хранения температуры

int getTemp() // функция для опроса АЦП и расчёта значения температуры
{   
	int valueADC = analogRead(TMP);
	int temp = map(valueADC, 20, 358, -40, 125);
	return temp;
}

void setup() {
	Serial.begin(9600); //открытие последовательного порта для чтения/записи 
	pinMode(TMP, INPUT); 	
}

void loop() {
	temp = getTemp(); // записываем в переменную  temp значение температуры при помощи getTemp()
	Serial.println(temp); // выводим значение в монитор порта 
}
	

Фоторезистор

	
int sensorRead = 0; // переменная для хранения значения

void setup()
{
	pinMode(A0, INPUT);
	Serial.begin(9600);
}

void loop()
{
	sensorRead = analogRead(A0); // считыввание напряжения с фоторезистора
	Serial.println(sensorRead); // вывод значения в монитор порта
}
	

Замечание: фоторезистор одной ногой подключается к питанию, второй – одновременно к пину с АЦП и через резистор к земле

Пьезодинамик (пищалка)

	
int p = 3; //объявляем переменную с номером пина, на который мы

void setup()
{
	pinMode(p, OUTPUT); //объявляем пин как выход
}

void loop() //процедура loop
{
	tone (p, 500); //включаем на 500 Гц
	delay(100); //ждем 100 Мс
}
	

Замечание: при использовании функции tone() невозможно одновременно использовать ШИМ на пинах 3 и 11 , а также нельзя запустить одновременно две мелодии двумя командами tone() – в каждый момент времени будет исполняться только одна мелодия

Адресная светодиодная лента

	
#include <Adafruit_NeoPixel.h>

#define PIN 2	 // номер пина, к которому подключена лента

#define NUMPIXELS      12 // число светодиодов в ленте

Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN); // создание переменной (объекта) с именем pixels

void setup() 
{
	pixels.begin(); // инициализация работы
}

void loop() 
{
	for (int i=0; i < NUMPIXELS; i++) // цикл для прохода по всем светодиодам ленты
  	{
		pixels.setPixelColor(i, pixels.Color(255, 0, 0)); // установка красного цвета
		pixels.show(); // применение цвета к светодиоду с номером i
		delay(10);
  	}
	delay(1000);
  
  	for (int i=0; i < NUMPIXELS; i++) 
  	{
		pixels.setPixelColor(i, pixels.Color(0, 0, 255)); // установка синего цвета
		pixels.show(); // применение цвета к светодиоду с номером i
		delay(10);
  	}
	delay(1000);
  
  	for (int i=0; i < NUMPIXELS; i++) 
	{
		pixels.setPixelColor(i, pixels.Color(255, 69, 0)); // установка оранжевого цвета
		pixels.show(); // применение цвета к светодиоду с номером i
		delay(10);
  	}
  	delay(1000);
}		
	

Обратная связь

Токен будет выслан каждому участнику на почту в день экзамена. По вопросам получения и работы токенов, группы в WhatApp и Telegram

Так же по всем вопросам: dt_smartpark@miee.ru

Наверх