Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Солнечный трекер Arduino

Компоненты и расходные материалы

Arduino UNO
× 1
Микро-серводвигатель SG90
× 2
LDR, 5 МОм
× 4
Резистор 330 Ом
× 4
Поворотный потенциометр (общий)
× 1
Кнопочный переключатель, кнопка
× 2
Мини-солнечная панель
× 1

Необходимые инструменты и машины

IDE Arduino
Parallax PLX-DAQ

Об этом проекте

Этот проект представляет собой открытый аппаратно-программный тестовый стенд для солнечного трекера. Предлагаемый прототип основан на двухосном солнечном трекере, управляемом с помощью Arduino Uno, который представляет собой платформу для прототипирования с открытым исходным кодом, основанную на простом в использовании аппаратном и программном обеспечении. Солнечным трекером можно управлять автоматически с помощью датчиков LightDependent Resistor (LDR) или вручную с помощью потенциометра. Кроме того, этот испытательный стенд предоставляет виртуальные приборы на основе Excel, в которых могут быть записаны и представлены данные его солнечного трекера. Используемое оборудование было выбрано недорогим, компактным и универсальным. Предлагаемый испытательный стенд разработан, чтобы помочь студентам развить понимание теории управления и ее применения.

Предлагаемый испытательный стенд представлен на рис. 1. Он основан на солнечном трекере, который может вращаться автоматически для отслеживания солнца с помощью четырех датчиков LDR и двух серводвигателей (SM1 и SM2) или вручную с помощью потенциометра. Для переключения между двумя режимами (автоматическим и ручным) используется кнопка. Другая кнопка используется для подключения SM1 (серводвигатель вверх-вниз) или SM2 (серводвигатель влево-вправо) к потенциометру для управления их движением. Кроме того, компьютер используется как виртуальный инструмент для визуализации режима и тока, напряжения и мощности фотоэлектрической панели в зависимости от времени в MS Excel. Плата Arduino Uno используется для реализации всех требований к программному обеспечению системы.

Механический дизайн

Как показано на рис. 2, 3D-модель системы автоматизированного проектирования (САПР) солнечного трекера разработана в CATIA. Он состоит из фотоэлектрической панели, левого-правого и восходящего-нижнего серводвигателей и четырех датчиков LDR. Для горизонтальной оси подшипник закреплен параллельно серводвигателю вверх-вниз для большей гибкости. Солнечный трекер имеет две степени свободы:с востока на запад с помощью серводвигателя слева-направо и с юга на север с помощью серводвигателя вверх-вниз. Датчики LDR размещаются в четырех углах фотоэлектрической панели и помещаются в темные трубки с небольшим отверстием наверху для обнаружения солнечного света. Эти темные трубки также считаются концентраторами излучения и используются для повышения надежности солнечного трекера.

Аппаратная система

На рис. 3 представлена ​​электронная схема предлагаемого стенда. В автоматическом режиме микроконтроллер преобразует аналоговые значения датчиков LDR (контакты A0 - A3) в цифровые значения. Затем он управляет двумя серводвигателями (вверх-вниз и влево-вправо), используя два сигнала широтно-импульсной модуляции (ШИМ) (контакты 5 и 6) для отслеживания солнца. Движение вращения происходит по двум осям:по азимуту с востока на запад в соответствии с суточной траекторией солнца и по высоте с юга на север в соответствии с сезонной траекторией солнца. В ручном режиме потенциометр (вывод A4) используется для управления движением двух серводвигателей, кнопка (вывод 11) используется для подключения потенциометра либо к серводвигателю вверх-вниз, либо к серводвигателю влево-вправо. Кроме того, еще одна кнопка (контакт 12) используется для переключения между двумя режимами. Кроме того, фотоэлектрическое напряжение измеряется через аналоговый вывод A5 Arduino, затем вычисляется фотоэлектрический ток, поскольку резистор нагрузки уже известен. Затем на компьютер отправляются фотоэлектрические ток, напряжение и мощность в зависимости от времени, а также фактический режим, чтобы представить их в реальном времени в MS Excel.

Схема датчика LDR выполнена в виде схемы делителя напряжения. Изменение силы света пропорционально изменению выходного напряжения делителя. Верхняя часть делителя потенциала имеет напряжение 5 В, заземление - 0 В, а выход делителя напряжения подключен к аналоговому входу ( A 0, например) микроконтроллера. Затем аналого-цифровой преобразователь (АЦП) микроконтроллера преобразует аналоговое значение, считываемое A 0 в цифровое значение от 0 до 1023, потому что АЦП закодирован в 10 битах, и в соответствии с этим значением можно узнать уровень освещенности. Номинал резисторов, используемых в делителях напряжения, составляет 330 Ом.

Используются два серводвигателя 180 градусов. Серводвигатель (MG996R) для управления солнечным трекером в соответствии с вертикальной осью, которая представляет собой левый-правый серводвигатель. И микро-серводвигатель (SG90) для управления солнечным трекером в соответствии с горизонтальной осью, которая является серводвигателем вверх-вниз. Преимущество серводвигателя в том, что мы можем управлять его остановкой, запуском, направлением вращения и скоростью, используя один слаботочный провод, подключенный непосредственно к выходу микроконтроллера, без использования каких-либо драйверов. Используемые серводвигатели управляются платой Arduino UNO через трехжильный электрический кабель, как показано на рис. 3, два провода для питания и один провод для ШИМ для управления его положением.

Дизайн встроенного программного обеспечения

Встроенное программное обеспечение - это часть, которая будет встроена в оборудование (Arduino Uno) для управления и мониторинга испытательного стенда солнечного трекера. Встроенное программное обеспечение предназначено для удовлетворения следующих требований:

1. Стенд имеет два режима:ручной и автоматический. К выводу 12 подключена кнопка для переключения между двумя режимами.

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

3. При активном автоматическом режиме будет выполняться алгоритм, представленный на рис. 4. Последний использует аналоговые значения, возвращаемые датчиками LDR. Например, учитывая азимут или вертикальную ось, сравниваются средние значения от двух правых LDR и двух левых LDR, и если левый набор LDR получает больше света, солнечный трекер будет перемещаться в этом направлении через левый-правый серводвигатель. Последний будет продолжать вращаться, пока результат разности не окажется в диапазоне [-10, 10]. Этот диапазон используется для стабилизации контроллера, и как только солнечный трекер перпендикулярен солнцу, дальнейшее управление не производится. С другой стороны, если правый набор LDR получает больше света, солнечный трекер перемещается в этом направлении через левый-правый серводвигатель и будет продолжать вращаться, пока результат разности не окажется в диапазоне [-10, 10]. То же самое используется для оси возвышения. Кроме того, мы также определили среднее излучение между четырьмя датчиками LDR и, если это значение меньше небольшого значения (8:значение, которое было отрегулировано и протестировано на практике и возвращается, когда облучение равно нулю). То есть наступила ночь. В этом случае солнечный трекер должен вернуться в положение восхода солнца. Например, если положение восхода солнца можно достичь, установив 0 градусов для серводвигателя влево-вправо и 30 градусов для серводвигателя вверх-вниз. Это легко сделать с помощью функции C «servox. write (angle) », предоставленный Arduino IDE.

4. Фотоэлектрическое напряжение, полученное через аналоговый вывод A5, необходимо обработать и использовать для вычисления фотоэлектрического тока и мощности. Затем все эти данные и фактический режим должны быть отправлены через USB-кабель на компьютер, а затем представлены в MS Excel.

PLX-DAQ Макрос Excel используется для сбора данных из микроконтроллера Arduino в электронную таблицу Excel. Нам нужно только скачать его. После установки на ПК будет автоматически создана папка с именем «PLX-DAQ», в которой находится ярлык с именем «PLX-DAQ Spreadsheet». Затем, чтобы установить связь между платой и Excel, нам просто нужно открыть электронную таблицу и определить параметры подключения (скорость передачи и порт) в окне PLX-DAQ (рис. 5). После этого, после нажатия на «подключить» выходные данные будут собраны и отображены в режиме реального времени в электронной таблице Excel

Прототип

На рис. 6 показан солнечный трекер в разобранном и собранном состояниях. Как показано, вся конструкция была изготовлена ​​из деревянных пластин, и ясно, что все упомянутые компоненты были использованы для создания солнечного трекера с ручным и автоматическим режимами (датчики LDR, Arduino Uno, серводвигатели, потенциометр, кнопки и небольшая фотоэлектрическая панель).

На рисунке 7 показан весь испытательный стенд, трекер солнечной активности с виртуальными приборами и искусственная лампа, которая может освещать свет для проверки солнечного трекера. Солнечный трекер и компьютер подключаются через USB-кабель. После получения фотоэлектрического напряжения контроллер обрабатывает эту информацию и использует ее для вычисления фотоэлектрического тока и мощности. Затем все эти данные отправляются на компьютер, чтобы представить их в MSExcel. Из фиг. 5 и 6 видно, что предлагаемый испытательный стенд небольшой, гибкий и простой в использовании. Это может позволить студентам, исследователям и инженерам легко применять свои алгоритмы, прежде чем приступить к реализации большого устройства слежения за солнечным светом.


Код

  • Испытательный стенд с встроенным программным обеспечением для отслеживания солнечной активности
Стенд для тестирования встроенного программного обеспечения солнечного трекера Arduino
 // Библиотека серводвигателя # include  // Инициализируем переменные int mode =0; int ax =0; int buttonState1 =0; int buttonState2 =0; int prevButtonState1 =0; int prevButtonState2 =0; int ldrtopr =0; // верхний правый LDR int ldrtopl =1; // верхний левый LDR int ldrbotr =2; // нижний правый LDR int ldrbotl =3; // LDR внизу слева int topl =0; int topr =0; int botl =0; int botr =0; // Объявление двух сервоприводов Servo servo_updown; Servo servo_rightleft; int threshold_value =10; // чувствительность измеренияvoid setup () {Serial.begin (9600); // настройка последовательного соединения // открывает последовательный порт, устанавливает скорость передачи данных 9600 бит / с Serial.println ("CLEARDATA"); // очищаем все данные, которые уже были помещены в Serial.println ("LABEL, t, Voltage, current, power, Mode"); // определение заголовков столбцов (команда PLX-DAQ) pinMode (12, INPUT); // Кнопка переключения режима pinMode (11, INPUT); // Переключатель осей pinMode (A4, INPUT); // Потенциометр для движения вправо-влево и для движения вверх-вниз servo_updown.attach (5); // Движение серводвигателя вверх-вниз servo_rightleft.attach (6); // движение серводвигателя вправо-влево} void loop () {// pv_power (); char Mode; float volt =analogRead (A5) * 5.0 / 1023; напряжение поплавка =2 * вольт; // Вольт =(R1 / R1 + R2) * Напряжение / R1 =R2 =10 Ом => Напряжение =2 * Вольт) плавающий ток =напряжение / 20; // I =напряжение / (R1 + R2) float power =Voltage * current; Serial.print ("ДАННЫЕ, ВРЕМЯ,"); // Команда PLX-DAQ Serial.print (Voltage); // отправляем напряжение на последовательный порт Serial.print (","); Serial.print (текущий); // отправляем текущий на последовательный порт Serial.print (","); Serial.print (мощность); // отправляем питание на последовательный порт Serial.print (","); // Serial.println (Режим); buttonState1 =digitalRead (12); if (buttonState1! =prevButtonState1) {if (buttonState1 ==HIGH) {// Измените режим и включите правильный индикатор if (mode ==1) {mode =0; } else {режим =1; }}} prevButtonState1 =buttonState1; задержка (50); // Ждем 50 миллисекунд if (mode ==0) {Mode ='M'; Serial.println (Режим); // отправить режим "Ручной" на последовательный порт manualsolartracker (); } else {// автоматический режим Mode ='A'; Serial.println (Режим); automaticsolartracker (); // режим отправки "Автоматический" на последовательный порт}} void automaticsolartracker () {// захват аналоговых значений каждой LDR topr =analogRead (ldrtopr); // захват аналогового значения верхнего правого LDR topl =analogRead (ldrtopl); // захват аналогового значения верхнего левого LDR botr =analogRead (ldrbotr); // захват аналогового значения правого бота LDR botl =analogRead (ldrbotl); // захват аналогового значения левой LDR бота // вычисление среднего int avgtop =(topr + topl) / 2; // среднее значение верхних LDR int avgbot =(botr + botl) / 2; // среднее значение нижних LDR int avgleft =(topl + botl) / 2; // среднее значение левых LDR int avgright =(topr + botr) / 2; // среднее значение правых LDR // Получить разные int difffelev =avgtop - avgbot; // Получить различное среднее значение между LDR вершиной и LDR ботом int diffazi =avgright - avgleft; // Получить различное среднее значение между LDR вправо и LDR влево // движение солнечного трекера влево-вправо if (abs (diffazi)> =threshold_value) {// Изменить положение, только если разница в освещении больше, чем threshold_value if (diffazi> 0 ) {если (servo_rightleft.read () <180) {servo_rightleft.write ((servo_updown.read () + 2)); }} если (diffazi <0) {если (servo_rightleft.read ()> 0) {servo_rightleft.write ((servo_updown.read () - 2)); }}} // движение солнечного трекера вверх-вниз if (abs (diffelev)> =threshold_value) {// Меняем положение, только если разница в освещении больше, чем thethreshold_value if (diffelev> 0) {if (servo_updown.read () <180) {servo_updown.write ((servo_rightleft.read () - 2)); }} если (difffelev <0) {если (servo_updown.read ()> 0) {servo_updown.write ((servo_rightleft.read () + 2)); }}}} void manualsolartracker () {buttonState2 =digitalRead (13); if (buttonState2! =prevButtonState2) {if (buttonState2 ==HIGH) {// Изменим режим и загорится правильный индикатор if (ax ==1) {ax =0; } else {ax =1; }}} prevButtonState2 =buttonState2; задержка (50); // Ожидание 50 миллисекунд if (ax ==0) {// управление перемещением вправо-влево servo_rightleft.write (map (analogRead (A4), 0, 1023, 0, 180)); } else {// // управление движением вверх-вниз servo_updown.write (map (analogRead (A4), 0, 1023, 0, 180)); }} 

Схема


Производственный процесс

  1. Цифровые игральные кости Arduino
  2. Игровой контроллер Arduino
  3. Solar Tracker V2.0
  4. Игра Pixel Chaser
  5. Солнечный трекер на основе Интернета вещей (IoT)
  6. Отталкивающая электромагнитная левитация Arduino
  7. Домашний контроллер Arduino, активированный Alexa
  8. NeoMatrix Arduino Pong
  9. Измерение солнечной радиации с помощью Arduino
  10. Светодиодная игра в рулетку