Ви не увійшли.
А ногу RESET подключали?
Что получилось: полностью автоматическое зарядное устройство умеющее делать:
1. Десульфатацию аккумулятора.
2. Циклический разряд-заряд.
3. Автоматический заряд с импульсной подзарядкой.
А теперь кому интересно, все по порядку.
Настали холода и аккумулятор снова стал очень неохотно крутить стартер. Начитавшись статей про восстановление акумов со сменой электролита, решил попробовать. Суть в том чтобы несколько раз (~3) разрядить/разрядить акум, затем поменять электролит. Поскольку автоматической зарядки у меня не было и стоять над акумом ждать пока он разрядится тоже не было ни времени ни желания, то я решил автоматизировать данный процесс. За примерно полдня я неспешно собрал следующую схему:
Паялось из того, что было в наличии. Все детали можно менять на аналогичные. Диод и КРЕНка служат для защиты ардуинки от кривых рук и высокого напряжения. Собрано все навесным монтажом на куске алюминиевого радиатора, который служит несущей поверхностью. Радиатор при работе еле теплый, так что можно и на фанере собрать.
Настройка заключается в установке подстроечного резистора на коэффициент деления 1:4. Можно подобрать и запаять 2 резистора.
Еще некоторое время ушло на написание программы. В результате я получил автоматическую зарядку, которая имеет 3 режима.
1. Десульфатация аккумулятора — чередующийся заряд и разряд аккумулятора. Ток зарядки выставляется на самой зарядке, ток разрядки определяется мощностью лампы в устройстве. Каждый такт длится 1.5 сек.
2. Циклический разряд-заряд. 3 цикла (кол-во можно изменить в программе) полного разряда и заряда аккума, иначе говоря подготовка к смене электролита.
3. Автоматический заряд с импульсной подзарядкой. Полный заряд аккума, с последущи контролем напряжения (раз в 10 сек) и импульсной подзарядкой при падении напряжения ниже установленного предела (14.4 В, можно изменить в программе).
Режимы 1 и 3 длятся бесконечно. В режиме 2 после 3-х циклов аккум отключается и от зарядки и от нагрузки. Во всех режимах контролируется напряжение аккума: устройство на даст перезарядить и переразрядить аккум. Максимальное и минимальное напряжения так же можно изменить в программе.
Видео работы устройства в режиме десульфатации: https://www.youtube.com/watch?v=_Bes44zIAYg
Моему аккумулятору реально помог режим десульфатации — стартер крутит веселее. В планах заменить электролит, но пока нет времени. Может кому-то еще пригодится.
Все делалось на быструю руку, поэтому есть простор для оптимизации и совершенствования.
Работает устройство следующим образом:
1. Включаем зарядное устройство, можно на минимальный ток.
2. Подключаем аккум.
3. Выбираем режим кратковременным замыканием нужного вывода на массу.
4. При необходимости регулируем ток зарядки.
Если нужно изменить режим работы устройства — жмем ресет на ардуине или выключаем все.
Скетч:
#define Mode1Pin 9 //Пин выбора режима зарядки 1
#define Mode2Pin 8 //Пин выбора режима зарядки 2
#define Mode3Pin 7 //Пин выбора режима зарядки 3
#define LoadPin 12 //Пин включения нагрузки
#define ChargePin 13 //Пин включения зарядки
#define VoltagePin A0 //Пин включения аккумулятора
#define MaxVoltage 794 //Напряжение в конце зарядки, делитель 1/4, 20В = 1023, 15.5В = 794
//#define NormVoltage 736 //Напряжение поддержки, делитель 1/4, 20В = 1023, 14.4В = 736 это для убитых аккумов
#define NormVoltage 696 //Напряжение поддержки, делитель 1/4, 20В = 1023, 13.6В = 696 это для нормальных аккумов
#define MinVoltage 538 //Напряжение в конце разрядки делитель 1/4, 20В = 1023, 10.5В = 538
int Voltage; //Переменная для текущего измерения напряжения
uint32_t StartTime; //Переменная для хранения вермени начала цикла
uint32_t Time_P = 1500; //Переменная для хранения длительности цикла
uint8_t Loops = 3; //Переменная для хранения кол-ва циклов разряд/заряд
void setup() {
pinMode(LoadPin, OUTPUT);
pinMode(ChargePin, OUTPUT);
digitalWrite(ChargePin, 0); //Отключаем зарядку
digitalWrite(LoadPin, 0); //Отключаем зарядку
pinMode(Mode1Pin, INPUT_PULLUP);
pinMode(Mode2Pin, INPUT_PULLUP);
pinMode(Mode3Pin, INPUT_PULLUP);
}
void Mode1() {
Loop:
//--- Заряд акуммулятора ---
digitalWrite(ChargePin, 1); //Включаем зарядку
StartTime = millis(); //Запоминаем время начала зарядки
do {
delay(100); //Ждем 0.1 сек
Voltage = analogRead(VoltagePin); //Измеряем напряжение
} while ((Voltage < MaxVoltage) && (StartTime + Time_P > millis()) );
digitalWrite(ChargePin, 0); //Выключаем зарядку
delay(100); //Ждем 0.1 сек
//--- Разряд акуммулятора ---
digitalWrite(LoadPin, 1); //Включаем нагрузку
StartTime = millis(); //Запоминаем время начала разрядки
do {
delay(100); //Ждем 0.1 сек
Voltage = analogRead(VoltagePin); //Измеряем напряжение
} while ((Voltage > MinVoltage) && (StartTime + Time_P > millis()) );
digitalWrite(LoadPin, 0); //Выключаем зарядку
delay(100); //Ждем 0.1 сек
goto Loop;
}
void Mode2() {
do {
//--- Разряд акуммулятора ---
digitalWrite(LoadPin, 1); //Включаем нагрузку
do {
delay(100); //Ждем 0.1 сек
Voltage = analogRead(VoltagePin); //Измеряем напряжение
} while (Voltage > MinVoltage);
digitalWrite(LoadPin, 0); //Выключаем зарядку
delay(100); //Ждем 0.1 сек
//--- Заряд акуммулятора ---
digitalWrite(ChargePin, 1); //Включаем зарядку
do {
delay(100); //Ждем 0.1 сек
Voltage = analogRead(VoltagePin); //Измеряем напряжение
} while (Voltage < MaxVoltage);
digitalWrite(ChargePin, 0); //Выключаем зарядку
delay(100); //Ждем 0.1 сек
} while (--Loops);
Loop:
goto Loop;
}
void Mode3() {
//--- Заряд акуммулятора ---
digitalWrite(ChargePin, 1); //Включаем зарядку
do {
delay(100); //Ждем 0.1 сек
Voltage = analogRead(VoltagePin); //Измеряем напряжение
} while (Voltage < MaxVoltage);
digitalWrite(ChargePin, 0); //Выключаем зарядку
delay(1000); //Ждем 1 сек
Loop:
//--- Поддержка заряда ---
Voltage = analogRead(VoltagePin); //Измеряем напряжение
if (Voltage < NormVoltage)
digitalWrite(ChargePin, 1); //Включаем зарядку
else {
digitalWrite(ChargePin, 0); //Выключаем зарядку
delay(10000); //Ждем 10 сек
}
delay(100); //Ждем 0.1 сек
goto Loop;
}
void loop() {
if (!digitalRead(Mode1Pin)) Mode1(); //Десульфатация
if (!digitalRead(Mode2Pin)) Mode2(); //3 цикла разряд-заряд
if (!digitalRead(Mode3Pin)) Mode3(); //Зарядка с защитой от перезаряда
}
Браслет на руку, гидроакутика, вода - проводник, с датчиком проблем не будет. Дальше проблем быть не должно.
Вот тебе схемка
http://forum.arduino.ua/img/members/1693/IMG_20171003_110511.jpeg
Идея правильная, а вот подключать реле так нельзя - 100% что проц очень быстро уйдет в мир иной. Добавь в схему транзистор с диодом или нарисуй реле модулем.
Сима, установи в браузер расширение для проверки орфографии, и для школы будет полезно.
Ну, молотком шурупы тоже закручивать можно, но отверткой лучше получается.
А если серьезно, то: 74HC595 по памяти нагрузка максимум 20 мА на выход и меньше 100 мА суммарная. Для мелких датчиков сгодится, для серьезных устройств не хватит тока, кроме этого на выходе напряжение будет проседать под нагрузкой.
BurovB, я так понял вы не различаете внешнее напряжение питания, которым можно запитывать ардуину и/или шилд и рабочее напряжение питания, на котором работают внутренности ардуины и шилдов и соответственно логически уровни будут равны этому напряжению. Так вот практически все ардуины имеют внутренний стабилизатор и спокойно переваривают внешнее питание до 12В. А вот рабочее напряжение питания у них 3.3В или 5В и логические уровни такие же. Многие шилды тоже имеют на борту стабилизаторы. Шилд, который у вас на фото тоже имеет стабилизатор. Для облегчения жизни пользователям на нем четко написали допустимые напряжения питания и логически уровни.
В данном случае достаточно одного питания 3,6-6В. От него будет запитываться и ардуина и шилд.
Главное, чтоб логические уровни подключаемых устройств совпадали. В подавляющем большинстве случаев найти нужные модули и т.д. очень легко. Если не найдете, то есть схемы и микросхемы согласования уровней.
Датчик виснуть не может.
В коде по ссылке и светодиодик зажигается в такт движению и в ком порт пишется. Вы ничего не написали ни про светодиод ни про ком порт. Определитесь хотя бы по светодиоду - может это программа виснет, а может и Ethernet шилд чудит.
Кандидат на бан http://forum.arduino.ua/profile.php?id=1685
Даташит. Страница 369.
Какие размеры елки?
Что будет с одной платой ардуино (без шилдов, голая плата), если на неё подать напряжение 5.58V ?
В зависимости от производителя чипа - от будет работать как ни в чем не бывало до сгорит на*рен.
В даташите указано 5.5 в максимальное рабочее напряжение. Отсюда и плясать надо.
А вообще что-то мне подсказывает, что эти 0.5В у вас теряются на проводах. Попробуйте расположить источник поближе и провода потолще.
Кнопка выполняет роль прерывания, когда надо разбудить не по графику, кроме этого она задействована в синхронизации с сервером.
Проблема использования внешнего супервизора с вачдогом в том, что большинство времени проц спит, нужен супервизор понимающий паузу >8 сек, такого пока не нашел.
Фактически я бужу проц вачдогом через каждые 8 сек. Есть у него такой режим работы - прерывание, затем ресет. По идее этого должно хватить, чтоб не повис проц.
Кстати вы не использовали внутренние подтягивающие резисторы атмеги для подтяжки I2C? Интересует надежность, скорость общения маленькая, шина короткая.
Перестраховка.
Устройство работает от встроенного акума. Расчетная автономность до подзарядки - несколько месяцев. От него же питается GSM модуль, который в пике жрет до 2А и делает неплохие выбросы по питанию. Акум не отключается. Никакого внешнего доступа, кроме упомянутой кнопки нет. Есть надежда, что BOD и watchdog спасут, но хочется иметь запасной вариант. Может аппаратный ресет будет и лишним.
Имеем обычную тактовую кнопку сидящую на земле и подтянутую к плюсу. Висит она на одном из входов проца и выполняет свои задачи.
Возникла необходимость дополнительно навесить на нее функцию ресета проца - апаратно подавать 0 на вход Reset проца, при длительном удержании кнопки (>10 сек).
Кроме как добавить в схему резистор, конденсатор и транзистор ничего интересного в голову не приходит. Размеры устройства маленькие, раздувать схему не хочется. Может кто подскажет более изящное решение.
Ресет нужен именно апаратный. Питание проца 2.8 В. Проц атмега 328.
Уже писал. На чисто китайских Ардуино А6 и А7 работают и как цифровые.)))
Можно фото проца? Интересно маркировку глянуть.
Не знаю подойдет ли. Можно собрать что-то типа сканирующего тепловизора - он точно сможет указать направление для поворота головы. Правда будет обнаруживать не только человека, но и все горячие предметы.
Скетч и схему подключения в студию.
Это ты добавил библиотеку в скетч. Еще надо установить ее в систему.
Потребление тока генерируемого напряжения какое? Если большое - то ШИМ с фильтрами на выходе. Если маленькое - можно резисторный делитель, коммутируемый транзисторами.
У меня на этой библиотеке отработало стабильно 4 мес. Сейчас перешел на DHT22. Рекомендую, возвращает реально точные значения, хотя немного тормознутее реагирует на изменения температуры чем DS18B20.
Пробуй:
#include <SimpleDHT.h>
//SimpleDHT.h -> строка 98 -> delayMicroseconds(10); если будет выдавать маразмы - уменьшить значение до 9 или 8
SimpleDHT11 dht11;
byte DHT11_temp; //температура измеренная с датчика DHT11, C
byte DHT11_hum; //влажность измеренная с датчика DHT11, %
loop........
if (dht11.read(DHT11_pin, &DHT11_temp, &DHT11_hum, NULL)) ....DHT11_Error.....
else .....DHT11_Ok....
Либо DHT11 не рабочий, либо пин в ардуине. Поменяйте пин или вцепите на этот пин, например, DS18B20.