1

(3 ответов, оставленных в Технические вопросы)

ОФФТОП...
Зашибись..."Многоуважаемый" Exoffcog сообщил,что для этого нам понадобится виагра из штатов...

2

(3 ответов, оставленных в Технические вопросы)

Доброго времени суток.
Собственно вопрос заключается вот в чём: можно ли питать ардуино от адаптера и одновременно передавать данные по УСБ? Не повредит ли это плате и как это сделать?

Появилась мысль про CRC, как на 1-WIRE,но не знаю как реализовать...Может сталкивался кто?

4

(7 ответов, оставленных в Технические вопросы)

Спасибо.Буду пробовать. :)

5

(9 ответов, оставленных в Технические вопросы)

Вопросик модераторам.А может быть создать темку в шапке с ответами на такие вопросы?Ну типа расширенный FAQ.

Комрады,выручайте!Ну ни как не победить мне проблему...
Идея в следующем-отослать на плату через serial monitor команду,ну допустим test, а в ответ получить действие.Плата реагирует на отдельные символы типа t или s, а вот целиком на фразу чтобы реагировала как сделать?Хочу ей отсылать всякие команды типа test,start,stop.Кстати возможно команды будут посылаться Processingом...Есть у кого мысли?

7

(7 ответов, оставленных в Технические вопросы)

Огромное спасибо!А можно поподробнее по элементной базе расписать?

Собственно на данный момент найдено:
1.кусок кода для определения адресов датчиков.
2.кусок кода для снятия температуры.
Вопрос: как заставить программу самостоятельно определять количество датчиков,присваивать им имена (например sensor1,sensor2...) и печатать в порт информацию о температуре каждого конкретного датчика?Ну и допустим если поступит запрос о состоянии датчика, например 3-го, то дать ответ только о его состоянии (температуре).
Очень хочется унифицировать программу.

Доброго дня товарищи.Суть вопроса такова:необходимо снимать показания с 2-х, 3-х и более датчиков температуры.В наличии имеются 4 шт. Dallas  ds18b20.Кусок программы который обнаруживает датчики и их адреса есть (при практическом подключении 2-х датчиков их адреса опознались).Кусок программы который общается с датчиком подключенным через шину onewire при паразитном питании есть (ниже).

#include <OneWire.h>
 
//init the one wire interface on pin 10
OneWire  ow(10);
 
//write here the address you receive from the other program
byte sensor[8] = {0x10, 0x1D, 0x30, 0xF9, 0x01, 0x08, 0x00, 0x51};
 
void setup(void) {
  Serial.begin(9600);
}
 
void writeTimeToScratchpad(byte* address){
  //reset the bus
  ow.reset();
  //select our sensor
  ow.select(address);
  //CONVERT T function call (44h) which puts the temperature into the
scratchpad
  ow.write(0x44,1);
  //sleep a second for the write to take place
  delay(1000);
}
 
void readTimeFromScratchpad(byte* address, byte* data){
  //reset the bus
  ow.reset();
  //select our sensor
  ow.select(address);
  //read the scratchpad (BEh)
  ow.write(0xBE);
  for (byte i=0;i<9;i++){
    data[i] = ow.read();
  }
}
 
float getTemperature(byte* address){
  int tr;
  byte data[12];
 
  writeTimeToScratchpad(address);
 
  readTimeFromScratchpad(address,data);
 
  //put in temp all the 8 bits of LSB (least significant byte)
  tr = data[0];
 
  //check for negative temperature
  if (data[1] > 0x80){
    tr = !tr + 1; //two's complement adjustment
    tr = tr * -1; //flip value negative.
  }
 
  //COUNT PER Celsius degree (10h)
  int cpc = data[7];
  //COUNT REMAIN (0Ch)
  int cr = data[6];
 
  //drop bit 0
  tr = tr >> 1;
 
  //calculate the temperature based on this formula :
  //TEMPERATURE = TEMP READ - 0.25 + (COUNT PER Celsius Degree - COUNT REMAIN)
/ (COUNT PER Celsius Degree)
 
  return tr - (float)0.25 + (cpc - cr)/(float)cpc;
}
 
//fahrenheit to celsius conversion
float f2c(float val){
  float aux = val - 32;
  return (aux * 5 / 9);
}
 
//celsius to fahrenheit conversion
float c2f(float val){
  float aux = (val * 9 / 5);
  return (aux + 32);
}
 
void loop(void) {
  float temp;
  float tmp2;
  tmp2 = getTemperature(sensor);
  temp = c2f(tmp2);
 
  Serial.print("Temp = ");
  Serial.print(temp);
  Serial.print(" F or ");
  Serial.print(tmp2);
  Serial.println(" C");
  //wait 30 seconds
  delay(30000);
}

Собственно прошу вас пояснить и прокомментировать строки программы (дабы понимать что тут написано) и как привязать еще один или более датчиков к этой программе.
СПАСИБО!!!!!

10

(9 ответов, оставленных в Технические вопросы)

Сам же отвечаю на свой вопрос.Поборол ХВее и для всех выкладываю проги и описание.Может поможет кому...


Передача команд по XBEE.

Имеем:
1.Freeduino 2009 2 шт.
2.XBee 2 шт.
3.XBee shield 2 шт.
4.Кабель УСБ 1 шт.
5.Питание для Фридуины в виде 8 батареек АА.
6.Светодиоды разных цветов 2шт. + токоограничивающие резисторы к ним.
7.Провода.

Про настройку ХВЕЕ очень хорошо рассказано тут:

http://wiki.amperka.ru/%D0%B2%D0%B8%D0% … 0%B7%D1%8C

Там же много хороших уроков.

Логика такова-одна фридуина подключена к компу и читает значения из СОМ порта компа.Другая питается от батареек и обособлена от компа.Команды между Фридуинами передаются по ХВее.
Если ввести 1, то загорится светодиод  1 на удалённой (питающейся от батареек) плате.Если нажать 0 то загорится светодиод 2 на удалённой плате.Если ввести любой символ, отличный от 0 и 1, то оба светодиода моргнут 4 раза.

Программы.
Плата передатчик:
-----------------------------------------------------------------------------------------
void setup()
{
  Serial.begin(9600);//Создаём подключение на скорости 9600
}

void loop()
{
  while (Serial.available() == 0);//ждём сигнала с порта
  int val = Serial.read();//создаем переменную типа int в которую
  // пихаем полученное из порта значение
  Serial.print(val,DEC); //пуляем переменную как десятичное
  //число в порт
  Serial.flush();//Очищает очередь данных.
}
------------------------------------------------------------------------------------------

Плата приёмник с диодами:
------------------------------------------------------------------------------------------

int warning = 7;// светодиод "аварийный" на порте 7
int normal = 5;// светодиод "нормальный" на порте 5
void setup()
{
  Serial.begin(9600);//стартуем подключение на скоросте 9600
  pinMode (warning, OUTPUT);// порт 7 как выход
  pinMode (normal, OUTPUT);// порт 5 как выход
}
void loop ()
{
  while (Serial.available() == 0);//ждём сигнала от первой дуины
  int var = Serial.read() - '0';//читаем значение как простое число(десятичное)
  if (var == 1)//если это 1 то...
{
    digitalWrite(warning,HIGH); // ...зажигаем "аварийный" диод
    digitalWrite(normal,LOW);// тушим "нормальный" диод
}
  else if (var == 0) // если это 0 то...
{
    digitalWrite(normal,HIGH);//...зажигаем "нормальный" диод
    digitalWrite(warning,LOW);// тушим "аварийный" диод
}
  else // ну а если ни то, ни другое, а что либо ещё (например 2)
  {
    digitalWrite(warning,HIGH);//зажигаем "аварийный" диод
    digitalWrite(normal,HIGH);//зажигаем "нормальный" диод
    delay(200);// пауза
    digitalWrite(warning,LOW);//тушим "аварийный" диод
    digitalWrite(normal,LOW);//тушим "нормальный" диод
    delay(200);// пауза
    digitalWrite(warning,HIGH);
    digitalWrite(normal,HIGH);
    delay(200);
    digitalWrite(warning,LOW);
    digitalWrite(normal,LOW);
    delay(200);
    digitalWrite(warning,HIGH);
    digitalWrite(normal,HIGH);
    delay(200);
    digitalWrite(warning,LOW);
    digitalWrite(normal,LOW);
    delay(200);
    digitalWrite(warning,HIGH);
    digitalWrite(normal,HIGH);
    delay(200);
    digitalWrite(warning,LOW);
    digitalWrite(normal,LOW);
    delay(200);
   Serial.flush();//Очищает очередь данных
  }
}



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

11

(7 ответов, оставленных в Технические вопросы)

У меня всё хозяйство находится в одной коробке вместе с 230.Вопросы безопасности учтены.Нужен практический опыт применения.
Ещё раз спасибо всем ответившим.

12

(7 ответов, оставленных в Технические вопросы)

Никто не сталкивался с вопросом измерения значения переменного напряжения в сетях 230 Вольт при помощи Фридуино? Если сталкивались,то поделитесь,пожалуйста,как реализовали.
Спасибо.

13

(9 ответов, оставленных в Технические вопросы)

Спасибо Вам мил человек!Только сейчас дошли руки до платы.Буду пробовать!

14

(9 ответов, оставленных в Технические вопросы)

Отзовитесь люди!!!!Так знает ли кто-нибудь как с шилдами работать и передавать данные с одной хвее на другую хвее!
Помогите пожалуйста,сам не могу разобраться!

15

(9 ответов, оставленных в Технические вопросы)

Правильно ли я понимаю:
Заливаем в первую ардуину (передатчик данных) следующий скетч (помимо кода приёма данных от датчика температуры)

// Создаём объект XBee в начале скетча
XBee xbee = XBee();

// Даём команду XBee на передачу данных со скоростью 9600
xbee.begin(9600);

// Создаём массив для хранения данных которые хотим передать
uint8_t payload[] = { 'H', 'i' };

// сюда вставим код получения данных с датчика температуры в массив? ()

//Определяем адрес дистанционного модуля XBee (это SH + SL (что это означает?))
XBeeAddress64 addr64 = XBeeAddress64(0x0013a200, 0x403e0f30);

// Создаём TX запрос (т.е. запрос на передачу)
ZBTxRequest zbTx = ZBTxRequest(addr64, payload, sizeof(payload));

// Send your request
//Отправляем запрос (имеется ввиду данные которые под которые создавали массив)
xbee.send(zbTx);



На принимающей стороне (вопрос вызывает только номер порта в ардуине на который принимается сигнал и нужно ли на принимающей стороне писать что либо для XBee модуля):


int outputPin = 13;                //здесь храним номер контакта (какой контакт указать?)
int val;                           //здесь будет храниться принятый символ

//далее код программы для обработки полученного символа (мигание диода или вывод на экран и т.д. по необходимости)



Прошу не ругаться.Я новичёк и если честно, то запутался.

16

(9 ответов, оставленных в Технические вопросы)

Доброго времени суток.Никак не могу разобраться и найти простые примеры реализации допустим простого датчика температуры с использованием передачи данных по Xbee.
Собственно есть две платы freeduino 2009 и 2 платы Xbee shield v5  с модулями Xbee pro. Датчик температуры я прицеплю к одной фридуине без проблем.Не могли бы Вы опубликовать пример кода для передачи данных от одной фридуины на другую?
Спасибо.