digispark — паяльная станция

Опубліковано: 10 січня 2015р. 22:55
Я їжджу на Mitsubishi Colt VI
Павлоград, Україна

На этот "подвиг" меня толкнула тема на ардуиновском форуме ( Паяльная станция из ардуино ) . Только для паяльной станции решил использовать digispark
… Рисовать схему своего девайса не буду т.к. делал "на коленке" и в статье есть понятная схема и описание конструкции.
Только в своем варианте я применил ТРИ линейных стабилизатора -> 12V -> 9V -> 5V что бы избежать больших радиаторов…

У китайских товарищей был заказан паяльник …

Собирал все на универсальной печатной плате … Индикатор крепится на разъеме …

Когда девайс "отдыхает" он может использоваться как часы, питается от батарейки …

А вот так выглядит девайс в основном режиме …

Для тех кто захочет повторить эту конструкцию, ниже привожу скетч для digispark …

/*
********************************************************
********************** — B — Pin **********************
Digispark B5A0 – ATtiny85 pin 1 – (reset)
Digispark B3A3 – ATtiny85 pin 2 – управление транзистором
Digispark B4A2 – ATtiny85 pin 3 – вход датчика температуры паяльника
Digispark B0 – ATtiny85 pin 5 – ЛСД di(high)
Digispark B1 – ATtiny85 pin 6 – ЛСД sk(low)
Digispark B2A1 – ATtiny85 pin 7 – вход резистор настройки температуры
********************************************************
********************************************************
*/

#include <util/delay.h>
const int potSensorPin = A1; // порт подключения регулятора
int tempSet = 0; // задаваемая температура
const int heaterSensorPin = A2; // порт подключения термистора паяльника
int tempRead = 0; // температура паяльника

byte tR1, tR2, tR3, tH1, tH2, tH3, z;

void setup() {
DDRB = B001011;
PORTB = B000001;
}

void loop(){

tempRead = getOversampled(heaterSensorPin);
tempSet = map(getOversampled(potSensorPin), 0, 1023, 350, 500);
if (tempSet > tempRead) PORTB |= (1<<3);
if (tempSet <= tempRead) PORTB &=~ (1<<3);

if (tempRead < 350) { tH1=15; tH2=15; tH3=15; }
if (tempRead >= 350) {
int Ht = map(tempRead, 350, 500, 173, 404);
tH1 = Ht/100;
if (tH1==0) tH1=10;
tH2 = (Ht%100)/10;
if (tH2==0) tH2=10;
tH3 = Ht%10;
if (tH3==0) tH3=10; }

int tR = map(tempSet, 350, 500, 173, 404);
tR1 = tR/100;
if (tR1==0) tR1=10;
tR2 = (tR%100)/10;
if (tR2==0) tR2=10;
tR3 = tR%10;
if (tR3==0) tR3=10;

if (++z >= 74) {
z = 0;
writeDigit(0);
writeDigit(tH1);
writeDigit(tH2);
writeDigit(tH3);
writeDigit(0);
writeDigit(0);
writeDigit(tR1);
writeDigit(tR2);
writeDigit(tR3);
writeDigit(0); }
}

void writeDigit(byte d) {
for (byte i=0; i<4; i++) {
PORTB |=(1<<1);
_delay_us(20);
digitalWrite(0, d&(1<<(3-i)));
_delay_us(10);
PORTB ^=(1<<1);
_delay_us(30); }
_delay_us(70);
}

int getOversampled(int sensorPin) {
unsigned long int res = 0;
for (byte j = 0; j < 64; j++) res += analogRead(sensorPin);
return res >> 6;
}

0 0

Коментарі

Щоб залишати коментарі, потрібно авторизуватись.