Сувенир из кристалла, выращеного в домашних условиях

Идея

Идея пришла ко мне во время просмотра статей на Википедии, а именно статьи про сульфат меди (медный купорос), в которой есть картинка кристалла, выращенного в домашних условиях.

Сувенир из кристалла, выращеного в домашних условиях

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

В результате реализации получилось следующее:

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

Теперь я постараюсь кратко изложить процесс создания такого устройства.

Шаг 1: выращиваем кристалл

Из школьного курса физики мы помним, что растить кристаллы солей из водных растворов нетрудно. Для этого достаточно изготовить насыщенный раствор выбранной соли (в данном случае – медного купороса), внести в него кристаллик-затравку и подождать несколько дней. Разумеется, сразу возникают два вопроса: где взять медный купорос и где взять кристалл-затравку. Медный купорос можно приобрести в любом магазине для садоводов. Если не ошибаюсь, его используют ни то как средство от вредителей, ни то как средство от болезней растения. Стоит он около 100 рублей за 500 гр. баночку. Также, можно приобрести его непосредственно у поставщика химических реактивов, в процессе гугления я натолкнулся на хим. склад в Москве, где продают купорос по цене около 120 рублей за килограмм.
Где бы вы его ни купили, в итоге у вас окажется пакетик с голубым порошком.

Сувенир из кристалла, выращеного в домашних условиях

500 грамм для нашей цели будет более чем достаточно.

Следующее, о чем нам необходимо позаботиться – о кристалле-затравке. Это небольшой кристаллик, на котором будет оседать сульфат меди из раствора, и который в последствие вырастет до довольно внушительных размеров (кстати, если есть желание, можно вырастить кристалл намного большего размера, чем тот, что продемонстрировал я, процесс не будет отличаться, нужно будет просто подождать подольше). Затравку мы получим из насыщенного раствора купороса.
На помощь опять приходит википедия с графиком растворимости купороса в зависимости от температуры:

Сувенир из кристалла, выращеного в домашних условиях

Как мы видим, с ростом температуры растворимость существенно увеличивается, поэтому возьмем стакан-полтора воды, выльем в кастрюлю и поставим на огонь. Совсем не обязательно доводить воду до кипения, нам хватит и 70-80 градусов. Когда вода окажется достаточно нагретой, начнем сыпать в нее купорос, постоянно помешивая. Необходимо продолжать добавлять сульфат меди в воду до тех пор, пока он не перестанет в ней растворяться. После этого перельем теплый раствор в любую подходящую посуду, я для этого пользовался довольно широкими пластиковыми упаковками от сыра «виола»

Сувенир из кристалла, выращеного в домашних условиях

Теперь нам остается только ждать. Т.к. центров кристаллизации, кроме стенок, нет, процесс может затянуться. В результате охлаждения и испарения раствора на стенках сосуда начнут осаживаться небольшие кристаллы медного купороса.
Наша задача на данный момент – отобрать наиболее красивый кристалл достаточного размера, чтобы его можно было обвязать ниткой. Вид кристалла – дело вкуса, но я лично предпочитаю небольшие друзы монокристаллам и большим неряшливым скоплениям. В процессе роста друза из 4-5 монокристаллов, по моему мнению, становится куда более красивой, нежли один большой монокристалл или непонятный «ежик» из десятка, поэтому я проверял емкость каждые 1-2 часа в поисках наиболее подходящих кандидатов.

Итак, после 4-5 часов у нас появился небольшой кристалл-затравка. Его нужно аккуратно обвязать ниткой (не наматывайте на него кокон, достаточно одной петли, иначе нитки будут препятствовать росту кристалла). Второй конец нитки наматываем на карандаш и удаляемся на кухню, готовить насыщенный раствор второй раз. На этот раз нам надо приготовить его достаточно, чтобы залить в подходящую банку, в которой наш кристалл-затравка сможет висеть, не касаясь стенок и дна даже после 4х дней роста. В остальном технология та же – подогреваем воду и сыпем в нее купорос до тех пор, пока он не перестает растворяться. Далее немного остужаем раствор и выливаем в подготовленную банку (которую желательно перед этим тоже слегка прогреть теплой водой, чтобы не допустить быстрой кристаллизации раствора на стенках) и опускаем в нее затравку, кладя карандаш поперек горлышка банки и следя за тем, чтобы кристалл не касался стенок и дна. Банку ставим в какое-нибудь не очень теплое и не очень холодное место, например, на полку, и первый шаг практически закончен!

Нам остается только подождать несколько дней, пока кристалл не вырастет до нужных нам размеров. Вынимать надолго кристалл из раствора не рекомендуется, но достать и проверить как идет процесс роста вполне можно. Также не помешает очищать нитку от оседающих на нее мелких кристаллов, чтобы они не испортили форму затравки.

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

1) Покрыть кристалл лаком. Это не панацея, но все же продлит жизнь кристалла на несколько месяцев.
2) Хранить кристалл в герметичной таре. Тоже не спасет, но в сочетании с первым способом даст кристаллу с год жизни, а то и больше.
3) Самый лучший способ – залить кристалл прозрачной органической жидкостью, например, каким-нибудь прозрачным маслом. В таком сосуде кристалл будет сохраняться очень долго.

Шаг 2: создаем конструкцию

Долгая и муторная часть закончилась, теперь все пойдет быстрее. После того как я получил свой кристалл, я задался вопросом «где же взять подходящий стеклянный цилиндр, в который кристалл можно заключить?» Ответ нашелся в магазине «все для дома», в виде отличной цилиндрической стопки для водки стоимостью в 20 рублей за штуку.

Сувенир из кристалла, выращеного в домашних условиях

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

Итоговая конструкция, к которой мы должны придти изображена ниже.

Сувенир из кристалла, выращеного в домашних условиях

В принципе, если вы вырастили кристалл размером с кулак, или вам просто не нравится такие стопки, можно выбрать любую подходящую прозрачную тару. Главное, чтобы была возможность ее в последствие герметизировать, чтобы предотвратить выветривание кристалла.
Теперь наша задача найти полую внутри пластиковую вставку, на которую можно поместить кристалл, а внутри нее – схему управления с батарейкой. Я остановился на пластиковой коробочке из-под канифоли, которая идеально входила в рюмку.
В центре нее проделываем дырку под светодиод (подробнее на выборе светодиода я остановлюсь в части, посвященной электронике), вставляем его туда и заклеиваем изнутри термоклеевым пистолетом. На этот же клей сажаем кристалл снаружи пластиковой подставки, прямо над светодиодом.
Удостоверившись, что все именно так, как нужно, переходим к финальной стадии этого шага – смазываем внешнюю поверхность подставки герметиком подходящего цвета (я выбрал черную подставку, соответственно и черный герметик) и вставляем ее внутрь рюмки. После того как герметик застынет у вас получится полностью герметичная рюмка с кристаллом внутри, который можно подсветить, подав питание на выводы светодиода.
Я ничем не заливал кристалл, остановившись на варианте с лаком и герметичным сосудом, но если вы очень сильно хотите быть уверенны, что кристалл будет хранится веками, то можно залить его каким-нибудь прозрачным органическим составом(маслом, допустим). Правда это потребует от вас грамотной герметизации, чтобы девайс не начал вдруг протекать.

Переходим к наиболее интересному шагу – разработке электроники.

Шаг 3: разрабатываем электронику

После выполнения вышеописанных шагов у нас должна была получиться заготовка, к которой, в принципе, можно добавить батарейку и выключатель, и получить готовое изделие. Но такой сувенир не будет ничем выделяться среди кучи разных «светяшек», продающихся по 50 рублей ведро. Наша цель на этом шаге разработать электрическую схему устройства, которое во-первых влезет в нашу подставку, во-вторых не будет потреблять много тока в режиме простоя (можно, конечно, вывести наружу выключатель, но по мне так это сильно портит впечатление), и в-третьих обеспечит то, к чему мы и стремились с самого начала: плавное возрастание свечения кристалла, когда его берут в руку, и угасание после того как его поставят на место.
По сути перед нами стоят две задачи:
1) Определить прикосновение к девайсу человека
2) Управлять яркостью светодиода.

Отличным вариантом решения первой задачи является реализация емкостного сенсора. Несмотря на звучное название, она весьма проста и требует, по сути, только самого сенсора (в виде простого кусочка фольги, проволоки, или площадки на печатной плате), 1-2 пинов микроконтроллера и резистора с сопротивлением от мегаома и выше.

Обратимся к теории. Предположим, у нас имеется последовательное соединение резистора и конденсатора, описанное в статье википедии «RC-цепь»

Сувенир из кристалла, выращеного в домашних условиях

Предположим, что изначально Vin = 0 и конденсатор разряжен. Vc, таким образом, также равно нулю. При приложении напряжения Vin, не равного нулю, напряжение на конденсаторе растет по следующему закону:

Сувенир из кристалла, выращеного в домашних условиях

Где T=RC.
Предположим теперь, что вместо конденсатора у нас имеется обычная металлическая пластинка, или полоска фольги. Согласно законам физики, она также обладает некоторой, пусть и очень малой, емкостью, порядка единиц пикофарад. Нетрудно подсчитать, что время, за которое такая пластинка зарядится, при резисторе в 1 МОМ составляет 10^6*10^(-12) = 10^(-6) c. Очень маленькая величина, однако, для микроконтроллера, работающего на частоте 10 МГц, успеют пройти целых 10 тактов.
Теперь представим, что пластинки коснулся человек. Его емкость на два порядка выше емкости пластинки и составляет около 100-200 пикофарад. Следовательно, время, за которое пластинка зарядится, существенно возрастет.

Ниже представлена модель сенсора в системе Proteus.
Конденсатор C1 выступает в качестве собственной емкости нашей сенсорной пластинки, С2 вместе с выключателем SW1 – емкость прикасающегося человека.

Сувенир из кристалла, выращеного в домашних условиях

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

Алгоритм опроса сенсора также очень прост и вытекает и сказанного выше:

1) PB.4 мы устанавливаем на выход, и подаем туда 0. Это разрядит сенсор.
2) PB.3 устанавливаем на вход, отключив подтяжку (это важно! Подтяжка к питанию будет постоянно держать сенсор заряженным, а нам это не нужно).
3) Настраиваем таймер микроконтроллера на нужную нам частоту. Частота выбирается по следующему критерию: она должна быть достаточно большой, чтобы захватить время заряда и различить «пустой» сенсор от активного, но в то же время, достаточно маленькой, чтобы при активном сенсоре не произошло переполнения таймера. Так как в нашем устройстве микроконтроллер будет работать от встроенного тактового генератора для экономии места, его максимальная частота будет равна 9.6 МГц, что вполне подходит по вышеизложенному критерию. Поэтому таймер будем запускать без предделителя, на частоте микроконтроллера.
4) Включаем таймер
5) Выводим в PB.4 логическую единицу, тем самым запуская процесс зарядки емкостей
6) Проверяем значение на PB.3 до тех пор, пока там не появится лог. 1.
7) Останавливаем таймер.
8) Выводим в PB.4 лог. 0 для разрядки сенсора.

Полученное значение таймера и есть число, по которому мы будем определять, пуст сенсор или нет. Но сравнивать его напрямую с прикидочным значением неправильно. Это сделает схему очень зависимой от окружающих условий. Для правильной работы сенсора необходимо при запуске выполнить калибровку, то есть выполнить описанный алгоритм, и записать полученное значение таймера во внутреннюю переменную, SensorLow, сочтя его значением, соответствующем неактивному сенсору.
В процессе опроса сенсора же, нужно будет выполнить все описанные шаги, и полученное значение сравнивать, допустим, с SensorLow+N, где N – порог чувствительности нашего сенсора.

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

Несколько слов о выборе светодиода и источника питания.
От элемента питания нам требуется долгий срок службы «на полке» (при низком потреблении), напряжение питания 3-5 вольта, для запитки контроллера и светодиода и сравнительно большой ток при полностью зажженном светодиоде – 10-15 мА.
Для этих целей идеально подходит литиевая батарейка CR2450, выдающая напряжение 3.0 вольта, обладающая емкостью примерно в 610 мАч, способная отдать большие (до 30 мА) токи и храниться до 10 лет.
Стоимость такой батарейки составляет около 100р.

Сувенир из кристалла, выращеного в домашних условиях

Светодиод я выбрал синий, под цвет кристалла, с размером линзы 5 мм, но все в ваших руках, можно экспериментировать с разными цветами и оттенками. Главное условие для светодиода – напряжения батарейки должно быть достаточно для его открытия.
Падение напряжения на моем синем светодиоде составляет около 2.7 вольта, что значит, что при «просадке» батарейки всего на 0.3 вольта диод уже не загорится. Существуют светодиоды с еще большим падением напряжения, для таких выбранная литиевая батарейка уже не подойдет.
Однако, нет худа без добра – высокое падение напряжения на моем светодиоде сделало возможным его подключение без дополнительного резистора. В итоге полная электрическая схема выглядит так:

Сувенир из кристалла, выращеного в домашних условиях

Предельно просто – маленький 8-пиновый микроконтроллер ATTiny13, один мегаомный резистор, один светодиод и полоска фольги в качестве сенсора, которую я наклеил на внешний бортик пластиковой подставки и соединил со схемой тонкой проволочкой. Пины питания и земли контроллера на схеме не указаны.
Мы почти у цели, осталось написать прошивку, чему посвящен следующий шаг (в следующей статье).

Шаг 4: разрабатываем прошивку

Прошивка для устройства вполне тривиальная, но стоит обратить внимание на следующие моменты:
1) У данного микроконтроллера всего один 8-битный таймер, так что придется использовать его одновременно и для ШИМа и для опроса сенсора, переключаясь туда-обратно.
2) Чтобы снизить энергопотребление, было бы неплохо погружать устройство в сон, когда к нему никто не прикасается.

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

И еще одно примечание: если будете собирать такой девайс и тестить «навесу» запомните следующее:
сенсор покажет намного бОльшую емкость, если вы при тестировании второй рукой касаетесь, допустим, минуса батарейки. Я с этим накололся, так как при тестировании прижимал провода к батарейке руками, поэтому выставил чересчур большой порог.

Общий подход к реализации такой: устройство может находится в одном из шести состояний:
1) Диод не горит, ждем отклика от сенсора. В этом состоянии мы периодически проверяем сенсор, после чего засыпаем примерно на секунду, что обеспечит низкое энергопотребление
2) После первого отклика от сенсора уже не засыпаем, ждем примерно 300 мс, чтобы убедится, что это не помеха, и перепроверяем сенсор. Если сенсор не активен, то возвращаемся в состояние 1. Иначе переходим к состоянию 3.
3) Переключаем таймер в режим ШИМа и медленно повышаем скважность, после чего светимся пока не пройдет секунды 4 и переходим в состояние 4
4) Переключаем таймер из ШИМа в сенсорный режим, проверяем сенсор, чтобы определить, когда девайс поставят на место, когда сенсор становится неактивен, переходим к состоянию 5
5) Ждем еще секунд 15, перепроверяем сенсор. Если активен, то возвращаемся к состоянию 4. Иначе, переходим к состоянию 6.
6) Медленно гаснем, при этом, периодически переключая таймер из режима ШИМ в режим сенсора и перепроверяя его активность. Если сенсор вновь стал активен, то переходим к состоянию 3, снова начиная разгораться. Иначе, когда скважность дошла до 0, вновь переходим в режим 1.

Ниже я изложу код с комментариями. Т.к. с кодом пришлось поторопиться, чтобы успеть к новому году, там вполне могут быть совершенно неоптимальные моменты, прошу за них особо не пинать)
Тем не менее, это полностью рабочий и отлаженный код. Занимает примерно процентов 70-80 флеш-памяти тиньки.

*****************************************************************************************************

#define F_CPU 9600000UL
#include
#include
#include
#include
#include

//Состояния девайса
enum DEV_MODE{M_WAITING_SENSOR, //Ждем отклика от сенсора и спим
M_SENSOR_RECHECK, //После первого отклика перепроверяем
M_GLOW, //Разгораемся
M_GLOW_AND_CHECK, //Светим и проверяем сенсор
M_GLOW_AND_RECKECK, //Перепроверяем, если отпустили
M_FADE}; //Гаснем

unsigned char SensorHi=0; //Переменная, которая будет хранить значение для активного сенсора
unsigned short Delay=0; //Внутренняя переменная для организации долгих задержек
unsigned short PWM=0; //Скважность ШИМа
unsigned char Mode=0; //Режим работы

void SetTimer(char Mod) //Функция для быстрой переинициализации таймера с режима сенсора на ШИМ
{
if(Mod) //1, проверка сенсора
{
TCCR0A=0x00;
TCCR0B=0x00;
TCNT0=0x00;
}
else //0, ШИМ
{
TCCR0A=0x83;
TCCR0B=0x00;
TCNT0=0x00;
}
}

void Recalibrate() //Калибровка сенсора
{
cli(); //На всякий случай отключаем интеррапты, мало ли что)
SetTimer(1);
DDRB&= 0b11110111;
PORTB|=0b00010000;
TCCR0B=0x01;
while(!(PINB&0b00001000));
TCCR0B=0x00;
DDRB|= 0b00001000;
PORTB&= 0b11101111;
SensorHi=TCNT0+3; //При такой частоте +3 оказалось вполне достаточно, даже слегка много
sei(); //Включаем интеррапты обратно
}

unsigned char CheckSensor()
{
cli();
SetTimer(1);
DDRB&= 0b11110111;
PORTB|=0b00010000;
TCCR0B=0x01;
while(!(PINB&0b00001000));
TCCR0B=0x00;
DDRB|= 0b00001000;
PORTB&= 0b11101111;
unsigned char Time=TCNT0;
sei();
if(Time>SensorHi)
return 0xFF;
return 0x00;
}

ISR(SIG_WATCHDOG_TIMEOUT) //Пустой обработчик прерывания сторожевого таймера
{
__asm__ __volatile__(«nop»); //Нужен просто чтобы разбудить систему
}

int main()
{
ACSR = 0b1000000; //Настройка режима энергосбережения
DDRB = 0b00011001;
SetTimer(1); //Переключили таймер в режим проверки сенсора
Mode= M_WAITING_SENSOR;
sei();
PORTB=0b00000001; //Зажигаем диод и ждем 4 секунды
for(char i=0;i0x0010)
{
if(!CheckSensor())
{
Mode= M_WAITING_SENSOR;
Delay=0x0000;
}
else
{

Delay=0x0000;
Mode= M_GLOW;
SetTimer(0);
PWM=0x00;
OCR0A=PWM;
TCCR0B|=0x01;
}
}
break;

case M_GLOW:
Delay++;
if((PWM0x0200) //Полностью разгорелись
{
SetTimer(1);
PORTB =0b00000001; //Вместо ШИМа напрямую подаем лог. 1
Mode= M_GLOW_AND_CKECK;
Delay=0x0000;
}
break;

case M_GLOW_AND_CKECK:
if(!CheckSensor())
{
Mode=M_GLOW_AND_RECKECK;
PWM=0xFF;
}
break;

case M_GLOW_AND_RECKECK:
Delay++;
if(Delay>0x0500) //Долгая пауза, чтобы не погаснуть сразу же как отпустят
{ //а посветить еще секунд 20
if(CheckSensor())
{
Mode= M_GLOW_AND_CKECK;
Delay=0x0000;
}
else
{

Delay=0x0000;
Mode=M_FADE;
PWM=0xFF;
OCR0A=PWM;
SetTimer(0);
TCCR0B=0x01;
}
}
break;

case M_FADE:
Delay++;
if(Delay%5==0) //Раз в пять Delay перепроверяем сенсор
{
TCCR0B=0x00;
PORTB = 0b00000000;
if(CheckSensor())
{
Mode=0x02; //Если что — начинаем снова разгораться
Delay=0x0000;
}
SetTimer(0);
TCCR0B=0x01;
}
if((PWM>0)&&(Delay%2==0)) //Медленно гаснем
PWM—;
if(Delay>0x0200) //Совсем погасли
{
SetTimer(1);
PORTB=0b00000000;
Mode= M_WAITING_SENSOR;
Delay=0x0000;
}
break;
}
OCR0A=PWM;
_delay_ms(20);
}

}

*****************************************************************************************************

Заключение

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

В своем девайсе я разделил подставку на две части, в верхней расположил схему, от которой вывел провода питания и сенсора, заклеил ее пластиковой перегородкой. На нее поставил широкую пружинку под минус батарейки и изогнутую пластинку сверху под плюс. Таким образом, после того как подставка закрывается крышечкой, пластины оказываются прижаты к батарейке, и схема включается, давая мне 4 секунды на то чтобы убрать руки до калибровки. Если этого не сделать, девайс сочтет что у неактивного сенсора емкость равна емкости активного, и зажечь его не перекалибровав будет невозможно.

Судя по моим измерениям, схема потребляет 0.02 мА в режиме простоя и около 12 мА при полной яркости диода. Даже если мультиметр показал неточный результат и ошибся на порядок, энергии в батарейке должно хватить где-то на полгода простоя, что является вполне неплохим результатом.

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

Источник: habrahabr.ru

Добавить комментарий