очень легкий микроконтроллер с низким энергопотреблением с памятью?

Я создал пару проектов, используя arduino. Для нового проекта я хочу регистрировать температуру поверхности кожи в зависимости от времени (возможно, несколько раз в день) и, возможно, другую легкодоступную информацию, такую ​​как напряжение.

Мне нужно сделать все как можно меньше и легким (так как это будет измерять температуру кожи у небольшого млекопитающего), то есть ниже 5 г, если возможно, легче, в идеале 3 г, включая батарею, чтобы она не расстроилась 50-100 г животного слишком много.

Я читал, что возможно изменить arduino pro mini, чтобы использовать меньше тока, избавляясь от регулятора напряжения? но, возможно, более разумно полностью изменить и научиться программировать микроконтроллер другого типа, который кто-то может рекомендовать? Это должно было бы быть возможным управлять им непосредственно из легковесной ячейки или аналогичной легкой батареи. (Я также не уверен, как найти легкий 3,3-вольтовый аккумулятор для arduino pro mini, я думаю, они существуют, но я могу найти только 3V батареи до сих пор). Если у него есть встроенная память, чтобы экономить температуру каждые несколько часов, которую можно было бы загрузить позже, это было бы идеально (мне также было бы интересно, если у кого есть рекомендации по памяти). Я знаю, что можно купить «Ibutton», но если у меня есть время, я бы хотел сделать свой собственный, чтобы добавить другие датчики и получить дополнительную информацию.

9 голосов | спросил shara 31 +03002016-10-31T00:12:56+03:00312016bEurope/MoscowMon, 31 Oct 2016 00:12:56 +0300 2016, 00:12:56

2 ответа


15

Я составил небольшой локатор факела , в котором использовался ATtiny85 из кнопочной ячейки (CR2032). Это выглядит так:

 Локатор факела

Другая сторона:

 Другая сторона

В настоящее время он весит 5,9 г. Держатель батареи весит 1,6 г, поэтому вы можете сэкономить, сделав более легкий держатель (возможно, немного пластика для изоляции и пайки непосредственно на батарею). Розетка микросхемы весит не менее 0,5 г, поэтому вы можете сэкономить ее, паяя на процессорные штырьки. Таким образом, мы снизились до 3,8 г.

ATtiny85 имеет 512 байт EEPROM, которые вы могли бы использовать для записи показаний. Я не уверен в часах, если вы пытаетесь сэкономить вес, но если вы запустите его в известное время, вы можете получить разумную оценку времени, используя функцию millis(), чтобы найти miliiseconds с момента запуска.

Я сделал еще один экземпляр, который мигает светодиодом каждые пару секунд:

 LED flasher

Это похоже. Процессор есть (вверх ногами под гнездом микросхемы), а батарея находится внизу. Это весит 6 г. Аккумулятор длится пару лет, и это каждые два секунды мигает светодиодом!

Вместо светодиода вы можете иметь термистор для чтения температуры.

Вы можете запрограммировать его на чтение каждые несколько часов и сохранить его в EEPROM. Затем, когда инструктируется (например, соединяя пару контактов), он может выводить показания на другой вывод (через последовательный порт).

Вы можете сэкономить больше веса с помощью устройств SMD (на поверхности) и, возможно, используя крошечную печатную плату, которую вы могли бы создать.


код

Ниже приведен код моего локатора горелки. Интересен тот факт, что он спит большую часть времени. Также он спит во время выборки АЦП. Хотя в моем случае я измеряю LDR (резистор, зависящий от света), код для измерения термистора будет аналогичным. Вам просто нужно сделать некоторые вычисления в конце, чтобы превратить показание в температуру.

// ATtiny85 torch detector
// Author: Nick Gammon
// Date: 25 February 2015

// ATMEL ATTINY 25/45/85 / ARDUINO
// Pin 1 is /RESET
//
//                  +-\/-+
// Ain0 (D 5) PB5  1|    |8  Vcc
// Ain3 (D 3) PB3  2|    |7  PB2 (D 2) Ain1 
// Ain2 (D 4) PB4  3|    |6  PB1 (D 1) pwm1
//            GND  4|    |5  PB0 (D 0) pwm0
//                  +----+

/*

  Pin 2 (PB3) <-- LDR (GL5539) --> Pin 7 (PB2) <----> 56 k <----> Gnd

  Pin 5 (PB0) <---- LED ---> 100 R <-----> Gnd

*/


#include <avr/sleep.h>    // Sleep Modes
#include <avr/power.h>    // Power management
#include <avr/wdt.h>      // Watchdog timer

const byte LED = 0;          // pin 5 
const byte LDR_ENABLE = 3;   // pin 2
const byte LDR_READ = 1;     // Ain1 (PB2) pin 7
const int LIGHT_THRESHOLD = 200;  // Flash LED when darker than this

 // when ADC completed, take an interrupt 
EMPTY_INTERRUPT (ADC_vect);

// Take an ADC reading in sleep mode (ADC)
float getReading (byte port)
  {
  power_adc_enable() ;
  ADCSRA = bit (ADEN) | bit (ADIF);  // enable ADC, turn off any pending interrupt

  // set a2d prescale factor to 128
  // 8 MHz / 128 = 62.5 KHz, inside the desired 50-200 KHz range.

  ADCSRA |= bit (ADPS0) | bit (ADPS1) | bit (ADPS2); 

  if (port >= A0)
    port -= A0;

#if defined(__AVR_ATtiny85__)  
  ADMUX = (port & 0x07);  // AVcc   
#else   
  ADMUX = bit (REFS0) | (port & 0x07);  // AVcc   
#endif

  noInterrupts ();
  set_sleep_mode (SLEEP_MODE_ADC);    // sleep during sample
  sleep_enable();  

  // start the conversion
  ADCSRA |= bit (ADSC) | bit (ADIE);
  interrupts ();
  sleep_cpu ();     
  sleep_disable ();

  // reading should be done, but better make sure
  // maybe the timer interrupt fired 

  // ADSC is cleared when the conversion finishes
  while (bit_is_set (ADCSRA, ADSC))
    { }

  byte low  = ADCL;
  byte high = ADCH;

  ADCSRA = 0;  // disable ADC
  power_adc_disable();

  return (high << 8) | low;

  }  // end of getReading

// watchdog interrupt
ISR (WDT_vect) 
{
   wdt_disable();  // disable watchdog
}  // end of WDT_vect

#if defined(__AVR_ATtiny85__)  
  #define watchdogRegister WDTCR
#else
  #define watchdogRegister WDTCSR
#endif

void setup ()
  {
  wdt_reset();  
  pinMode (LED, OUTPUT);
  pinMode (LDR_ENABLE, OUTPUT);
  ADCSRA = 0;            // turn off ADC
  power_all_disable ();  // power off ADC, Timer 0 and 1, serial interface
  }  // end of setup

void loop ()
  {
  // power up the LDR, take a reading
  digitalWrite (LDR_ENABLE, HIGH);
  int value = getReading (LDR_READ);
  // power off the LDR
  digitalWrite (LDR_ENABLE, LOW);

  // if it's dark, flash the LED for 2 mS
  if (value < LIGHT_THRESHOLD)
    {
    power_timer0_enable ();
    delay (1);  // let timer reach a known point
    digitalWrite (LED, HIGH);
    delay (2); 
    digitalWrite (LED, LOW);
    power_timer0_disable ();
    }

  goToSleep ();
  }  // end of loop

void goToSleep ()
  {
  set_sleep_mode (SLEEP_MODE_PWR_DOWN);
  noInterrupts ();       // timed sequence coming up

  // pat the dog
  wdt_reset();  

  // clear various "reset" flags
  MCUSR = 0;     
  // allow changes, disable reset, clear existing interrupt
  watchdogRegister = bit (WDCE) | bit (WDE) | bit (WDIF);
  // set interrupt mode and an interval (WDE must be changed from 1 to 0 here)
  watchdogRegister = bit (WDIE) | bit (WDP2) | bit (WDP1) | bit (WDP0);    // set WDIE, and 2 seconds delay

  sleep_enable ();       // ready to sleep
  interrupts ();         // interrupts are required now
  sleep_cpu ();          // sleep                
  sleep_disable ();      // precaution
  }  // end of goToSleep 
ответил Nick Gammon 31 +03002016-10-31T00:48:27+03:00312016bEurope/MoscowMon, 31 Oct 2016 00:48:27 +0300 2016, 00:48:27
8

Я бы лично предложил ATtiny 45/85. Это в значительной степени небольшой AVR с 5 GPIO. Вы можете запрограммировать его с помощью Arduino IDE и использовать Arduino в качестве провайдера. Если вы можете спроектировать свою собственную печатную плату, версия SMD ATtiny небольшая, низкая и компактная. Полная схема, чтобы сделать функцию ATtiny также минимальной.

 введите описание изображения здесь>> </a> </p>

<p> Кроме того, при низкой тактовой частоте (0-4 МГц) вы можете подключить ATtiny при напряжении до 1,8 В. Возможно, вы даже можете запустить его на 1,5 В, но это не совсем рекомендуется. Если вы хотите быть в безопасности, трехмерная ячейка будет небольшой, плоской, и она может длиться, вероятно, много лет. Это также немного безопаснее по сравнению с липосом, который имеет много рисков, особенно если вы устанавливаете его на животное, которое вы не можете контролировать. </p>

<p> <a href= введите описание изображения здесь>> </a> </p>

<p> Я бы также рекомендовал компоненты SMD, если это возможно. Это позволяет всему компоненту быть ниже, и это не повредит или не очистит кожу человека /животных, которых вы контролируете. </p></body></html>

ответил Dat Ha 31 +03002016-10-31T00:45:07+03:00312016bEurope/MoscowMon, 31 Oct 2016 00:45:07 +0300 2016, 00:45:07

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132