Espruino:Примеры/Зарядное устройство для AA- и AAA-батареек: различия между версиями

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
Нет описания правки
Нет описания правки
 
(не показаны 3 промежуточные версии 2 участников)
Строка 7: Строка 7:
[[File:Battery_Charger_final.jpg|center]]
[[File:Battery_Charger_final.jpg|center]]


Многие зарядные устройства для AA- и AAA-батареек заряжают их парами, но во многих устройствах используются только 1 или 3 батарейки, и в результате получается так, что некоторые ваши батарейки или получают избыточный заряд или недополучают его. Кроме того, никель-кадмиевым (NiCd) и никель-металлогидридным (NiMH) батарейкам периодически необходима полная разрядка, но большинство обычных зарядных устройств её делать не умеют.
Многие зарядные устройства для [[AA]]- и [[AAA-батареек]] заряжают их парами, но во многих устройствах используются только 1 или 3 батарейки, и в результате получается так, что некоторые ваши батарейки или получают избыточный заряд или недополучают его. Кроме того, никель-кадмиевым ([[NiCd]]) и никель-металлогидридным ([[NiMH]]) батарейкам периодически необходима полная разрядка, но большинство обычных зарядных устройств её делать не умеют.


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


'''Примечание:''' Чтобы упростить задачу, в нашем заряднике зарядка и разрядка будет осуществляться напрямую через GPIO-контакты Espruino. Это значит, что быстро заряжать батарейки не получится (на их зарядку и разрядку могут потребоваться дни!).
{{Примечание1|Чтобы упростить задачу, в нашем заряднике зарядка и разрядка будет осуществляться напрямую через GPIO-контакты [[Espruino]]. Это значит, что быстро заряжать батарейки не получится (на их зарядку и разрядку могут потребоваться дни!).}}


== Нам понадобятся ==
== Нам понадобятся ==
Строка 19: Строка 19:
* [https://www.espruino.com/PCD8544 LCD-дисплей PCD8544]
* [https://www.espruino.com/PCD8544 LCD-дисплей PCD8544]
* Несколько соединительных проводов (подойдут обычные провода с однопроволочной жилой)
* Несколько соединительных проводов (подойдут обычные провода с однопроволочной жилой)
* Четыре резистора на 100 ом
* Четыре резистора на [[100 Ом]]
* Держатели для AA- и AAA-батареек с контактами (можно купить, например, у Rapid Electronics: [https://www.rapidonline.com/Electrical-Power/TruPower-BH-311-1P-1-X-AA-PCB-Battery-Holder-18-2960 AA] и [https://www.rapidonline.com/Electrical-Power/TruPower-BH-411-3P-1-X-AAA-PCB-Battery-Holder-18-2920 AAA])
* Держатели для AA- и AAA-батареек с контактами (можно купить, например, у Rapid Electronics: [https://www.rapidonline.com/Electrical-Power/TruPower-BH-311-1P-1-X-AA-PCB-Battery-Holder-18-2960 AA] и [https://www.rapidonline.com/Electrical-Power/TruPower-BH-411-3P-1-X-AAA-PCB-Battery-Holder-18-2920 AAA])


Строка 27: Строка 27:


* Поместите макетную плату так, чтобы сторона с крайней красной полосой (обозначающей ряд положительных контактов) была вверху, а сторона с крайней синей полосой (обозначающей ряд отрицательных контактов) – внизу.  
* Поместите макетную плату так, чтобы сторона с крайней красной полосой (обозначающей ряд положительных контактов) была вверху, а сторона с крайней синей полосой (обозначающей ряд отрицательных контактов) – внизу.  
* Подключите Espruino Pico к макетной плате как можно левее (см. фото выше).
* Подключите [[Espruino Pico]] к макетной плате как можно левее (см. фото выше).
* Возьмите провод и один его конец подключите к контакту GND на Pico (это самый левый контакт Pico), а другой – к отрицательному (синему) ряду контактов, который находится в нижней части макетной платы. На фото выше этого провода не видно, потому что он находится под LCD-дисплеем.
* Возьмите провод и один его конец подключите к контакту '''GND''' на [[Pico]] (это самый левый контакт [[Pico]]), а другой – к отрицательному (синему) ряду контактов, который находится в нижней части макетной платы. На фото выше этого провода не видно, потому что он находится под [[LCD-дисплеем]].
* Подключите LCD-дисплей PCD8544 к макетной плате под Pico – так, чтобы два самых правых контакта дисплея не были подключены к Pico. В результате LCD-дисплей должен лежать поверх заземляющего провода.  
* Подключите [[LCD-дисплей]] [[PCD8544]] к макетной плате под [[Pico]] – так, чтобы два самых правых контакта дисплея не были подключены к [[Pico]]. В результате [[LCD-дисплей]] должен лежать поверх заземляющего провода.  
* Возьмите провод и один его конец подключите к контакту B1 на Pico, а другой – к макетной плате к самому верхнему контакту в пятом 5-контактном столбце справа от Pico (см. фото выше).
* Возьмите провод и один его конец подключите к контакту '''B1''' на [[Pico]], а другой – к макетной плате к самому верхнему контакту в пятом 5-контактном столбце справа от [[Pico]] (см. фото выше).
* Возьмите резистор на 75 ом, согните его, подрежьте до нужной длины и подключите к макетной плате по диагонали между и 5 и 6 столбцами справа от Pico.
* Возьмите резистор на [[75 Ом]], согните его, подрежьте до нужной длины и подключите к макетной плате по диагонали между и 5 и 6 столбцами справа от [[Pico]].
* Теперь подключите к макетной плате ещё 3 пары из провода и резистора. Провода должны быть подключены одним концом к контактам A7, A6 и A5 на Pico, а другим – к одному из контактов своего резистора, и расстояние между этими подключениями должно составлять 7 столбцов. Примечание: Это вариант для AAA-батареек; для AA-батареек вам понадобится расстояние побольше.
* Теперь подключите к макетной плате ещё 3 пары из провода и резистора. Провода должны быть подключены одним концом к контактам A7, A6 и A5 на [[Pico]], а другим – к одному из контактов своего резистора, и расстояние между этими подключениями должно составлять 7 столбцов. Примечание: Это вариант для [[AAA-батареек]]; для [[AA-батареек]] вам понадобится расстояние побольше.
* Подрежьте контакты батарейных держателей, чтобы они вместились в макетную плату, а затем подключите держатели к макетной плате по диагонали. В результате положительный контакт держателя должен быть подключен к резистору (см. фото ниже), а отрицательный – к нижнему ряду отрицательных контактов на макетной плате.
* Подрежьте контакты батарейных держателей, чтобы они вместились в макетную плату, а затем подключите держатели к макетной плате по диагонали. В результате положительный контакт держателя должен быть подключен к резистору (см. фото ниже), а отрицательный – к нижнему ряду отрицательных контактов на макетной плате.


[[File:Battery_Charger_batholder.jpg|center]]
[[File:Battery_Charger_batholder.jpg|center]]


* Теперь подключите к LCD-дисплею два провода. Первый – между контактом B10 на Pico и контактом макетной платы, который находится прямо справа от самого нижнего правого контакта Pico. Второй – между контактом B13 на Pico и контактом макетной плате, который находится над самым правым контактом LCD-дисплея. Пример смотрите на фото выше.
* Теперь подключите к [[LCD-дисплею]] два провода. Первый – между контактом '''B10''' на [[Pico]] и контактом макетной платы, который находится прямо справа от самого нижнего правого контакта [[Pico]]. Второй – между контактом '''B13''' на [[Pico]] и контактом макетной плате, который находится над самым правым контактом [[LCD-дисплея]]. Пример смотрите на фото выше.
Готово!
Готово!


== Код ==
== Код ==


Подключитесь к плате с помощью Web IDE, скопируйте код ниже, вставьте его в правую часть Web IDE и загрузите на плату:
Подключитесь к плате с помощью [[Web IDE]], скопируйте код ниже, вставьте его в правую часть [[Web IDE]] и загрузите на плату:


<syntaxhighlight lang="javascript" enclose="div">
<syntaxhighlight lang="javascript">
var g;
var g;


Строка 165: Строка 165:
</syntaxhighlight>
</syntaxhighlight>


Теперь напечатайте save() в левой части Web IDE. В результате на дисплее должна появиться надпись «Loading...», а спустя 2 секунды он начнёт показывать состояние зарядки 4 подключенных к Espruino батареек.
Теперь напечатайте save() в левой части [[Web IDE]]. В результате на дисплее должна появиться надпись ''«Loading...»'', а спустя 2 секунды он начнёт показывать состояние зарядки 4 подключенных к [[Espruino]] батареек.


== Использование ==
== Использование ==


Просто подключите свои батарейки, и Espruino их распознает. На LCD-дисплее появится информация об их текущем напряжении, а надпись «DIS» рядом с батарейкой будет означать, что в данный момент выполняется её разрядка (при 20 мА это может занять несколько дней).
Просто подключите свои батарейки, и [[Espruino]] их распознает. На LCD-дисплее появится информация об их текущем напряжении, а надпись ''«DIS»'' рядом с батарейкой будет означать, что в данный момент выполняется её разрядка (при [[20 мА]] это может занять несколько дней).


* В верхнем счётчике показывается, насколько в данный момент разряжена батарейка (единица измерения близка к миллиампер-часам).
* В верхнем счётчике показывается, насколько в данный момент разряжена батарейка (единица измерения близка к миллиампер-часам).
* Когда заряд батарейки дойдёт до 0.8 вольт, Espruino начнёт её перезаряжать. В этот момент по верхнему счётчику можно будет примерно судить, какой ёмкостью обладает батарейка (единица измерения близка к миллиампер-часам).
* Когда заряд батарейки дойдёт до 0.8 вольт, [[Espruino]] начнёт её перезаряжать. В этот момент по верхнему счётчику можно будет примерно судить, какой ёмкостью обладает батарейка (единица измерения близка к миллиампер-часам).
* Espruino продолжит заряжать батарейку примерно при 20 мА. На дисплее в этот момент будет надпись «CHG», а на втором счётчике – то, сколько заряда было добавлено во время зарядки (единица измерения близка к миллиампер-часам). На этом этапе и никель-кадмиевые, и никель-металлогидридные батарейки можно заряжать капельной зарядкой в течение долгого времени.
* [[Espruino]] продолжит заряжать батарейку примерно при [[20 мА]]. На дисплее в этот момент будет надпись ''«CHG»'', а на втором счётчике – то, сколько заряда было добавлено во время зарядки (единица измерения близка к миллиампер-часам). На этом этапе и никель-кадмиевые, и никель-металлогидридные батарейки можно заряжать капельной зарядкой в течение долгого времени.
* При помощи кнопки на Pico вы можете переключать все подключенные батарейки между режимами зарядки и разрядки. Если вы хотите переключить только одну батарейку, то отключите её на несколько секунд, а потом снова подключите.
* При помощи кнопки на [[Pico]] вы можете переключать все подключенные батарейки между режимами зарядки и разрядки. Если вы хотите переключить только одну батарейку, то отключите её на несколько секунд, а потом снова подключите.


== Что дальше ==
== Что дальше ==


* Этот проект можно расширить за счёт увеличения количества заряжаемых батареек. При помощи маленьких аналоговых 0.05-дюймовых контактов сбоку Pico вы можете дополнительно подключить к проекту ещё 5 батареек (в итоге их количество увеличится до 9). Но загвоздка в том, что чип Espruino может подавать на каждый контакт не более 25 мА, а суммарно – не более 100 мА, поэтому будьте осторожны, так как при попытке зарядить все батарейки сразу эту цифру можно нечаянно превысить.
* Этот проект можно расширить за счёт увеличения количества заряжаемых батареек. При помощи маленьких аналоговых 0.05-дюймовых контактов сбоку Pico вы можете дополнительно подключить к проекту ещё 5 батареек (в итоге их количество увеличится до 9). Но загвоздка в том, что чип Espruino может подавать на каждый контакт не более [[25 мА]], а суммарно – не более 100 мА, поэтому будьте осторожны, так как при попытке зарядить все батарейки сразу эту цифру можно нечаянно превысить.
* Вы также можете воспользоваться полевыми транзисторами или чем-то вроде драйвера мотора, чтобы заряжать батарейки быстрее.
* Вы также можете воспользоваться полевыми транзисторами или чем-то вроде драйвера мотора, чтобы заряжать батарейки быстрее.


=См.также=
=См.также=


{{ads}}
 


=Внешние ссылки=
=Внешние ссылки=
Строка 189: Строка 189:
<references />
<references />


{{Навигационная таблица/Espruino}}
{{Навигационная таблица/Портал/Espruino}}
{{Навигационная таблица/Телепорт}}

Текущая версия от 21:56, 22 мая 2023

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


Зарядное устройство для AA- и AAA-батареек[1]

Многие зарядные устройства для AA- и AAA-батареек заряжают их парами, но во многих устройствах используются только 1 или 3 батарейки, и в результате получается так, что некоторые ваши батарейки или получают избыточный заряд или недополучают его. Кроме того, никель-кадмиевым (NiCd) и никель-металлогидридным (NiMH) батарейкам периодически необходима полная разрядка, но большинство обычных зарядных устройств её делать не умеют.

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

Примечание

Чтобы упростить задачу, в нашем заряднике зарядка и разрядка будет осуществляться напрямую через GPIO-контакты Espruino. Это значит, что быстро заряжать батарейки не получится (на их зарядку и разрядку могут потребоваться дни!).

Нам понадобятся

Подсоединение

  • Поместите макетную плату так, чтобы сторона с крайней красной полосой (обозначающей ряд положительных контактов) была вверху, а сторона с крайней синей полосой (обозначающей ряд отрицательных контактов) – внизу.
  • Подключите Espruino Pico к макетной плате как можно левее (см. фото выше).
  • Возьмите провод и один его конец подключите к контакту GND на Pico (это самый левый контакт Pico), а другой – к отрицательному (синему) ряду контактов, который находится в нижней части макетной платы. На фото выше этого провода не видно, потому что он находится под LCD-дисплеем.
  • Подключите LCD-дисплей PCD8544 к макетной плате под Pico – так, чтобы два самых правых контакта дисплея не были подключены к Pico. В результате LCD-дисплей должен лежать поверх заземляющего провода.
  • Возьмите провод и один его конец подключите к контакту B1 на Pico, а другой – к макетной плате к самому верхнему контакту в пятом 5-контактном столбце справа от Pico (см. фото выше).
  • Возьмите резистор на 75 Ом, согните его, подрежьте до нужной длины и подключите к макетной плате по диагонали между и 5 и 6 столбцами справа от Pico.
  • Теперь подключите к макетной плате ещё 3 пары из провода и резистора. Провода должны быть подключены одним концом к контактам A7, A6 и A5 на Pico, а другим – к одному из контактов своего резистора, и расстояние между этими подключениями должно составлять 7 столбцов. Примечание: Это вариант для AAA-батареек; для AA-батареек вам понадобится расстояние побольше.
  • Подрежьте контакты батарейных держателей, чтобы они вместились в макетную плату, а затем подключите держатели к макетной плате по диагонали. В результате положительный контакт держателя должен быть подключен к резистору (см. фото ниже), а отрицательный – к нижнему ряду отрицательных контактов на макетной плате.
  • Теперь подключите к LCD-дисплею два провода. Первый – между контактом B10 на Pico и контактом макетной платы, который находится прямо справа от самого нижнего правого контакта Pico. Второй – между контактом B13 на Pico и контактом макетной плате, который находится над самым правым контактом LCD-дисплея. Пример смотрите на фото выше.

Готово!

Код

Подключитесь к плате с помощью Web IDE, скопируйте код ниже, вставьте его в правую часть Web IDE и загрузите на плату:

var g;

B3.write(0); // контакт GND
// B4.write(1); // подсветка
B5.write(1); // контакт VCC

// Контакты, к которым подключены батарейки:
var BATS = [ B1, A7, A6, A5 ];

// Значение резистора:
var RESISTOR_VALUE = 100;

// Мы заряжаем или разряжаем батарейки?
var batCharge = [ 0, 0, 0, 0 ];

// Сколько заряда было добавлено в батарейки (в мА)?
var cntCharge = [ 0, 0, 0, 0 ];

// Насколько батарейки были разряжены (в мА)?
var cntDischarge = [ 0, 0, 0, 0 ];

function getBatteryVoltages() {
  var voltages = [0,0,0,0];
  // Считываем напряжение несколько раз
  // и рассчитываем среднее значение:
  var N = 20;
  for (var i=0;i<N;i++) {
    for (var b=0;b<BATS.length;b++) {
      digitalWrite(BATS[b], 0);
      voltages[b] += analogRead(BATS[b])*3.3/N;
    }
  }
  // Проверяем, отключена ли батарея,
  // включив подтягивающий резистор
  // и посмотрев, повышается ли напряжение:
  for (var b=0;b<BATS.length;b++) {
    pinMode(BATS[b], "input_pullup");
    if (digitalRead(BATS[b]))
      voltages[b] = -1; // батарейка не подключена
    pinMode(BATS[b]);   // режим по умолчанию
  }
  return voltages;
}

var lastInterval;

function onInterval() {
  var time = getTime() - lastInterval;
  lastInterval = getTime();
  var hrs = time/3600; // масштабируем время
                       // к более маленькому значению

  // Для каждой батареи...
  var volts = getBatteryVoltages();
  for (var i=0;i<4;i++) {
    // Обновляем зарядные счётчики:
    if (batCharge[i])
      cntCharge[i] += hrs*(3.3-volts[i])/RESISTOR_VALUE;
    else
      cntDischarge[i] += hrs*volts[i]/RESISTOR_VALUE;
    // Определяем, что выполняется – зарядка или разрядка:
    if (!batCharge[i] && volts[i]<=0.8)
      batCharge[i] = 1; // теперь заряжаем
    if (volts[i] < 0) {
      // Батарейки нет – сбрасываем до значений по умолчанию:
      batCharge[i] = 0;
      cntCharge[i] = 0;
      cntDischarge[i] = 0;
    }
    digitalWrite(BATS[i], batCharge[i]);
  }

  // Теперь обновляем дисплей:
  g.clear();
  g.drawString("Battery Charger",0,0);
  g.drawLine(0,8,84,8);
  for (i=0;i<4;i++) {
    var x = 84*(i+0.5)/4;
    g.drawStringCenter(i+1, x, 12);
    g.drawLine(x-8,18,x+8,18);
    if (volts[i] >= 0) {
      g.drawStringCenter(batCharge[i] ? "CHG" : "DIS", x, 20);
      g.drawStringCenter(volts[i].toFixed(2), x, 28);
      g.drawStringCenter(cntDischarge[i] ? (cntDischarge[i]|0) : "-", x, 36);
      g.drawStringCenter(cntCharge[i] ? (cntCharge[i]|0) : "-", x, 42);
    } else {
      g.drawStringCenter("-", x, 20);
    }
  }
  g.flip();
}

function onInit() {
  var spi = new SPI();
  spi.setup({ sck:B6, mosi:B7 });
  g = require("PCD8544").connect(spi, A8 /*DC*/, B10 /*CE*/, B13 /*RST*/, function() {
    g.setRotation(2);
    g.clear();
    g.drawString("Loading...",0,0);
    g.drawLine(0,10,84,10);
    g.flip();
  });
  g.drawStringCenter = function(txt,x,y) {
    this.drawString(txt, x-this.stringWidth(txt)/2, y);
  };

  lastInterval = getTime();
  setInterval(onInterval, 2000);
}

// Что будет происходить при нажатии на кнопку:
setWatch(function() {
  if (batCharge=="0,0,0,0") batCharge.fill(1);
  else batCharge.fill(0);
  cntCharge.fill(0);
  cntDischarge.fill(0);
  onInterval();
}, BTN, { repeat: true, edge:"rising", debounce:50});

Теперь напечатайте save() в левой части Web IDE. В результате на дисплее должна появиться надпись «Loading...», а спустя 2 секунды он начнёт показывать состояние зарядки 4 подключенных к Espruino батареек.

Использование

Просто подключите свои батарейки, и Espruino их распознает. На LCD-дисплее появится информация об их текущем напряжении, а надпись «DIS» рядом с батарейкой будет означать, что в данный момент выполняется её разрядка (при 20 мА это может занять несколько дней).

  • В верхнем счётчике показывается, насколько в данный момент разряжена батарейка (единица измерения близка к миллиампер-часам).
  • Когда заряд батарейки дойдёт до 0.8 вольт, Espruino начнёт её перезаряжать. В этот момент по верхнему счётчику можно будет примерно судить, какой ёмкостью обладает батарейка (единица измерения близка к миллиампер-часам).
  • Espruino продолжит заряжать батарейку примерно при 20 мА. На дисплее в этот момент будет надпись «CHG», а на втором счётчике – то, сколько заряда было добавлено во время зарядки (единица измерения близка к миллиампер-часам). На этом этапе и никель-кадмиевые, и никель-металлогидридные батарейки можно заряжать капельной зарядкой в течение долгого времени.
  • При помощи кнопки на Pico вы можете переключать все подключенные батарейки между режимами зарядки и разрядки. Если вы хотите переключить только одну батарейку, то отключите её на несколько секунд, а потом снова подключите.

Что дальше

  • Этот проект можно расширить за счёт увеличения количества заряжаемых батареек. При помощи маленьких аналоговых 0.05-дюймовых контактов сбоку Pico вы можете дополнительно подключить к проекту ещё 5 батареек (в итоге их количество увеличится до 9). Но загвоздка в том, что чип Espruino может подавать на каждый контакт не более 25 мА, а суммарно – не более 100 мА, поэтому будьте осторожны, так как при попытке зарядить все батарейки сразу эту цифру можно нечаянно превысить.
  • Вы также можете воспользоваться полевыми транзисторами или чем-то вроде драйвера мотора, чтобы заряжать батарейки быстрее.

См.также

Внешние ссылки