Звонок

 

Цель работы: 

Получить опыт сборки электрических элементов в схему и подключения к микроконтроллеру Arduino. Научиться управлять подключенной схемой с помощью программирования в среде Arduino IDE на примере электрической схемы с подключенным звонком.
 

Приобретаемые навыки:
  1. Начальные принципы электроники и схемотехники;
  2. Составление принципиальных схем;
  3. Сборка элетрических схем на плате беспаячного монтажа;
  4. Знание простейшей элементной базы;
  5. Получения опыта работы с микроконтроллером Arduino;
  6. Получение навыков работы в среде программирования Arduino IDE;

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

 

Прежде чем приступить к работе, пройдите тестирование:

 Пройти тест

 

Ответьте на дополнительные вопросы по теории, если какие-либо вопросы вызовут затруднение, ниже вы сможете получить информацию, которая поможет дать ответ:

  1. Какие примитивные целочисленные типы данных в C++ вы знаете?
     
  2. Объясните принцип работы пьезоизлучателя:
     
  3. Кратко объясните принцип работы оператора ветвления if():

 

Общий план выполнения работ:

  1. Разработать принципиальную схему устройства, способного изменять яркость светодиода с помощью потенциометра.
  2. Реализовать данную схему на плате безпаячного монтажа.
  3. Написать программу для микроконтроллера.
  4. Провести тестирование устройства.

Ссылки на информацию, которая может помочь при выполнении работы:

  1. Информация о языке  Adruino IDE
  2. Информация о пьезоизлучателе, пьезоэлектрическом эффекте
  3. Информация о тактовых кнопках, их видах и подключению к Arduino

Непосредственное выполнение работы:

Описание установки:

Необходимые материалы:

  1. Плата Adruino - 1шт.
  2. Макетная плата - 1шт.
  3. Зуммер - 1шт.
  4. Резистор 510 Ом - 1шт.
  5. Кнопка- 1шт.
  6. Провода - 6шт.

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

Схема лабораторной установки: 

Макетная плата:


Принципиальная схема:


Задание на программирование лабораторной установки:

Написать программу в среде разработки Arduino IDE, которая позволяет при нажатии на кнопку включать зуммер на 2 секунды и позволяет управлять собранной схемой из приложения Alterozoom, с помощью технологии IoT

Алгоритм написания программы:

  1. Уяснение задачи;
  2. Поиск теоретических ресурсов и полезных материалов;
  3. Подключение библиотеки, по мере необходимости;
  4. Написание программного кода;
  5. Компиляция.

Фото/видео отчет по выполненному заданию:




 

 Программный код:

 

#include <ARpcConfig.h>
#include <ARpcDevice.h>
#include <ARpcDeviceState.h>
#include <ARpcIDevEventsCallback.h>
#include <ARpcIMessageCallback.h>
#include <ARpcIWriteCallback.h>
#include <ARpcRealDeviceMessageDispatch.h>
#include <ARpcSrvReady.h>
#include <ARpcStarNetDevice.h>
#include <ARpcStarNetEndPoint.h>
#include <ARpcStarNetEndPointDevice.h>
#include <ARpcStarNetStreamWriter.h>
#include <ARpcStreamParser.h>
#include <ARpcStreamWriter.h>
#include <ARpcUuid.h>

#include <SPI.h>


const char *deviceName="zummer_IoT";//имя устройства
const ARpcUuid deviceId("{8a7f4f51-8dd8-4621-9081-542f1c7e7be0}");//идентификатор устройства

int zum=8;//пин светодиода
unsigned long zumCount=0;//число звонков

const char *interfaceStr="<controls>"
//"<group title=\"Control device\"><control sync=\"0\" title=\"Zum\" command=\"blink\"/></group></controls>";
"<group title=\"Control device\" >"
"<control title=\"Zum\" command=\"zum\" >"
"</control>"
"</group>"
"</controls>";

const char *sensorsDef="<sensors>"
"<sensor name=\"zum_count\" title=\"zum\" type=\"sv_u32\" unit=\"oC\">"//датчик zum_count
"</sensor>"
"<sensor name=\"sin_x\" type=\"sv_f32_d2\">"
"</sensor>"//датчик sin_x (двумерный)
"</sensors>";


class WriteCallback
:public ARpcIWriteCallback
{
public:
virtual void writeData(const char *data,unsigned long sz)
{
Serial.write((const uint8_t*)data,sz);
}
virtual void writeStr(const char *str)
{
Serial.print(str);
}
}wcb;

ARpcDevice parser(300,&wcb,&deviceId,deviceName);

class CommandCallback
:public ARpcIDevEventsCallback
{
public:
virtual void processCommand(const char *cmd,const char *args[],unsigned char argsCount)
{
if(strcmp(cmd,"zum")==0)//команда blink, проверяем что есть аргумент
{
tone(8, 300, 2000);
++zumCount;
parser.disp().writeMeasurement("zumcount",String(zumCount).c_str());
parser.disp().writeOk();
}
else parser.disp().writeErr("Unknown cmd");//неизвестная команда
}
}ccb;

int t=0;
void writeSinVal()
{
const char *strs[2];
String sinVal(sin(0.1*t)),cosVal(cos(0.1*t));
parser.disp().writeMeasurement("sin_x",sinVal.c_str(),cosVal.c_str());
++t;
}

void setup()
{
Serial.begin(9600);
pinMode(zum,OUTPUT);
parser.disp().installDevEventsHandler(&ccb);
parser.disp().setControls(interfaceStr);
parser.disp().setSensors(sensorsDef);
}

void loop()
{
while(Serial.available())
parser.putByte(Serial.read());
writeSinVal();
delay(500);
}

 

 Творческое задание:

Поменяте код программы так, чтобы при нажатии на кнопку ничего не происходило, если нажатие длится более 2 секунд зуммер включался на 3 секунды, далее шла пауза в 2 секунды и снова зуммер включался на 3 секунды.

 

 Ответы на вопросы:

  1. byte, short, int, long 
  2. Принцип действия пьезоизлучателя основан на пьезоэлектрическом эффекте, открытом братьями Пьером и Жаком Кюри еще в 1880 году, и заключающемся в том, что в некоторых кристаллах (кварц, турмалин, сегнетова соль и др.) под действием приложенных механических сил на их гранях образуются электрические заряды. В зависимости от вида кристалла, заряды могут появиться и при сдвиге, изгибе и кручении. Кроме вышеописанного «прямого» эффекта существует и обратный эффект (который был теоретически предсказан в 1881 году Липманом и экспериментально подтвержден в работах Кюри). Если приложить электрическое напряжение к обкладкам пьезокристалла, то кристалл начнет деформироваться: удлиняться, изгибаться, скручиваться и т. д.
  3. В скобки if() вводить значение, которое выводит значение типа bool(true, false), если значение true, то оператор if выполняется, если false, то пропускается(при наличии else - выполняется оператор else).

Заключение: Я выполнил лабораторную работу в которой изучается споспбы программирования зуммера в среде разработки Arduino IDE с помощью функций tone(pin, frequency, duration), а также функция задержки delay(value).