Получить опыт сборки электрических элементов в схему и подключения к микроконтроллеру Arduino. Научиться управлять подключенной схемой с помощью программирования в среде Arduino IDE на примере электрической схемы с подключенным звонком.
Описание установки:
Необходимые материалы:
Возьмите все необходимые материалы. Удобно расположите плату беспаячного монтажа и микроконтроллер. Аккуратно, без сильных нажимов, во избежании поломки материалов, подсоедините каждый элемент как показано на схеме. Внимательно проверьте правильно ли подключены элементы, проверьте полярность элементов, посмотрите заземлены ли цепь.
Схема лабораторной установки:
Макетная плата:
Принципиальная схема:
Задание на программирование лабораторной установки:
Написать программу в среде разработки Arduino IDE, которая позволяет при нажатии на кнопку включать зуммер на 2 секунды и позволяет управлять собранной схемой из приложения Alterozoom, с помощью технологии IoT
Алгоритм написания программы:
Фото/видео отчет по выполненному заданию:
Программный код:
#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 секунды.
Ответы на вопросы:
Заключение: Я выполнил лабораторную работу в которой изучается споспбы программирования зуммера в среде разработки Arduino IDE с помощью функций tone(pin, frequency, duration), а также функция задержки delay(value).