воскресенье, 5 ноября 2017 г.

Термометр с индикацией из ПЯТИ светодиодов!!!

ЗАДАЧА ПРОЕКТА

Задача следующая. Сделать термометр на arduino с минимальной индикацией.
У меня получилось на 5ти светодиодах. И показывает температуру от минус 255 до 255 градусов!!! Без дробной части. Один диод знак числа, и четыре - само число. Для каких целей? Может измерять температуру на улице, может дома, может маслопечки, может тела...Куда угодно можно тыкать датчиком!!!


СХЕМА УСТРОЙСТВА

 

Не показан знаковый светодиод. Он подключен аналогично и к 13 цифровому выходу.

ВНЕШНИЙ ВИД
 


МАТ. ЧАСТЬ

1 МИКРОКОНТРОЛЛЕР. Использовал ARDUINO PRO MINI 5v 16 MHz. Программировал программатором. Плюсовой провод отключал - запитывал аккумулятором. Их много купил в Китае. И программатор.

2  Питание. Элемент литиевый 18650, взял от старого ноута.

Они вот такие.
Батарейку предварительно полностью зарядил. Как заряжать, напишу в другом сообщении.
Преобразователь использовал на микрухе LM2577. Это повышающий от 3,5 В. Выход настроил на 5,1 В. Как раз разрядиться до 3,5В и преобразователь отключится. Полного разряда не произойдет! Плюсовой вывод батарейки отключается выключателем. На схеме не показан.


3 Датчик температуры. DS18B20.
Вот такой. В Китае продается.



DS18B20 это цифровой измеритель температуры, с  разрешением преобразования 9 - 12 разрядов и функцией тревожного сигнала контроля за температурой. Параметры контроля могут быть заданы пользователем и сохранены в энергонезависимой памяти датчика.
DS18B20 обменивается данными с микроконтроллером по однопроводной линии связи, используя протокол интерфейса 1-Wire.


Диапазон измерения температуры составляет от -55 до +125 °C. Для диапазона от -10 до +85 °C погрешность не превышает 0,5 °C.

4 Индикация. Пять светодиодов любого цвета. Я взял один зеленый (на знак) и четыре белых (число).


ТЕОРЕТИЧЕСКИЙ БАЗИС




Буду использовать четвертичную систему счисления. Это которая оперирует цифрами 0, 1, 2, 3 и все!!! Она родственница двоичной. Только двоичные разряды надо сгруппировать парами.
27D=00011011B=00 01 10 11 B=0123(4)
Т.е. 27 число, это 123 в четвертичной.


Нам тогда нужны 4 разряда - это число от 0 до 255 (байт). Для передачи температуры датчика -55 +125 градусов Цельсия в самый раз. 4 разряда - 4 светодиода.

4 градации светодиод может передать запросто. Они даже хорошо различимы на глаз:
0 - не горит. Однако чтобы обозначить светодиод в темноте (чтобы увидеть все четыре разряда), он будет иногда промаргивать.
1 - слабо горит. PWM10/255.
2 - меняется сила света, мигает. Раньше было горит в пол накала PWM127/255, но к сожалению в пол накала на глаз не получается отличить от полного накала ))) Пытался...
3 - горит сильно. Полный накал слишком ярко, использую PWM100/255.
 PWM - это pulse-width modulаtions.  Это ШИМ по нашему, широтно-импульсная модуляция.
Платы Ардуино на базе микроконтроллеров ATmega328 имеют 6 аппаратных широтно-импульсных модуляторов. Сигналы ШИМ могут быть сгенерированы на выводах 3, 5, 6, 9, 10, 11.
Использую 3,5,11,9 - соответственно разряды 0, 1, 2, 3. 6 у меня сгорел раньше от неудачных опытов ))) Это только у меня. Разряды нумеруются с 0го справа налево. Вот так:

3 разряд            2 разряд                1 разряд                0 разряд
0                                 1                           2                             3              = 27 градусов

Частота ШИМ Ардуино 488,28 Гц. Разрядность - 8 бит.

Но как перевести температуру в десятичной системе счисления (СС) в четверичную? Используем двоичную математику. Сдвиги вправо и поразрядное И.
Вот наши разряды:

ind0_=int(tmp) & 3;
ind1_=int(tmp)>>2 & 3;
ind2_=int(tmp)>>4 & 3;
ind3_=int(tmp)>>6 & 3;


Т.е. 3 это 00 00 00 11. Поразрядное И дает чистыми только два последних разряда, что нам и надо!!!. А сдиг вправо последовательно на два разряда позволяет получить остальные пары разрядов (старшие, которые правее).

Так:   00 01 10 11 &
          00 00 00 11
_________________
         00  00  00 11 = 3 - это 0й разряд.
Сдвигаем на два разряда.
00 01 10 11 >> 2 = 00 00 01 10
 Далее поразрядное И:

          00 00 01 10 &
          00 00 00 11
_________________
         00  00  00 10 = 2 - это 1й разряд.

И так далее все 4е разряда.









 КОД ПРОШИВКИ

#include <OneWire.h>
#include <DallasTemperature.h>

// Data wire is plugged into port 2 on the Arduino
#define ONE_WIRE_BUS 10
// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);

// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);

int ind0 = 3;  //будут аналоговые выходы
int ind1 = 5;
int ind2 = 11;
int ind3 = 9;
int indsgn= 13;
int ind0_;
int ind1_;
int ind2_;
int ind3_;
double tmp;//температура
int sgn;
int i;


void setup(void)
{
  // start serial port
  Serial.begin(9600);
  // Start up the library
  sensors.begin();
  pinMode(ind0, OUTPUT);    
  pinMode(ind1, OUTPUT);
  pinMode(ind2, OUTPUT);
  pinMode(ind3, OUTPUT);
  pinMode(indsgn, OUTPUT);
}

void loop(void)
{
 // call sensors.requestTemperatures() to issue a global temperature
  // request to all devices on the bus
  sensors.requestTemperatures(); // Send the command to get temperatures
  tmp=sensors.getTempCByIndex(0);
 
if(tmp>-60&&tmp<200){//1 если температура хотя бы правдоподобная
i+=10;
if (i>=100) i=10;
Serial.print(millis());Serial.print(" ");Serial.print(tmp);Serial.print(" ");//печатаю ее
sgn=(tmp>0)-(tmp<0);
tmp=abs(tmp);
ind0_=int(tmp) & 3;
ind1_=int(tmp)>>2 & 3;
ind2_=int(tmp)>>4 & 3;
ind3_=int(tmp)>>6 & 3;

if(ind0_==0) {if(i==10) analogWrite(ind0,10); else analogWrite(ind0,0);}
if(ind0_==1) {analogWrite(ind0,10);}
if(ind0_==2) {analogWrite(ind0,i);}
if(ind0_==3) {analogWrite(ind0,100);}

if(ind1_==0) {if(i==10) analogWrite(ind1,10); else analogWrite(ind1,0);}
if(ind1_==1) {analogWrite(ind1,10);}
if(ind1_==2) {analogWrite(ind1,i);}
if(ind1_==3) {analogWrite(ind1,100);}

if(ind2_==0) {if(i==10) analogWrite(ind2,10); else analogWrite(ind2,0);}
if(ind2_==1) {analogWrite(ind2,10);}
if(ind2_==2) {analogWrite(ind2,i);}
if(ind2_==3) {analogWrite(ind2,100);}

if(ind3_==0) {if(i==10) analogWrite(ind3,10); else analogWrite(ind3,0);}
if(ind3_==1) {analogWrite(ind3,10);}
if(ind3_==2) {analogWrite(ind3,i);}
if(ind3_==3) {analogWrite(ind3,100);}

if(sgn<0) digitalWrite(indsgn, HIGH); else digitalWrite(indsgn, LOW);
Serial.print(ind0_);Serial.print(" ");
Serial.print(ind1_);Serial.print(" ");
Serial.print(ind2_);Serial.print(" ");
Serial.print(ind3_);Serial.print(" ");
}//1
Serial.println(); 
}
ПОРЯДОК ЭКСПЛУАТАЦИИ ПРИБОРА


Включили, он через 2 секунды показывает температуру.
Считали все четыре разряда.
0 - не горит (промаргивает для наглядности.
1 - слабо горит.
2 - меняется сила света, мигает.
3 - горит сильно.

Посмотрели по таблице температуру:




Здесь первые два разряда в самом левом столбце, остальные - в первой строке.
Или по формуле:

ТЕМПЕРАТУРА=3РАЗРЯД*64+2РАЗРЯД*16+1РАЗРЯД*4+0РАЗРЯД

Такую индикацию, думаю, будет видно и за 1 км (возможно). В бинокль. Т.е. считать показания 4-х светодиодов.

Если загорелся знаковый светодиод, то температура отрицательная )))

ПРИМЕРЫ ИСПОЛЬЗОВАНИЯ
1
Сунули под мышку. Показал 0211 (первый светодиод не светит, иногда промаргнивает, второй меняет яркость, третий и четвертый слабо светит). По таблице это 37 градусов. Вы больны, мистер!
2
За окно показал 0013(первые два промаргивают иногда, третий еле светит, а четвертый сильно горит). Это 7 градусов выше нуля. Одевай шапку!


АРХИВ ПРОЕКТА

В папку libraries arduino 1.0.6 киньте две папки OneWire и DallasTemperature, откройте temp1/temp1.ino и вперед, улучшать и модифицировать. Никаких авторских прав! Кроме библиотек OneWire и DallasTemperature, эти авторские )))

https://drive.google.com/open?id=0B1AR0G3hSwPZZGdMMFE0eFFSNVE

ВИДЕО

А надо?

понедельник, 23 октября 2017 г.

Отопление гаража

Закончил отопление гаража. На отработанном масле.
Расход и температура пока очень радуют.
7-10 градусов в гараже поднимаю за час до 15 градусов, при этом очень комфортно работать.
Печенька нагревается до 60 градусов. Очень комфортная температура для теплообменника.
Затем вентилятором обдуваю на весь гараж.

Итак, вот так выглядит печка:





Черный - теплообменник. Выполнен из старого водонагревателя аристон. И трубы 80-ки.
Вот схема:

Пластину просто внатяг засунул. Она отсечет слишком длинное пламя.

Под теплообменник подставляется горелка маленькая.
Отказался от большой емкости 300*300*200, на которую надевался теплообменник по нескольким причинам (вот эта):


1. Слишком большая мощность.
Когда заливаешь 2 литра масла, оно дает такую большую мощность, что черная краска теплообменника начинает дымится - градусов 200!!! Такая мощность не нужна.
2. Повышенная опасность.
Если 2 литра кипящего масла от попадания в него воды (случайно) расплескаются по гаражу, начнется пожар... Зачем он нужен, пожар то? )))
3. Помпаж.
Теплообменник от перепадов давления начинает резанировать. И чуть не разносит его!!! УУУУУУУУУ-УУУУУУУ. Страшное дело.

4. Большой расход масла.
За час-другой эти 2 литра сгорят, слишком быстро... Надо управлять мощностью.


Вместо большой емкости использую небольшую горелку маслянную.
В нее организовал поддув и капельную подачу масла.
Она лишена всех 4 недостатков.
Разработал сам.
Вот схема:
Состоит из нижней части 2-литрового огнетушителя и рессоры от 8ки.
Трубки 13е взял от старого водонагривателся. Маслянная под наклоном вниз 45 градусов. Воздушная - 20 градусов.

Такой огнетушитель:


Низок обрезал. Высота стакана 85.
И вварил две трубки. Одна - подача масла, вторая - подача воздуха. Причем последняя смотрит вбок, чтобы закручивать поток воздуха по часовой.

Накрывается стаканчик трубкой от рессоры. Крышку сделал из 2 мм железа. 130 сторона квадрата. Нашел в гараже. Нижний конец трубы выпирает на 40, чтобы если перельет масло - затухло само собой.
Верхний на 260.

3 дырки просверлил на расстоянии 60. 8ки. Но надо больше. 12 штук надо. Со всех 4х сторон.



Чтобы плотно закрывалась, к пластине приварил гаечки четыре.

Куллер обычный компьтютерный 80 ка.
Смонтировал в монтажке и вывел трубу 3/4''.



Его вполне достаточно для горелки таких размеров. Пламя шумит и завихряется. Огонь на все три дырки.

И система в работе:

Отработка капает часто, капля в пол-секунды.
300 грамм хватило ровно на 1 час.
И 50 грамм отдельно выгорают за 10 минут.
Данные сходятся.


Вытяжку сделал гофрированной трубой и потом сендвич с зонтиком. Над гаражом 3 м над землей.


Через стену идет таже труба 80ка. Заделал цементом.


ВНИМАНИЕ:

Обязательно делайте вертикальную вытяжку на высоту не менее 3 м. А то тяги не будет.
Весь дым в гараж. И разорвет гофру взрывом. Это газы скапливаются в теплообменнике. У меня так было...


Видео печки в работе!


11.12.17
Раз пять уже зимой грелся. Было и в 0, и в минус 10.
При нуле разогревает гараж до 5 градусов за 1,5 часа, при минус 10 до плюс 2.
Просто гараж кирпичный с бетонным полом и неутепленный вообще.
Тепло из всех щелей свистит.


РОЗЖИГ:
10 г опилок и сверху налить 50 г отработки, поджечь 10 г бензина. Распалить воздухом до яркого пламени. Подать масло и воду (вода капает с внешней стороны на основание трубы, обычная капельница, пар дырки втягивают). В трубе пока 9 дырок с одной стороны хватает.

РАБОТА:

Расход: 150 г за 1,5 часа!!!

 Каждый час желательно перемешивать. Шлак образуется, препятствующий горению масла, температура падает.

Дым еле заметный или вообще не наблюдается!!! Думал шутка, оказывается нет, правда. Очень удачная печка получилась. И горелка мобильная, правда без принудительного воздуха не фурычит.

ТЕМПЕРАТУРНОЕ ПОЛЕ

Купил пирометр и промерил температуры.






Температуры в кружочках: когда печка выходит в режим, температуры меняются местами, т.е. у трубы больше, 460, а у миски меньше, 320.

 

вторник, 10 октября 2017 г.

Горелочка походная

Всего 3 детали. Все бросовые.
Маленькая баночка из под краски, труба от рессоры 8-ки, прокладка алюминевая.

Алюминевая кастрюла как радиатор, особо не смотрите.

11.12.17
Проверил зимой. Отлично фурычит. Заливал 50 г отработки на 10 г опилок. Поджигал - немного бензина на бумажку. Отработала 30 минут.
Значит 50 г потребляет за 30 минут.

 

СОЛНЕЧНЫЙ КОЛЛЕКТОР

20 пивных бутылок. Покрасил в черный цвет. Разместил в герметичном корпусе. Фольгой утеплил.





Печка на отработке с радиатором

Наконец сделал радиатор к печке. Из водонагревателя Аристон. Толщина металла 1,5 мм. Но ничего, проварилось! Даже я плохой сварщик сварил без дырок!!!

Греется хорошо, даже чайник кипятил.


Долой педали!

Катаясь на электровелосипеде, всегда думал - зачем педали? Снять их и дело с концом. И наконец снял!!!

15 сантиметров в обе стороны, чтобы не мешались
 Из черенка от лопаты!!!
 Внешний вид




Без них намного легче гонять. На неровностях можно лавировать. Это перед ямой отпрыгнуть как бы. И велик яму перепрыгивает!

вторник, 5 сентября 2017 г.

Восстановления компа 04.09.17. BOOTMGR is missing

Вадим принес комп, он не реагировал на монитор.
Оказалось - настройки биоса сбились. Перемычку на очистку биоса поставил, и картинка пошла.

Но другая проблема - Вадим подцепил винчестер второй, и система теперь с него грузится.
Решил просто удалить диск Ц.

При удалении возникла ошибка основного диска. Потратил часа три, чтобы скинуть с него данные.

Система Windows 7 теперь перестала грузиться. Ошибка BOOTMGR is missing Press Ctrl+Alt+Del to restart.
Оказалось, это я активным сделал не тот диск. Надо было делать активным диск служебным размером 100 МБ. Он обязательно с 7-кой есть.

Сразу появилась другая ошибка, полегче Windows failed to start...
Вылечилась так: загрузил Восстановление системы с загрузочного диска, нажал кнопку Исправить и перезагрузить. И все получилось!!! Загрузилась система.