TinyCubeSatellite小立方体卫星

基于Attiny85的太阳能卫星电子雕塑

原理图非常简单,我们使用ATtiny85微控制器内部1Mhz振荡器,因此无需外接任何外部晶振。太阳能电池并联连接并通过反向阻流二极管馈送到系统。二极管还有助于降低电压已安全的为超级电容充电。在明亮的阳光下,太阳能电池产生足够的电流为电容器充电并为系统供电,充满电的超级电容应该内让系统自运行几天。您可以进一步改进电路,通过测量太阳呢电池两端的电压,并仅在超过低阈值时闪烁LED,使LED仅在夜间闪烁。

根据您太阳能板的输出电压和超级电容的耐压您也可以采用串联电池板的方式,原理图如下:

使系统长时间运行的关键是利用ATtiny微控制器的低功耗模式。您可以通过禁用所有不必要的内部外围设备,并在闪烁之间将设备置于深度睡眠模式来实现这一点。您可以将平均电流消耗从10mA降低到230uA。该设备在睡眠时仅消耗约4.84uA(3.8VDC)!您可以通过在闪烁之间使用更长的时间段、修改闪烁模式和增加LED的限流电阻器值来进一步降低平均电流。

#include <avr/sleep.h> //Needed for sleep_mode
#include <avr/wdt.h> //Needed to enable/disable watch dog timer

void setup() {
  pinMode(0, OUTPUT);// LED连接到新品的5引脚,在Arduino中为0引脚
  ADCSRA &= ~(1<<ADEN); //关闭ADC 省大约 ~230uA电流
  //关闭各种硬件以降低功耗
  set_sleep_mode(SLEEP_MODE_PWR_DOWN); //关闭电源等待看门狗唤醒
  sleep_enable();
}

//看门狗唤醒系统后会运行该函数
ISR(WDT_vect) {
  //watchdog_counter++;
}

void loop() {
  setup_watchdog(8); //配置唤醒看门狗
  sleep_mode(); //休眠4秒后唤醒
  for(int j=0;j<5;j++)
  {
    digitalWrite(0, HIGH);
    delay(200);
    digitalWrite(0, LOW);
    delay(300);
  }
}

//设置看门狗唤醒,但是不重启
//0=16ms, 1=32ms, 2=64ms, 3=128ms, 4=250ms, 5=500ms
//6=1sec, 7=2sec, 8=4sec, 9=8sec
//From: http://interface.khm.de/index.php/lab/experiments/sleep_watchdog_battery/
void setup_watchdog(int timerPrescaler) {

  if (timerPrescaler > 9 ) timerPrescaler = 9; //timerPrescaler设置在合法范围内

  byte bb = timerPrescaler & 7; 
  if (timerPrescaler > 7) bb |= (1<<5); //Set the special 5th bit if necessary

  //这个命令顺序很重要,不能组合设置
  MCUSR &= ~(1<<WDRF); //清除看门狗复位
  WDTCR |= (1<<WDCE) | (1<<WDE); //设置 WD_change 启动, WD 启动
  WDTCR = bb; //设置看门狗超时值
  WDTCR |= _BV(WDIE); //设置中断使能,防止重启
}

实践证明降低LED的点亮时间和点亮次数,可以有效提高系统续航。

文档信息

版权声明:可自由转载(请注明转载出处)-非商用-非衍生

发表时间:2023年11月7日 17:24