Подключение концевого выключателя

OOM
Offline
Зарегистрирован: 07.01.2017

Люди добрые помогите.

Есть не большой проект. Открытие ворот по радиоканалу.

Суть проекта такова:

На передатчике (Ардуино 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."); //связи нет
    }
}
   

 

OOM
Offline
Зарегистрирован: 07.01.2017

Приемник

#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);//остановка актуатора
    }
  }
}