Подключение концевого выключателя
- Войдите на сайт для отправки комментариев
Люди добрые помогите.
Есть не большой проект. Открытие ворот по радиоканалу.
Суть проекта такова:
На передатчике (Ардуино UNO) имеется двухпозиционный переключатель без фиксации (правое положение - центр - левое положение) и трехцветный светодиод для контроля положения актуатора.
Приемник (Ардуино UNO) - двухканальное реле к которому подключен линейный привод (актуатор) и два концевых выключателя (КВ).
Принцип действия:
1. На приемнике горит красный светодиод, который сигнализирует, что ворота закрыты (т.е. КВ№1 - замкнут, КВ№2 - разомкнут), включаем левое положение переключателя, подаем питание на 1-й канал реле актуатора и начинается движение актуатора вперед, КВ№1 размыкается и при этом загорается синий светодиод, который сигнализирует, что ворота приоткрыты или идет движение актуатора, дойдя до крайнего положения актуатор замыкает КВ№2, отключает реле актуатора и загорается зеленый светодиод, который сигнализирует, что ворота открыты (при этом КВ№1 - разомкнут).
2. Включаем правое положение переключателя на передатчике подаем питание на 2-й канал реле актуатора и начинается движение актуатора назад, КВ№2 размыкается и при этом загорается синий светодиод, который сигнализирует, что ворота приоткрыты или идет движение актуатора, дойдя до крайнего положения актуатор замыкает КВ№1, отключает реле актуатора и загорается красный светодиод, который сигнализирует, что ворота закрыты (при этом КВ№2 - разомкнут).
3. Если отпустить переключатель во время движения актуатора (вперед/назад) в среднее положение актуатор останавливается, при этом горит синий светодиод.
Смог добиться, только включить актуатор вперед и назад, а как подключить концевые выключатели и чтобы они включали светодиоды я не знаю, в Интернете ни чего подобного не нашел, поэтому и прошу у Вас помощи, или хотя бы подскажите где найти.
Прилагаю свой код и схему.
Передатчик
#include <RF24Network.h> //Библиотека для работы в радиосети
#include <RF24.h> //Библиотека для работы с радиомодулем
#include <SPI.h> // Подключение библиотеки шины SPI
// Установки радиомодуля и сети
RF24 radio(9, 10); //Подключение радиомодуля к Ардуино УНО (CE -9 пин, CSN - 10 пин,
//MOSI - 11 пин, MISO - 12 пин, SCK - 13 пин
RF24Network network(radio); // Инициализация радиосети
const uint16_t t_node = 00; // адрес основного узла (пульт управления)
const uint16_t r_node_A = 01; //адрес гусеничной телеги
int btnAkt1 = 2; // пин для кнопки актуатора (вперед)
int btnAkt2 = 3; // пин для кнопки актуатора (назад)
int LedR = 4; // пин-выход для красного светодиода
int LedB = 5; // пин-выход для синего светодиода
int LedG = 6; // пин-выход для зеленого светодиода
//Определение массивов, аргументов функций
int data [2]; // массив передаваемых данных
//Начало программы
void setup(void)
{
//Инициализация серийного монитора
Serial.begin(57600);
// Настройка радиосети
radio.begin(); //инициализация радио
network.begin(/*channel*/ 128, /*node address*/ t_node); // канал и адрес узла
pinMode(2, INPUT_PULLUP); //устанавливаем пин3 на вход и включаем подтягивающий резистор
pinMode(3, INPUT_PULLUP); //устанавливаем пин3 на вход и включаем подтягивающий резистор
pinMode (4, OUTPUT);
pinMode (5, OUTPUT);
pinMode (6, OUTPUT);
}
//Основной цикл программы
void loop(void)
{
//Инициализация радиосети
network.update(); //трансляция данных между узлами
data[0] = digitalRead(btnAkt1);
data[1] = digitalRead(btnAkt2);
//Перадача данных на серрийный монитор
Serial.print("Sending...");
//Отправка данных на приемник с адрессом 01
RF24NetworkHeader header(/*to node*/ r_node_A); //тут указываем на какое устройство отправляем данные
bool ok = network.write(header, &data, sizeof(data)); //передаем, функция возвращает статус
if (ok) { //смотрим на статус и информируем о работе сети и отписываемся в Serial
Serial.println("ok."); //связь есть
}
else {
Serial.println("failed."); //связи нет
}
}
Приемник
#include <RF24Network.h> // Подключение библиотеки для работы в радиосети #include <RF24.h> // Подключение радиомодуля для работы с радиомодулем #include <SPI.h> RF24 radio(9, 10); //Подключение радиомодуля к Ардуино УНО (CE -9 пин, CSN - 10 пин, //MOSI - 11 пин, MISO - 12 пин, SCK - 13 пин RF24Network network(radio); // Инициализация радиосети const uint16_t r_node_A = 01; const uint16_t t_node = 00; //Установки актуатора int forwards = 2; //движение актуатора вперед int backwards = 3;//движение актуатора назад int KV_1 = 4; // концевой выключатель №1 int KV_2 = 5; // концевой выключатель 32 int data[2]; // Массив принимаемых данных void setup(void) { Serial.begin(57600); pinMode(4, INPUT_PULLUP); //Пин4 концевого выключателя №1 на вход pinMode(5, INPUT_PULLUP); //Пин5 концевого выключателя №2 на вход pinMode(2, OUTPUT); //Пин2 1-го канала реле актуатора на выход pinMode(3, OUTPUT); //Пин3 2-го канала реле актуатора на выход delay(50); radio.begin(); // Инициализация радио network.begin(/*channel*/ 128, /*node address*/ r_node_A); // канал и адрес узла } void loop(void) { network.update(); // нужно постоянно запускать, чтобы транслировались while ( network.available() ) // если пришли данные { RF24NetworkHeader header; network.read(header, &data, sizeof(data)); ////////////////////////////////////////////// if (data[0] == 0) { digitalWrite(forwards, HIGH); //включается реле движения актуатора вперед } else { digitalWrite(forwards, LOW); //остановка актуатора } ////////////////////////// if (data[1] == 0) { digitalWrite(backwards, HIGH); //включается реле движения актуатора назад } else { digitalWrite(backwards, LOW);//остановка актуатора } } }