переменный резистор 1 кОм

Обсуждаем Arduino, Raspberry Pi и другие электронные компоненты и проекты DIY
Аватара пользователя
Mr.Kubikus
Сотрудник ПАКПАК
Сообщения: 1018
Зарегистрирован: 22 окт 2010, 23:57

Re: переменный резистор 1 кОм

Сообщение Mr.Kubikus »

Я думаю, что реализуемо. Там даже в описании товара написано:
* Steps to set to MASTER:
* Set PIO11 HIGH with a 10K resistor in between.
* Power on, module comes into AT Command Response Status
* Open HyperTerminal or other serial tool, set the baud rate 38400, 8 data bits, 1 stop bit, no parity bit, no Flow

Control
* Via serial port, send characters "AT + ROLE = 1 r n",if successful, return "OK r n", where r n is carriage return.
* Set PIO11 LOW, re-power, then in Master state, automatically search for slave module and connect.
С уважением, Григорий
GitHub FB ВК
Тима
Сообщения: 131
Зарегистрирован: 16 ноя 2012, 21:03

Re: переменный резистор 1 кОм

Сообщение Тима »

Mr.Kubikus писал(а):Классное ТЗ!
Это только часть задания!
А целиком это как-то так: Система управления микроклиматом в теплице. Один блок на меге 2560 с экраном 2004 для сбора данных и несколько управляющих блоков на нано. Мега собирает данные, обрабатывает и раздает команды, а нано исполняет и контролирует исполнение. Такая структура выбрана для того, чтоб не тормозился процесс сбора данных.
К меге подключены: датчики температуры(воздух, почва, вода в емкости, отопление), датчик влажности(воздух, почва), датчик уровня в емкости(поплавки), датчик освещенности, аварийный датчик утечки метана. Один нано будет управлять котлом и фрамугами, к нему будут подключены: датчик положения фрамуги, аварийные конечники, датчик пламени. Другой нано будет управлять системой досветки и системой затенения.
Еще рассматриваю вариант автоматического приготовления смеси для гидропоники...
Вот набросок скетча для нано(управление фрамугой):

Код: Выделить всё

//команда а проходит с другого контроллера
//"а" вычисляется по принципу:
//если t<25с, а=0
//если t>25с, а=1 
//если t>26с, а=2 
//если t>27с, а=3 

//если а=0 - 0%  - 100
//если а=1 - 33% - 200
//если а=2 - 66% - 300
//если а=3 - 100% - 400

int a, b, x = 0;//а-команда управления, b-метка положения, х-положение
int op = 13; //пин открывания фрамуги
int cl = 12; //пин закрывания фрамуги
void setup()
{
  x = analogRead(0); //считываем положение фрамуги
  if (x<100) b=0;  //определяем положение и присваиваем b
  if ((x<200) & (x>100)) b=1;
  if ((x<300) & (x>200)) b=2;
  if (x>300) b=3;
}

void loop()
{  
  
  if ((a=0) & (b>0)) {  //если команда а=0 и положение b>0
    while (x>100) {digitalWrite(cl,HIGH);} //даем команду на закр. пока х>100
  digitalWrite(cl,LOW); b = 0; //отключаем привод и присваиваем b=0
   }

  if ((a=1) & (b<1)) { //если команда а=1 и положение b<1
    while (x<200) {digitalWrite(op,HIGH);} //даем команду на откр. пока х<200
  digitalWrite(op,LOW); b = 1; //отключаем привод и присваиваем b=1
  }
  if ((a=1) & (b>1)) { //если команда а=1 и положение b>1
    while (x>200) {digitalWrite(cl,HIGH);} //даем команду на закр. пока х>200
  digitalWrite(cl,LOW); b = 1;  //отключаем привод и присваиваем b=1
  }
  
  if ((a=2) & (b<2)) {  //если команда а=2 и положение b<2
    while (x<300) {digitalWrite(op,HIGH);} //даем команду на откр. пока х<300
  digitalWrite(op,LOW); b = 2;  //отключаем привод и присваиваем b=2
  }
  if ((a=2) & (b>2)) {  //если команда а=1 и положение b>2
    while (x>300) {digitalWrite(cl,HIGH);}  //даем команду на закр. пока х>300
  digitalWrite(cl,LOW); b = 2;  //отключаем привод и присваиваем b=2
  }
  
  if ((a=3) & (b<3)) { //если команда а=3 и положение b<3
    while (x<400) {digitalWrite(op,HIGH);} //даем команду на откр. пока х<400
  digitalWrite(op,LOW); b = 3;  //отключаем привод и присваиваем b=3
  }
}
Вот в него надо добавить прерывания по срабатыванию аварийных концевиков!
Тима
Сообщения: 131
Зарегистрирован: 16 ноя 2012, 21:03

Re: переменный резистор 1 кОм

Сообщение Тима »

Mr.Kubikus писал(а):Я думаю, что реализуемо. Там даже в описании товара написано:
* Steps to set to MASTER:
* Set PIO11 HIGH with a 10K resistor in between.
* Power on, module comes into AT Command Response Status
* Open HyperTerminal or other serial tool, set the baud rate 38400, 8 data bits, 1 stop bit, no parity bit, no Flow

Control
* Via serial port, send characters "AT + ROLE = 1 r n",if successful, return "OK r n", where r n is carriage return.
* Set PIO11 LOW, re-power, then in Master state, automatically search for slave module and connect.
Там написано на буржуйском языке, а я на нем не балакаю... :cry: Без Вашей помощи тут никак!
Да, кстати, модуль у меня на 38400 не заработал, долго мучился, пока не решил попробовать на 9600, и все заработало нормально!
Аватара пользователя
Mr.Kubikus
Сотрудник ПАКПАК
Сообщения: 1018
Зарегистрирован: 22 окт 2010, 23:57

Re: переменный резистор 1 кОм

Сообщение Mr.Kubikus »

Серьезная задача. Целая распределенная система.

Прерывания подключаются функцией attachInterrupt().

attachInterrupt(interrupt, function, mode), где:

interrupt: номер прерывания(int)

function: функция, которая будет вызываться когда произойдет прерывание. Эту функцию надо объявить без параметров и она не должна возвращать результат. Еще её называют обработчиком прерывания - interrupt service routine.

mode: параметр указывает - по какому событию генерировать прерывание. Есть четыре варианта:
  • LOW прерывание генерируется когда вход находится в состоянии LOW.
    CHANGE прерывание генерируется когда состояние на входе изменяется с LOW на HIGH или наоборот.
    RISING прерывание генерируется когда состояние на входе изменяется с LOW на HIGH.
    FALLING прерывание генерируется когда состояние на входе изменяется с HIGH на LOW.
Пример:

Код: Выделить всё

int pin = 13;
volatile int state = LOW;

void setup()
{
  pinMode(pin, OUTPUT);
  attachInterrupt(0, blink, CHANGE);
}

void loop()
{
  digitalWrite(pin, state);
}

void blink()
{
  state = !state;
}
С уважением, Григорий
GitHub FB ВК
Тима
Сообщения: 131
Зарегистрирован: 16 ноя 2012, 21:03

Re: переменный резистор 1 кОм

Сообщение Тима »

С общением двух ардуин по блютуз пока повременим. Пока нужно пообщаться по порту. Соединить надо мегу2560(serial1) и нано(serial0).
Если я правильно понял необходимо соединить RX(mega pin19)-> TX(nano pin1) и TX(mega pin18)->RX(nano pin0).
На какое расстояние можно разнести ардуины при таком соединении?
Аватара пользователя
Mr.Kubikus
Сотрудник ПАКПАК
Сообщения: 1018
Зарегистрирован: 22 окт 2010, 23:57

Re: переменный резистор 1 кОм

Сообщение Mr.Kubikus »

Расстояние зависит от окружающих условий и наличия источников ЭМ помех. Думаю 3-5 метров будет работать. На большие расстояния надо использовать дифференциальную линию связи - витую пару и драйверы RS485. Например, Плата с драйвером RS-485.
С уважением, Григорий
GitHub FB ВК
Ответить