Jump to content
2a420

нужен скетч для ардуино

Recommended Posts

К каждому датчику провода должны идти в виде свитой пары. Это так?

Если не поможет, попробуй подключить по трёх проводной схеме закоротив резистор 100 Ом.

Share this post


Link to post
Share on other sites
2 часа назад, mazzi сказал:

К каждому датчику провода должны идти в виде свитой пары. Это так?

Если не поможет, попробуй подключить по трёх проводной схеме закоротив резистор 100 Ом.

да к датчикам по витой паре

что с чем коротить то.

Share this post


Link to post
Share on other sites

Финальные результаты тестирования литиевых батареек FANSO при нормальных условиях

Перед разработчиком устройства, в котором предполагается использование батарейки, всегда стоит задача выбора того или иного бренда. Конечно, наиболее объективный результат по качеству можно получить при реальном тестировании в режиме работы самого устройства. Для того чтобы у разработчиков была некоторая информация о реальных значениях основных параметров ЛХИТ, инженеры компании КОМПЭЛ решили провести серию из трех тестов. Первый тест на постоянный разряд в нормальных климатических условиях, начатый в апреле 2019 г., мы завершили.

Узнать финальный результат тестирования

Закоротить резистор 100 Ом. Или вместо резистора запаять перемычку.

 

Share this post


Link to post
Share on other sites

К каждому датчику провода должны идти отдельным свитым жгутом. Это так?

Share this post


Link to post
Share on other sites
                     

Видеокурс Работаем с микроконтроллерами STM32G0. Впервые на русском языке.

В цикле видеокурсов по работе с STM32G0 от компании STMicroelectronics показаны архитектура, периферия (особенности процессорного ядра, режимов пониженного питания, векторов прерываний, DMA и мультиплексора DMA, схемы тактирования и сброса, и.т.д.) и даны практические примеры. Материал дает наглядное понимание того, как начать работу на новых микроконтроллерах STM32G0

Подробнее

Нам нужно добиться, что бы датчики температуры работали.

Попробуйте подключить датчики прямо к плате без длинных проводов. И покажите что показывает скетч при обмене с терминалом.

Share this post


Link to post
Share on other sites

я же уже подключал датчики к плате с скетчем из примеров провода при этом были сантиметров по 10 и в мониторе были текущие показания с датчиков.

Share this post


Link to post
Share on other sites

А тут все еще интересно, жизнь кипит :)

Может легче будет в режиме Голоса или скайпа, быстрее решиться вопрос.

Share this post


Link to post
Share on other sites

Может.но я не использую этот способ.Здесь то почему нельзя?Жизнь хоть какая то шевелится)))

Share this post


Link to post
Share on other sites

Получается, что с короткими проводами работает, а с длинными нет? Я правильно понял?

Share this post


Link to post
Share on other sites

провода те же. скетчи разные.

Edited by 2a420

Share this post


Link to post
Share on other sites

Я достал такую же ардуино, попробую у себя, потом отпишусь.

Share this post


Link to post
Share on other sites

328-я имеет фьюз CKDIV8, запрограммированный производителем. Проверьте, возможно из-за него тайминги "ушли".

Share this post


Link to post
Share on other sites

Я собрал у себя , всё заработало. Попробовал с паразитным питанием и с нормальным. Только температуру считает в 10 раз больше, там опечатка, вместо (float)raw / 16.0; нужно набрать (float)raw / 160.0;

После исправления меряет чётко.

Share this post


Link to post
Share on other sites

так может корректный скетч дадите я тоже попробую?

Share this post


Link to post
Share on other sites
#include <MsTimer2.h>
#include <OneWire.h>
//#define POWER_MODE  1 // режим питания, 0 - внешнее, 1 - паразитное
OneWire sensDs1 (2);  // датчик подключен к выводу 2
OneWire sensDs2 (3);  // датчик подключен к выводу 3
OneWire sensDs3 (4);  // датчик подключен к выводу 4

byte bufData1[12];  // буфер данных
byte adr1[8];
float temperature1;  // измеренная 
byte bufData2[12];  // буфер данных
byte adr2[8];
float temperature2;  // измеренная 
byte bufData3[12];  // буфер данных
byte adr3[8];
float temperature3;  // измеренная 

float tOpen=30.0, tClose=20.0;

byte nTask; // номер задачи
byte door1, door2, door3; // 0 - unknown, 1 - open, 2 - close
byte Pump, oldPump;
int16_t  debounce;
int16_t  raw;
byte present = 0, i;

// --------------------------------------------------------------------

// --------------------------------------------------------------------
void timerInterrupt() {
   if(debounce) {debounce--; digitalWrite(12,HIGH); }
   else digitalWrite(12,LOW);
   Pump=digitalRead(11); 
   if(oldPump!=Pump) {
      oldPump=Pump; debounce=1000; 
   }
}
// --------------------------------------------------------------------
void getDigits() {
unsigned int a1,a2;
   a1=analogRead(2);
   a2=analogRead(3);
   if(a1>500 && a2<100) door1=1;
   else if(a1<100 && a2>500) door1=2;
   else door1=0;

   a1=analogRead(4);
   a2=analogRead(5);
   if(a1>500 && a2<100) door2=1;
   else if(a1<100 && a2>500) door2=2;
   else door2=0;

   a1=analogRead(6);
   a2=analogRead(7);
   if(a1>500 && a2<100) door3=1;
   else if(a1<100 && a2>500) door3=2;
   else door3=0;
}
// --------------------------------------------------------------------
void handlerDoors() {
   if     (door1!=2 && temperature1<tClose) { digitalWrite( 5, LOW);  digitalWrite( 6, HIGH);}
   else if(door1!=1 && temperature1>tOpen)  { digitalWrite( 5, HIGH); digitalWrite( 6, LOW);}
   if     (door2!=2 && temperature2<tClose) { digitalWrite( 7, LOW);  digitalWrite( 8, HIGH);}
   else if(door2!=1 && temperature2>tOpen)  { digitalWrite( 7, HIGH); digitalWrite( 8, LOW);}
   if     (door3!=2 && temperature3<tClose) { digitalWrite( 9, LOW);  digitalWrite(10, HIGH);}
   else if(door3!=1 && temperature3>tOpen)  { digitalWrite( 9, HIGH); digitalWrite(10, LOW);}
}
// --------------------------------------------------------------------
void taskHandler(byte task) {
  switch(task) {
    case 0:
       if ( !sensDs1.search(adr1)) {
         sensDs1.reset_search();
         delay(250);
       }
       sensDs1.reset();
       sensDs1.select(adr1);
       sensDs1.write(0x44, 1);        // start conversion, with parasite power on at the end
       delay(1000);     // maybe 750ms is enough, maybe not
       present = sensDs1.reset();
       sensDs1.select(adr1);    
       sensDs1.write(0xBE);         // Read Scratchpad
       for ( i = 0; i < 9; i++) {           // we need 9 bytes
          bufData1[i] = sensDs1.read();
       }
       raw = (bufData1[1] << 8) | bufData1[0];
       raw = raw << 3; // 9 bit resolution default
       if (bufData1[7] == 0x10) {
      // "count remain" gives full 12 bit resolution
         raw = (raw & 0xFFF0) + 12 - bufData1[6];
       }
       temperature1 = (float)raw / 160.0;
       Serial.print("  Temperature1= ");
       Serial.print(temperature1);
       Serial.print(" Celsius, \n");
    break;
    case 1:
       if ( !sensDs2.search(adr2)) {
         sensDs2.reset_search();
         delay(250);
       }
       sensDs2.reset();
       sensDs2.select(adr2);
       sensDs2.write(0x44, 1);        // start conversion, with parasite power on at the end
       delay(1000);     // maybe 750ms is enough, maybe not
       present = sensDs2.reset();
       sensDs2.select(adr2);    
       sensDs2.write(0xBE);         // Read Scratchpad
       for ( i = 0; i < 9; i++) {           // we need 9 bytes
          bufData2[i] = sensDs2.read();
       }
       raw = (bufData2[1] << 8) | bufData2[0];
       raw = raw << 3; // 9 bit resolution default
       if (bufData2[7] == 0x10) {
      // "count remain" gives full 12 bit resolution
         raw = (raw & 0xFFF0) + 12 - bufData2[6];
       }
       temperature2 = (float)raw / 160.0;
       Serial.print("  Temperature2= ");
       Serial.print(temperature2);
       Serial.print(" Celsius, \n");
    break;
    case 2:
       if ( !sensDs3.search(adr3)) {
         sensDs3.reset_search();
         delay(250);
       }
       sensDs3.reset();
       sensDs3.select(adr3);
       sensDs3.write(0x44, 1);        // start conversion, with parasite power on at the end
       delay(1000);     // maybe 750ms is enough, maybe not
       present = sensDs3.reset();
       sensDs3.select(adr3);    
       sensDs3.write(0xBE);         // Read Scratchpad
       for ( i = 0; i < 9; i++) {           // we need 9 bytes
          bufData3[i] = sensDs3.read();
       }
       raw = (bufData3[1] << 8) | bufData3[0];
       raw = raw << 3; // 9 bit resolution default
       if (bufData3[7] == 0x10) {
      // "count remain" gives full 12 bit resolution
         raw = (raw & 0xFFF0) + 12 - bufData3[6];
       }
       temperature3 = (float)raw / 160.0;
       Serial.print("  Temperature3= ");
       Serial.print(temperature3);
       Serial.print(" Celsius, \n");
    break;
  }
}
void setup() {
  nTask=0;
  pinMode( 5, OUTPUT); digitalWrite( 5, LOW);
  pinMode( 6, OUTPUT); digitalWrite( 6, LOW);
  pinMode( 7, OUTPUT); digitalWrite( 7, LOW);
  pinMode( 8, OUTPUT); digitalWrite( 8, LOW);
  pinMode( 9, OUTPUT); digitalWrite( 9, LOW);
  pinMode(10, OUTPUT); digitalWrite(10, LOW);
  pinMode(12, OUTPUT); digitalWrite(12, LOW);  // насос

  pinMode(11, INPUT);  digitalWrite(11, HIGH); // сигнал от насоса
  Pump=digitalRead(11); oldPump=Pump; debounce=0;
  MsTimer2::set(2, timerInterrupt); // задаем период прерывания по таймеру 2 мс 
  MsTimer2::start();               // разрешаем прерывание по таймеру
  Serial.begin(9600); // инициализируем порт, скорость 9600  
}

void loop() {
  taskHandler(nTask++);
  if(nTask>2) {
    nTask=0;  
    getDigits();
    handlerDoors();
  }
}

Пожалуйста. У меня нули показывает, только когда датчик отключаю.

Share this post


Link to post
Share on other sites

А я бы с измерением температуры поступал бы как здесь

И меньше бы памяти съедалось у Ардуины на библиотеки onewire

Share this post


Link to post
Share on other sites

Какой смысл экономить память если задача и так маленькая?

Share this post


Link to post
Share on other sites

залил результат такой :

до этого стоял скетч проверочный на экранчике показывало температуру с датчика

скомпилировал без ошибок

залил тоже ошибок не показало

экран светится в верхней строке черные прямоугольники.

Edited by 2a420
ошибка

Share this post


Link to post
Share on other sites

Контраст может покрутить. Либо данные не приходят. Мод с подключением напутано или обрыв где

Share this post


Link to post
Share on other sites
13 часа назад, 2a420 сказал:

экран светится в верхней строке черные прямоугольники.

О каком экране речь? Скрин или фото можешь показать?

Share this post


Link to post
Share on other sites

Я писал для ардуино нано и вывод должен быть на терминал компьютера. Как работает в указанном мной составе?

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...