Андрей Смирнов
Время чтения: ~20 мин.
Просмотров: 0

Диммер переменного тока на ардуино

Магниты и полюса

Количество полюсов на роторе четное. Форма применяемых магнитов обычно прямоугольная. Цилиндрические магниты применяются реже. Устанавливаются они с чередованием полюсов.

Количество магнитов не всегда соответствует количеству полюсов. Несколько магнитов могут формировать один полюс:

В этом случае 8 магнитов формируют 4 полюса. Размер магнитов зависит от геометрии двигателя и характеристик мотора. Чем сильнее применяемые магниты, тем выше момент силы, развиваемый двигателем на валу.

Магниты на роторе закрепляются с помощью специального клея. Реже встречаются конструкции с держателем магнитов. Материал ротора может быть магнитопроводящим (стальным), немагнитопроводящим (алюминиевые сплавы, пластики и т.п.), комбинированным.

Характеристики

  • Микроконтроллер: ATSAMD21G18
  • Ядро: 32-битный ARM Cortex M0+
  • Тактовая частота: 48 МГц
  • Объём Flash-памяти: 256 КБ (8 КБ занимает загрузчик)
  • Объём SRAM-памяти: 32 КБ
  • Портов ввода-вывода всего: 22
  • Портов с АЦП: 7
  • Разрядность АЦП: 8/10/12 бит (по умолчанию 10 бит)
  • Портов, подключённых к ЦАП: 1
  • Разрядность ЦАП: 10 бит
  • Портов с ШИМ: 12
  • Разрядность ШИМ: 10 бит, по умолчанию 8 бит
  • Аппаратных интерфейсов SPI: 1
  • Аппаратных интерфейсов I²C / TWI: 1
  • Аппаратных интерфейсов UART / Serial: 1
  • Номинальное рабочее напряжение: 3,3 В
  • Максимальный выходной ток пина 3V3: 600 мA
  • Максимальный ток с пина или на пин: 7 мА
  • Допустимое входное напряжение от внешнего источника: 5 В
  • Габариты: 62×25 мм

Программирование МК Arduino при реализации проекта «логический анализатор»

Благодаря популярности Ардуино существуют уже готовые библиотеки и функции для логических анализаторов на этом МК. Вам остаётся лишь подобрать подходящую и переписать программный код под своё устройство. Ведь платы, датчики и прочие вводные у всех различаются, и чтобы ваше устройство работало без проблем, придётся подогнать чужой код под свои запросы. Если же вы не хотите лишний раз заморачиваться и у вас есть опыт программирования на С++, можете воспользоваться любой полюбившейся средой.

Код для схемы на фото выше может быть таким:

/***********************************
128 by 64 LCD Logic Analyzer 6 channel and 3Mb/s
By Bob Davis
Uses Universal 8bit Graphics Library, http://code.google.com/p/u8glib/
  Copyright (c) 2012, olikraus@gmail.com   All rights reserved.

********************************************/
#include "U8glib.h"

// 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
//U8GLIB_ST7920_128X64_4X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); 
//  **** NOTE **** I Moved the three control pins !!!
U8GLIB_ST7920_128X64_4X u8g(8, 9, 10, 11, 4, 5, 6, 7, 1, 2, 3); 

int Sample;
int Input=0;
int OldInput=0;
int xpos=0;
 
void u8g_prepare(void) {
  u8g.setFont(u8g_font_6x10);
  u8g.setFontRefHeightExtendedText();
  u8g.setDefaultForegroundColor();
  u8g.setFontPosTop();
}
void DrawMarkers(void) {
  u8g.drawFrame (0,0,128,64);
  u8g.drawPixel (20,1);
  u8g.drawPixel (40,1);
  u8g.drawPixel (60,1);
  u8g.drawPixel (80,1);
  u8g.drawPixel (100,1);
  u8g.drawPixel (20,62);
  u8g.drawPixel (40,62);
  u8g.drawPixel (60,62);
  u8g.drawPixel (80,62);
  u8g.drawPixel (100,62);
}

void draw(void) {
  u8g_prepare();
  DrawMarkers(); 
// wait for a trigger of a positive going input
  Input=digitalRead(A0);
  while (Input != 1){
    Input=digitalRead(A0);
  }
// collect the analog data into an array
// No loop is about 50% faster!
    Sample=PINC;    Sample=PINC;    Sample=PINC;    Sample=PINC;    
    Sample=PINC;    Sample=PINC;    Sample=PINC;    Sample=PINC;
    Sample=PINC;    Sample=PINC;    Sample=PINC;    Sample=PINC;
    Sample=PINC;    Sample=PINC;    Sample=PINC;    Sample=PINC;    
    Sample=PINC;    Sample=PINC;    Sample=PINC;    Sample=PINC;
    Sample=PINC;    Sample=PINC;    Sample=PINC;    Sample=PINC;
    Sample=PINC;    Sample=PINC;    Sample=PINC;    Sample=PINC;
    Sample=PINC;    Sample=PINC;    Sample=PINC;    Sample=PINC;
    Sample=PINC;    Sample=PINC;    Sample=PINC;    Sample=PINC;
    Sample=PINC;    Sample=PINC;    Sample=PINC;    Sample=PINC;
    Sample=PINC;    Sample=PINC;    Sample=PINC;    Sample=PINC;
    Sample=PINC;    Sample=PINC;    Sample=PINC;    Sample=PINC;
    Sample=PINC;    Sample=PINC;    Sample=PINC;    Sample=PINC;
    Sample=PINC;    Sample=PINC;    Sample=PINC;    Sample=PINC;
    Sample=PINC;    Sample=PINC;    Sample=PINC;    Sample=PINC;
    Sample=PINC;    Sample=PINC;    Sample=PINC;    Sample=PINC;
    Sample=PINC;    Sample=PINC;    Sample=PINC;    Sample=PINC;
    Sample=PINC;    Sample=PINC;    Sample=PINC;    Sample=PINC;
    Sample=PINC;    Sample=PINC;    Sample=PINC;    Sample=PINC;
    Sample=PINC;    Sample=PINC;    Sample=PINC;    Sample=PINC;
    Sample=PINC;    Sample=PINC;    Sample=PINC;    Sample=PINC;
    Sample=PINC;    Sample=PINC;    Sample=PINC;    Sample=PINC;
    Sample=PINC;    Sample=PINC;    Sample=PINC;    Sample=PINC;
    Sample=PINC;    Sample=PINC;    Sample=PINC;    Sample=PINC;
    Sample=PINC;    Sample=PINC;    Sample=PINC;    Sample=PINC;
    Sample=PINC;    Sample=PINC;    Sample=PINC;    Sample=PINC;
    Sample=PINC;    Sample=PINC;    Sample=PINC;    Sample=PINC;
    Sample=PINC;    Sample=PINC;    Sample=PINC;    Sample=PINC;
    Sample=PINC;    Sample=PINC;    Sample=PINC;    Sample=PINC;
    Sample=PINC;    Sample=PINC;    Sample=PINC;    Sample=PINC;
    Sample=PINC;    Sample=PINC;    Sample=PINC;    Sample=PINC;
    Sample=PINC;    Sample=PINC;    Sample=PINC;
// display the collected analog data from array
  for(int xpos=0; xpos<128; xpos++) {
    u8g.drawLine (xpos, ((Sample&B00000001)*4)+4, xpos, ((Sample&B00000001)*4)+4);
    u8g.drawLine (xpos, ((Sample&B00000010)*2)+14, xpos, ((Sample&B00000010)*2)+14);
    u8g.drawLine (xpos, ((Sample&B00000100)*1)+24, xpos, ((Sample&B00000100)*1)+24);
    u8g.drawLine (xpos, ((Sample&B00001000)/2)+34, xpos, ((Sample&B00001000)/2)+34);
    u8g.drawLine (xpos, ((Sample&B00010000)/4)+44, xpos, ((Sample&B00010000)/4)+44);
    u8g.drawLine (xpos, ((Sample&B00100000)/8)+54, xpos, ((Sample&B00100000)/8)+54);
  }  
}

void setup(void) {
  pinMode(A0, INPUT);
  pinMode(A1, INPUT);
  pinMode(A2, INPUT);
  pinMode(A3, INPUT);
  pinMode(A4, INPUT);
  pinMode(A5, INPUT);

  // assign default color value
  if ( u8g.getMode() == U8G_MODE_R3G3B2 ) 
    u8g.setColorIndex(255);     // RGB=white
  else if ( u8g.getMode() == U8G_MODE_GRAY2BIT )
    u8g.setColorIndex(3);       // max intensity
  else if ( u8g.getMode() == U8G_MODE_BW )
    u8g.setColorIndex(1);       // pixel on, black
}

void loop(void) {
// picture loop  
//  u8g.firstPage();  
  do { draw(); }  
  while( u8g.nextPage() );
  // rebuild the picture after some delay
  delay(100);
}

Не забудьте скачать библиотеки для работы с Ардуино. А также учитывать, что вывод идёт на ЖК экран. По окончанию написания софта просто подгрузите его на плату с помощью специального переходника под usb.

Может случиться так, что из-за особенностей отображения информации на ЖК дисплее, вам не хватит постоянной памяти устройства. В таком случае имеет смысл докупить флешку и прикрепить её к системе. Благо делается это достаточно просто, а всё, что вам потребуется – специальный переходник под ваш форм-фактор физического накопителя.

Простейший ключ

В дальнейшем полевым транзистором мы будет называть конкретно MOSFET,
то есть полевые транзисторы с изолированным
затвором
(они же МОП, они же МДП). Они удобны тем, что управляются
исключительно напряжением: если напряжение на затворе больше
порогового, то транзистор открывается. При этом управляющий ток через
транзистор пока он открыт или закрыт не течёт. Это значительное
преимущество перед биполярными транзисторами, у которых ток течёт всё
время, пока открыт транзистор.

Также в дальнейшем мы будем использовать только n-канальные MOSFET
(даже для двухтактных схем). Это связано с тем, что n-канальные
транзисторы дешевле и имеют лучшие характеристики.

Простейшая схема ключа на MOSFET приведена ниже.

Опять же, нагрузка подключена «сверху», к стоку. Если подключить её
«снизу», то схема не будет работать. Дело в том, что транзистор
открывается, если напряжение между затвором и истоком превышает
пороговое. При подключении «снизу» нагрузка будет давать
дополнительное падение напряжения, и транзистор может не открыться или
открыться не полностью.

Несмотря на то, что MOSFET управляется только напряжением и ток через
затвор не идёт, затвор образует с подложкой паразитный
конденсатор. Когда транзистор открывается или закрывается, этот
конденсатор заряжается или разряжается через вход ключевой схемы. И
если этот вход подключен к push-pull выходу микросхемы, через неё
потечёт довольно большой ток, который может вывести её из строя.

При управлении типа push-pull схема разряда конденсатора образует,
фактически, RC-цепочку, в которой максимальный ток разряда будет равен

где — напряжение, которым управляется транзистор.

Таким образом, достаточно будет поставить резистор на 100 Ом, чтобы
ограничить ток заряда — разряда до 10 мА. Но чем больше сопротивление
резистора, тем медленнее он будет открываться и закрываться, так как
постоянная времени увеличится

Это важно, если транзистор
часто переключается. Например, в ШИМ-регуляторе

Основные параметры, на которые следует обращать внимание — это
пороговое напряжение , максимальный ток через сток и
сопротивление сток — исток у открытого транзистора. Ниже приведена таблица с примерами характеристик МОП-транзисторов

Ниже приведена таблица с примерами характеристик МОП-транзисторов.

Модель
2N7000 3 В 200 мА 5 Ом
IRFZ44N 4 В 35 А 0,0175 Ом
IRF630 4 В 9 А 0,4 Ом
IRL2505 2 В 74 А 0,008 Ом

Для приведены максимальные значения. Дело в том, что у разных
транзисторов даже из одной партии этот параметр может сильно
отличаться. Но если максимальное значение равно, скажем, 3 В, то этот
транзистор гарантированно можно использовать в цифровых схемах с
напряжением питания 3,3 В или 5 В.

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

Подключение и настройка

Грибная запеканка с овсянкой

Категория:
Горячие блюда Запеканки Запеканка с грибами

Быстрая и оригинальная запеканка к обеду с овсянкой и шампиньонами.

Обзор

Важное замечание! Пожалуйста, прочитайте этот материал полностью, прежде чем работать с AREF в первый раз.

Вы можете вспомнить, что вы можете использовать функцию Arduino analogRead() для измерения напряжения электрического тока от датчиков и т.п., используя один из выводов аналогового входа. Значение, возвращаемое функцией analogRead(), должно быть в диапазоне от 0 до 1023, где ноль представляет собой ноль вольт, а 1023 представляет рабочее напряжение используемой платы Arduino.

И когда мы говорим, рабочее напряжение — это напряжение, доступное Arduino после схемы питания. Например, если у вас есть типичная плата Arduino Uno и вы запускаете ее через разъем USB (для платы есть доступные 5 В через разъем USB на вашем компьютере), то напряжение немного уменьшается, поскольку ток идет через всю схему к микроконтроллеру или USB-источник может не давать абсолютное значение.

Это можно легко продемонстрировать, подключив Arduino Uno к USB и установив мультиметр для измерения напряжения на контактах 5В и GND. Некоторые платы возвращают напряжение до 4,8 В, некоторые показывают значения выше 4,8 В, ниже 5 В. Поэтому, если вы стремитесь к точности, питайте вашу плату от внешнего источника питания через разъем постоянного тока или Vin-контакт, например, 9 В постоянного тока. Затем, после этого, пройдя через цепь регулятора мощности, вы получите хорошее напряжение 5 В.

Это важно, поскольку точность любых значений analogRead() будет зависеть от отсутствия истинных 5 В. Если у вас нет никакой опции, вы можете использовать некоторые математические расчеты в своем эскизе, чтобы компенсировать падение напряжения

Например, если ваше напряжение равно 4,8 В — диапазон analogRead() от 0 до 1023 будет относиться к 0 ~ 4,8 В, а не к 0 ~ 5 В. Это может звучать тривиально, однако, если вы используете датчик, который возвращает значение в виде напряжения (например, датчик температуры TMP36) — рассчитанное значение будет неверным. Поэтому в интересах точности используйте внешний источник питания.

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

Для занятия нам понадобятся следующие детали:

  • плата Arduino Uno / Arduino Nano / Arduino Mega;
  • макетная плата;
  • 1 светодиод;
  • резисторы на 220 Ом и 10 кОм;
  • 1 тактовая кнопка;
  • провода «папа-папа» и «папа-мама».

Принципиальная схема. Подключение кнопки к Ардуино Уно

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

Обратите внимание, что при отпущенной кнопке на Pin2 поступает логический «0». С помощью кнопки будем выключать и включать встроенный светодиод, подключенный к цифровому 13 порту на плате микроконтроллера Ардуино

Скетч подключение кнопки к цифровому входу

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

void loop() {
   if (digitalRead(2) == HIGH) // когда на пин 2 поступает высокий сигнал
   {
      digitalWrite(13, HIGH); // зажигаем светодиод
   }

   if (digitalRead(2) == LOW) // когда на пин 2 поступает низкий сигнал
   {
      digitalWrite(13, LOW); // выключаем светодиод
   }
}

Пояснения к коду:

  1. процедура выполняется один раз, используется процедура для конфигурации портов микроконтроллера (назначение режима работы портов);
  2. процедуры и должны присутствовать в любой программе (скетче);
  3. использованные константы: , , , , пишутся заглавными буквами, иначе компилятор их не распознает и выдаст ошибку.

Скетч подключения кнопки к аналоговому входу

Можно также сделать подключение кнопок к аналоговому входу Ардуино (обозначены, как Analog In на плате). Принципиальное отличие данной схемы — это использование аналогового порта на микроконтроллере. Для включения и выключения светодиода будем также использовать встроенный светодиод на плате. Переключите тактовую кнопку к аналоговому входу A1 и загрузите в плату следующий скетч.

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

void loop() {
   if (analogRead(A1) > 300) // когда аналоговая кнопка нажата
   {
      digitalWrite(13, HIGH); // зажигаем светодиод
   }

   if (analogRead(A1) < 300) // когда аналоговая кнопка отпущена
   {
      digitalWrite(13, LOW); // выключаем светодиод
   }
}

Пояснения к коду:

  1. в данном скетче мы используем функцию для считывания значений с аналогового входа , при этом порт можно использовать, как цифровой;
  2. значения на аналоговом входе могут отличаться (все зависит от сопротивления резистора в схеме) и могут принимать значения в диапазоне от 0 до 1023.

Рекомендуемая периферия для создания логического анализатора на базе микроконтроллера Arduino

Из всего вышеописанного вы уже успели составить примерный список периферии для покупки, но давайте уточним этот момент. В логическом анализаторе вам потребуется:

Вакансии

Программирование аппаратно-программных средств arduino, разработка чертежей в SolidWorks.

  1. Сам микроконтроллер Ардуино. Не имеет разницы, какой вы подберёте, это лишь повлияет на конечный размер устройства. ПО под любую версию выглядит одинаково. На фото выше был использована плата Arduino Uno.
  2. ЖК дисплей. Если у вас имеется старый кнопочный телефон, можете снять с него, и устроить «безотходное» производство.
  3. Резисторы различной ёмкости.
  4. Датчик тока.
  5. 4 аккумулятора.
  6. Светодиод или парочка.
  7. Карта памяти, но это опционально.

Помимо этого, вам, естественно, потребуется паяльник, припой и прочие принадлежности. Лучше заранее найти место, где вы будете всё это собирать. А если работаете с паяльником впервые, изучите правила пожарной безопасности и особенности его эксплуатации, чтобы по 10 раз не перепаивать каждую деталь.

KY-013, аналоговый термодатчик

Модуль аналогового термодатчика

 Такой же терморезистор стоит от 3 р, в составе модуля- от 50 р
 За таким красивым названием кроется обыкновенный терморезистор! Опять же практически любые датчики изначально являются АНАЛОГЫВЫМИ. Только после соответствующей обработки сигнала они уже становятся ЦИФРОВЫМИ. Но в нашем случае изначально аналоговый датчик. Поэтому подключать его нужно к АНАЛОГОВЫМ входам ARDUINO. Диапазон рабочей температуры датчика -55…125 °C, т.е. на 1 бит 10 битного преобразования приходится (125+55)/1024= 0,17578125 градуса Цельсия ,что позволяет довольно точно измерять температуру. Кроме того датчик имеет малые размеры что позволяет снизить инерционность при измерении. Т.е. чем меньше датчик тем меньше нужно времени для достижения им температуры окружающей среды. Применяется, как и понятно из описания, для измерения температуры.

В чем различия диммеров?

Диммеры различаются по следующим критериям:

  • По типу монтажа;
  • по исполнению и способу управления;
  • по способу регулирования.

По типу монтажа

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

Для внутреннего монтажа – отлично впишутся в любой интерьер, как например этот.

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

По исполнению

По исполнению регулятор света для светодиодных и ламп накаливания может быть:

  • Поворотным;
  • поворотно-нажимного типа;
  • кнопочным;
  • сенсорным;

Поворотный – один из самых простых вариантов регулятора яркости светодиодной лампы, выглядит незатейливо обладает простейшим функционалом.

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

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

Сенсорные модели и вовсе могут быть совершенно различны – начиная от светящихся кружочков, заканчивая ровными одноцветными панелями для регулировки напряжения светодиодных ламп.

По способу регулировки

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

Первый тип диммеров более распространённый и дешевый, по причине простоты своей схемы – это диммер с отсечкой по переднему фронту (англ. leading edge). Немного дальше будет подробно рассмотрен его принцип работы и схема, для сравнения взгляните на вид напряжения на выходе такого регулятора.

По графику видно, что на нагрузку подается остаток полуволны, а её начало срезается. Из-за характера включения нагрузки, в электросетях наводятся помехи, что мешает работе телевизоров и других устройство. На лампу подаётся напряжение установленной амплитуды, а затем оно затухает, когда синусоида переходит через ноль.

Можно ли использовать leading edge диммер для диодных ламп? Можно. Светодиодные лампы с диммером этого типа будут хорошо поддаваться регулировке, только если они изначально для этого созданы. Об этом свидетельствуют символы на её упаковке. Они еще называются «диммируемые».

Второй тип работает иначе, создает меньше помех и лучше работает с разными лампочками – это диммер с отсечкой по заднему фронту (англ. falling edge).

Регулировка светодиодных ламп с диммерами такого типа происходит лучше, а его конструкция лучше поддерживает недиммируемые источники света. Единственный недостаток – эти лампы могут регулировать свою яркость не с «нуля», а в определенном диапазоне. При этом диммируемые светодиодные лампы – просто великолепно регулируются.

Отдельное слово можно сказать о готовых светодиодных светильниках с регулировкой яркости. Это отдельный класс осветительных устройств, которые не нуждаются в установке дополнительных регуляторов, а имеют его в своей конструкции. Их регулировки производятся с помощью кнопок на корпусе или с пульта.

Исходный код программы

В коде программы первым делом необходимо подключить библиотеку для работы с ЖК дисплеем и инициализировать необходимые контакты для работы.

Затем необходимо указать направление работы для инициализированных контактов (на ввод или на вывод) и инициализировать ЖК дисплей для работы.

Далее в цикле программы мы считываем выходы датчиков и инкрементируем и декрементируем значение счетчика посетителей. Также мы проверяем на равенство нулю значение этого счетчика. Если он равен нулю, то это значит что в комнате никого нет – в этом случае мы выключаем свет в комнате (выключаем электрическую лампочку при помощи транзистора и реле).

Если же счетчик посетителей не равен нулю, то включаем свет. Также определим две функции: на вход и на выход посетителя.

Далее представлен полный текст программы.

Arduino

#include<LiquidCrystal.h>
LiquidCrystal lcd(13,12,11,10,9,8);
#define in 14
#define out 19
#define relay 2
int count=0;
void IN()
{
count++;
lcd.clear();
lcd.print(«Person In Room:»);
lcd.setCursor(0,1);
lcd.print(count);
delay(1000);
}
void OUT()
{
count—;
lcd.clear();
lcd.print(«Person In Room:»);
lcd.setCursor(0,1);
lcd.print(count);
delay(1000);
}
void setup()
{
lcd.begin(16,2);
lcd.print(«Visitor Counter»);
delay(2000);
pinMode(in, INPUT);
pinMode(out, INPUT);
pinMode(relay, OUTPUT);
lcd.clear();
lcd.print(«Person In Room:»);
lcd.setCursor(0,1);
lcd.print(count);
}
void loop()
{

if(digitalRead(in))
IN();
if(digitalRead(out))
OUT();

if(count<=0)
{
lcd.clear();
digitalWrite(relay, LOW);
lcd.clear();
lcd.print(«Nobody In Room»);
lcd.setCursor(0,1);
lcd.print(«Light Is Off»);
delay(200);
}

else
digitalWrite(relay, HIGH);
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59

#include<LiquidCrystal.h>

LiquidCrystallcd(13,12,11,10,9,8);

#define in 14
#define out 19
#define relay 2

intcount=;

voidIN()

{

count++;

lcd.clear();

lcd.print(«Person In Room:»);

lcd.setCursor(,1);

lcd.print(count);

delay(1000);

}

voidOUT()

{

count—;

lcd.clear();

lcd.print(«Person In Room:»);

lcd.setCursor(,1);

lcd.print(count);

delay(1000);

}

voidsetup()

{

lcd.begin(16,2);

lcd.print(«Visitor Counter»);

delay(2000);

pinMode(in,INPUT);

pinMode(out,INPUT);

pinMode(relay,OUTPUT);

lcd.clear();

lcd.print(«Person In Room:»);

lcd.setCursor(,1);

lcd.print(count);

}

voidloop()

{

if(digitalRead(in))

IN();

if(digitalRead(out))

OUT();

if(count<=)

{

lcd.clear();

digitalWrite(relay,LOW);

lcd.clear();

lcd.print(«Nobody In Room»);

lcd.setCursor(,1);

lcd.print(«Light Is Off»);

delay(200);

}

else

digitalWrite(relay,HIGH);

}

Пример использования с Arduino

Проверим датчик в действии с платформами Arduino. На выходе сенсора цифровой сигнал.
Для быстрого и удобного подключения используйте Troyka Shield.

Код программы

digital-line-sensor.ino
// пин датчика линии
#define SENSOR_LINE_PIN A0
 
void setup() {
  // открываем последовательный порт
  Serial.begin(9600);
}
 
void loop() {
  // считываем значение с датчика
  bool signal = digitalRead(SENSOR_LINE_PIN);
  if ( !signal ) {
    // если сигнал ноль
    // выдаем предупреждение
    Serial.println("Warning! Out of table!");
  } else {
    // если сигнал единица
    Serial.println("OK! Above table!");
  }
 
  delay(100);
}

После загрузки скетча — откройте монитор Serial-порта. Проведите датчиком сначала над столом, а потом за краем стола. При выходе за край стола на мониторе должно возникнуть предупреждение.

Что такое шаговый двигатель?

Прежде чем перейти к статье, давайте сразу договоримся, что статья не направлена на специалистов, а её цель – донести любознательным любителям техники и технологий о таком устройстве, как шаговый двигатель и об основах работы с ними. Поэтому умников и критиков, жаждущих поговорить о великом многообразии управляемого и регулируемого электропривода, прошу идти общаться на тематические ресурсы по ЧПУ-станкам и 3D-принтерам.

Итак, для начала сформулируем определение. Согласно Википедии: «Шаговый электродвигатель — синхронный бесщёточный электродвигатель с несколькими обмотками, в котором ток, подаваемый в одну из обмоток статора, вызывает фиксацию ротора. Последовательная активация обмоток двигателя вызывает дискретные угловые перемещения (шаги) ротора».

Формулировка достаточно понятна, но её последнее предложение может вызвать некоторое недопонимание. Поэтому я предлагаю провести небольшое сравнение.

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

Ротор такого двигателя вращается просто вокруг своей оси без каких-либо ограничений, на 360 градусов, и остановится он в любом месте. Зафиксировать его положением можно только механически (тормозом). По этой причине не получится добиться точного позиционирования исполнительных механизмов, что требуется в робототехнике, ЧПУ-станках и другом автоматизированном оборудовании.

Но шаговые двигатели разработаны для применения в механизмах, где детали поворачиваются точно на требуемый угол.

В приведенном выше определении было сказано «…вызывает дискретные угловые перемещения (шаги) ротора…» — это значит, что ротор шагового двигателя не вращается в обычном понимании, а поворачивается на какой-то определенный, «дискретный» угол. Этот угол называется шагом, отсюда и название «шаговый двигатель». Мне нравится еще одно название этих устройств — «двигатель с конечным числом положений ротора».  

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

Кроме того, что можно поворачивать двигатель на определенный угол и фиксировать его в этом положении, делать это всё можно без схемы обратной связи (датчиков положения и прочего).

Рассматривать типы шаговых двигателей в пределах этой статьи мы не будем, лишь кратко перечислим, какими они бывают. По конструкции:

  1. Реактивные.
  2. С постоянными магнитами.
  3. Гибридные.

По способу питания:

  1. Униполярные (однополярные — ток пропускают через обмотки только в одну сторону).
  2. Биполярные (ток пропускают через обмотки в обе стороны). Здесь драйвер должен подавать напряжение различной полярности, что несколько усложняет схемотехнику. При тех же размерах развивают бОльшую мощность по сравнению с униполярными.

В униполярном двигателе зачастую 5 проводов — 1 общий, от середины каждой из двух обмоток, и 4 от концов обмоток. Иногда говорят «4 обмотки» – это также правильно, поскольку фактически мы получаем 4 обмотки соединенных в общей точки.

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

Управление шаговым двигателем

Различают два способа управления шаговым двигателем:

  1. Полношаговое. Одновременно включается только пара обмоток (без перекрытия с другими). Достигается максимальный момент на валу, но точность установления угла меньше, чем в других способах.
  2. Полушаговое. В этом случае увеличивается количество шагов, соответственно повышается точность установки положения вала. На каждый первый шаг включается одна обмотка, на каждый второй шагами (полушаг) – пара обмоток. Но когда включена одна обмотка момент на валу снижается вдвое.

На анимациях ниже наглядно продемонстрировано

Полношаговое управление

Полушаговое управление

В некоторых источниках отдельно обозначают микрошаговое управление. Используется, когда необходимо максимальное количество шагов и точность управления. По способу управления оно похоже на полушаговый режим, между шагами включаются две обмотки, а отличие в том, что токи в них распределяются не равномерно. Главный недостаток такого подхода — усложняется коммутация (система управления).

Шаг 1. Комплектующие и инструменты

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

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

Инструменты:

  1. пистолет для горячего клея
  2. острый нож
  3. металлическая линейка
  4. некоторые инструменты рисования (в зависимости от ваших личных предпочтений)

Комплектующие:

  1. Arduino Nano
  2. USB-кабель
  3. Датчик газа MQ-4
  4. Дисплей (семисегментный индикатор)
  5. Картон или другой материал для корпуса (вы можете использовать прилагаемый чертеж и распечатать его на толстой бумаге) или заказать трехмерный
Рейтинг автора
5
Материал подготовил
Максим Иванов
Наш эксперт
Написано статей
129
Ссылка на основную публикацию
Похожие публикации