Складной якорь для надувной лодки своими руками


Складной якорь для надувной лодки своими руками

Схем паяльных станций в интернете великое множество. Часть из них выполнены на специализированных микросхемах, часть - на микроконтроллерах. Кроме того, некоторые из них позволяют не только регулировать температуру паяльника, но и использовать термофен.

Что касается данной схемы, то она рассчитана на подключение только лишь паяльника. Это связано не только с малым количеством свободных выводом микроконтроллера, но и с тем, что это потребовало бы увеличение и усложнение программного кода МК, когда места под него, что говорится, "в обрез". Большая часть кода - это управление регистрами сдвига, через которые, в свою очередь можно управлять индикатором. Программный код на языке Pascal вы можете увидеть ниже:


program PIC_SolderStation;

const
     led_d: array [0..9] of array [0..7] of byte = (
     (0,0,0,0,0,0,1,1),
     (1,0,0,1,1,1,1,1),
     (0,0,1,0,0,1,0,1),
     (0,0,0,0,1,1,0,1),
     (1,0,0,1,1,0,0,1),
     (0,1,0,0,1,0,0,1),
     (0,1,0,0,0,0,0,1),
     (0,0,0,1,1,1,1,1),
     (0,0,0,0,0,0,0,1),
     (0,0,0,0,1,0,0,1));
     led_c: array [0..2] of array [0..2] of byte = (
     (0,0,1),
     (0,1,0),
     (1,0,0));
     {mx_s: array [0..7] of array [0..2] of byte = (
     (0,0,0), 
     (0,0,1), 
     (0,1,0), 
     (0,1,1), 
     (1,0,0), 
     (1,0,1), 
     (1,1,0), 
     (1,1,1));}
     mx_s: array [0..3] of array [0..1] of byte = (
     (0,0),
     (0,1),
     (1,0),
     (1,1));
     ///////////////////////////////////////////////////////////////////////////
var
   ds: sbit at GP2_bit;
   sh_cp: sbit at GP4_bit;
   st_cp: sbit at GP5_bit;
   
   id: array [0..2] of byte;
   led: array [0..1] of byte;
   mp: byte;
   temp, r_temp, count, count_adc: integer;
   
////////////////////////////////////////////////////////////////////////////////
procedure Save;
var a:array [0..2] of byte;
    i: byte;
begin
     a[2] := temp div 100;
     a[1] := (temp mod 100) div 10;
     a[0] := (temp mod 100) mod 10;
     for i := 0 to 2 do
         Eeprom_Write(i, a[i]);
end;

function Read: integer;
var a: array [0..2] of byte;
    i: byte;
begin
     for i := 0 to 2 do
         a[i] := Eeprom_Read(i);
     result := (a[2]  100) + (a[1]  10) + a[0];
end;
////////////////////////////////////////////////////////////////////////////////

procedure RegWrite(var l_n: array [0..2] of byte; var led: array [0..1] of byte);
var n: byte;
    outp_a: array [0..15] of byte;
begin
         for n := 8 to 15 do
             outp_a[n] := led_d[l_n[count]][n - 8];
         for n := 5 to 7 do
             outp_a[n] := led_c[count][n - 5];
         for n := 3 to 4 do
             outp_a[n] := led[n - 3];
         for n := 1 to 2 do
             outp_a[n] := mx_s[mp][n - 1];
         ///////////////////////////////////////////////////////////////////////
         for n := 0 to 15 do begin
             if outp_a[n] = 0 then ds := 0 else ds := 1;
             delay_us(500);
             sh_cp := 1;
             delay_us(500);
             sh_cp := 0;
             ds := 0;
             delay_us(500);
         end;
         st_cp := 1;
         delay_us(500);
         st_cp := 0;
         if count < 2 then inc(count) else count := 0;
         ///////////////////////////////////////////////////////////////////////
         if GPIO.3 = 0 then begin
            case mp of
            0: temp := temp + 10;
            1: temp := temp - 10;
            2: Save;
            3: temp := Read;
            {4: temp := 200;
            5: temp := 250;
            6: temp := 300;
            7: temp := 350; }
            end;
            while GPIO.3 = 0 do
         end;
         if mp < 3 then inc(mp) else mp := 0;
end;

procedure ReadTemp;
var a: array [0..2] of byte;
    adc_data: integer;
begin
     RegWrite(a, led);
     ///////////////////////////////////////////////////////////////////////////
     if count_adc < 20 then
        inc(count_adc)
     else begin
         count_adc := 0;
         adc_data := adc_read(0);
         r_temp := (adc_data shl 2) + adc_data - (adc_data shr 1) + (adc_data shl 3)/256;
         r_temp := r_temp / 5;
         a[2] := temp div 100;
         a[1] := (temp mod 100) div 10;
         a[0] := (temp mod 100) mod 10;
         if r_temp < temp then begin
            led[0] := 0;
            GP1_bit := 1;
         end else begin
             led[0] := 1;
             GP1_bit := 0;
         end
     end;
     ///////////////////////////////////////////////////////////////////////////;
end;

begin
     CMCON0 := ;
     TRISIO := ;
     ANSEL := ;
     ADCON0 := ;
     led[0] := 1;
     led[1] := 0;
     while true do begin
           ReadTemp;
     end;
end.

К слову, как вы наверное уже догадались, программа была написана в среде mikroPascal for PIC

Немного о коде:

Основная трудность (для меня) заключалась в том, чтобы реализовать динамический опрос кнопок, используя сдвиговый регистр (74HC595) и мультиплексор (74HC4051 или 74HC4052). В итоге решил действовать следующим образом:​

  • При каждом вызове процедуры записи в регистр проверяем, есть ли на выходе мультиплексора низкий уровень.
  • Если есть, то определяем на каком именно (переменная mp). Если нет, то просто увеличиваем значение переменной mp на 1 и идем дальше. Так же, переключаем мультиплексор на следующий канал.

Таким образом можно опросить до 8-ми кнопок включительно.

Теперь о АЦП. Функцию чтения значения АЦП я использовал встроенную, но конфигурировал значение регистров, отвечающих за АЦП, вручную, дабы не возникло лишних конфликтов.

Информация о температуре выводится на 3-х разрядный семисегментный светодиодный индикатор. Управление устройством осуществляется посредством 8-ми кнопок (или 4-х, в урезанном варианте).

Теперь посмотрим, у нас 12 (8 сегменты + 3 аноды) выходов регистров отведены под индикатор, 3 (2) - под управление мультиплексором. Итого, остается всего 2 (3) свободных выхода. Вот к ним мы и подцепим светодиоды, которые будут отображать наличие питания и нагрев. Да, конечно, наличие питания можно не отображать светодиодом, ведь индикатор в случае отсутствия оного будет погашен. Но все же решил этот светодиод поставить - дань традиции :)

Управление же нагревом паяльника осуществляется с помощью транзистора IRFZ44 (в принципе, можно поставить IRFZ24). Он подключен напрямую, к 1 пину микроконтроллера.

Назначение кнопок на схеме указано, но повторюсь:

  1. Увеличить температуру на 10 градусов
  2. Уменьшить на 10 градусов
  3. Загрузить сохраненное значение
  4. Сохранить значение температуры
  5. Значение температуры 200
  6.    --//--    250
  7.    --//--    300
  8.    --//--    350

Схема устройства:

Схема паяльной станции на микроконтроллере PIC12F683

Сразу хочу заметить, что это схема для 4-х кнопок. Если вам нужен вариант, где используется 8 кнопок, то мультиплексор нужно заменить на 74HC4051, подключив адресный вход "С" к выходу Q7 сдвигового регистра U3. Соответственно разъем J7 взять на 8 пин, и как следствие - немного переделать печатную плату. 

Печатная плата устройства (четыре кнопки):

Кнопки и светодиоды монтируются вне платы. 

Теперь кратко о характеристиках устройства:

  • Питание 24 вольта
  • Потребляемый ток - в зависимости от выбранного паяльника, электроника ~150mA (зависит от индикатора)
  • Для отображения используется индикатор с общим анодом.
  • Регулировка температуры - без лимита. Но это не значит что можно поставить больше, чем может нагреться паяльник.
  • Микроконтроллер работает от внутреннего тактового генератора на 4МГц

Взаимозаменяемость деталей. Микроконтроллер заменить нельзя, как и микросхемы логики. Транзисторы можно взять КТ361 и аналогичные (маломощные, p-n-p). Операционный усилитель так же можно взять аналогичный, но скорее всего придется переделывать печатную плату. Резисторы можно брать +/- 10% от исходного номинала (это не касается резисторов в обвязке ОУ). Светодиодный индикатор - 3 разряда с общим анодом (можно и четыре разряда взять, но один будет погашен).

Спасибо за внимание! Если есть замечания или пожелания, пишите в комментариях!

Список радиоэлементов

Обозначение Тип Номинал Количество Примечание Магазин Мой блокнот
U1 МК PIC 8-бит

PIC12F683

1 DIP Поиск в win-source В блокнот
U2, U3 Сдвиговый регистр

CD74HC595

2 DIP Поиск в win-source В блокнот
U4 Мультиплексор/демультиплексор

CD74HC4051

1 DIP Поиск в win-source В блокнот
U5 Операционный усилитель

LM358

1 DIP Поиск в win-source В блокнот
U6 Линейный регулятор

LM7805

1 Так как ток нагрузки выше 100 мА, то необходим радиатор Поиск в win-source В блокнот
Q1, Q2, Q4 Транзистор 2N3702 3 Можно заменить на КТ315 Поиск в win-source В блокнот
Q3 MOSFET-транзистор

IRFZ44

1 Поиск в win-source В блокнот
С1, С2 Конденсатор 100 нФ 2 Поиск в win-source В блокнот
С4 Конденсатор 1000мкФ х 16В 1 Поиск в win-source В блокнот
С3 Конденсатор 1000мкФ х 50В 1 Поиск в win-source В блокнот
R1 Резистор

1 кОм

1 0805 Поиск в win-source В блокнот
R2-R11 Резистор

220 Ом

10 0805 Поиск в win-source В блокнот
R12 Резистор

100 кОм

1 0805 Поиск в win-source В блокнот
R13 Резистор

4.7 кОм

1 0805 Поиск в win-source В блокнот
R14 Резистор

1 МОм

1 0805 Поиск в win-source В блокнот
R15, R19-21 Резистор

10 кОм

4 0805 Поиск в win-source В блокнот
RV1 Резистор

47 кОм

1 подстроечный Поиск в win-source В блокнот
На схеме нет обозначения Индикатор 3-х разрядный семисегментный индикатор с ОА 1 Поиск в win-source В блокнот
Все разъемы на схеме Разъемы PLS-40. PBS-40 2 Поиск в win-source В блокнот
PB1-PB4 Кнопка 4 Любые без фиксации Поиск в win-source В блокнот
Добавить все

Скачать список элементов (PDF)

Прикрепленные файлы:

Теги:




Складной якорь для надувной лодки своими руками

Складной якорь для надувной лодки своими руками

Складной якорь для надувной лодки своими руками

Складной якорь для надувной лодки своими руками

Похожие новости: