//Beta version 0.7.3
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET -1 // Пин сброса (или -1, если используется сброс Arduino)
#define SCREEN_WIDTH 128 // Ширина OLED дисплея в пикселях
#define SCREEN_HEIGHT 32 // Высота OLED дисплея в пикселях
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
const int sensorPin = A0; // Пин для подключения датчика температуры (через LM358)
const int voltageSensorPin = A1; // Пин для датчика напряжения (через резистивный делитель)
const int currentSensorPin = A2; // Пин для датчика тока (через LM358)
const int heaterPin = 3; // Пин для управления паяльником
const int upButtonPin = 2; // Пин для кнопки увеличения температуры
const int downButtonPin = 4; // Пин для кнопки уменьшения температуры
const int toggleButtonPin = 6; // Пин для кнопки включения/выключения паяльника
const int buzzerPin = 5; // Пин для пищалки
const int maxTemp = 450; // Максимальная температура в градусах Цельсия
int desiredTemp = 200; // Желаемая температура в градусах Цельсия
double currentTemp = 0.0;
double voltage = 0.0;
double currentAmp = 0.0;
bool heaterEnabled = false; // Переменная для отслеживания состояния паяльника (включен/выключен)
void setup() {
// Инициализация дисплея
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for (;;);
}
display.clearDisplay();
display.setTextColor(SSD1306_WHITE);
display.setTextSize(0.3);
display.setCursor(0, 0);
display.println(F("MITA-100"));// Название паяльной станции
display.display();
// Настройка пинов
pinMode(heaterPin, OUTPUT);
pinMode(upButtonPin, INPUT_PULLUP); // Включаем внутренний Pull-Up резистор для кнопки увеличения температуры
pinMode(downButtonPin, INPUT_PULLUP); // Включаем внутренний Pull-Up резистор для кнопки уменьшения температуры
pinMode(toggleButtonPin, INPUT_PULLUP); // Включаем внутренний Pull-Up резистор для кнопки включения/выключения паяльника
pinMode(buzzerPin, OUTPUT);
digitalWrite(heaterPin, LOW); // Пока паяльник выключен
digitalWrite(buzzerPin, LOW); // Пищалка выключена
// Начало сериал
Serial.begin(9600);
}
void loop() {
// Считывание температуры
int sensorValue = analogRead(sensorPin);
currentTemp = map(sensorValue, 0, 1023, 0, 500); // Предполагаем, что 1023 - это максимальное значение, 0 - минимальное, и переводим в градусы Цельсия
// Считывание напряжения
int voltageValue = analogRead(voltageSensorPin);
voltage = (voltageValue / 1023.0) * 5.0 * 10; // Пример преобразования, предполагая делитель напряжения 10:1
// Считывание тока через LM358
int currentValue = analogRead(currentSensorPin);
double sensorVoltage = (currentValue / 1023.0) * 5.0;
double voltageAcrossShunt = sensorVoltage / 100; // Усиление в 100 раз
double shuntResistance = 0.01; // Резистор 0.01 Ом
currentAmp = voltageAcrossShunt / shuntResistance;
// Обработка нажатий кнопок увеличения/уменьшения температуры
if (digitalRead(upButtonPin) == LOW) {
desiredTemp += 10; // Увеличиваем желаемую температуру на 10 градусов
tone(buzzerPin, 2000, 100); // Включаем пищалку с частотой 2000 Гц на 100 мс
delay(100); // Задержка для предотвращения дребезга
}
if (digitalRead(downButtonPin) == LOW) {
desiredTemp -= 10; // Уменьшаем желаемую температуру на 10 градусов
tone(buzzerPin, 2000, 100); // Включаем пищалку с частотой 2000 Гц на 100 мс
delay(100); // Задержка для предотвращения дребезга
}
// Обработка нажатия кнопки включения/выключения паяльника
if (digitalRead(toggleButtonPin) == LOW) {
heaterEnabled = !heaterEnabled; // Переключаем состояние паяльника
tone(buzzerPin, 1000, 100); // Включаем пищалку с частотой 1000 Гц на 100 мс
delay(100); // Задержка для предотвращения дребезга кнопки
}
// Отображение информации на дисплее
display.clearDisplay();
display.setCursor(0, 0);
display.print(F("CurTemp: "));
display.print(currentTemp);
display.println(F(" C"));
display.print(F("DesTemp: "));
display.print(desiredTemp);
display.println(F(" C"));
display.print(F("Voltage: "));
display.print(voltage);
display.println(F(" V"));
display.print(F("Current: "));
display.print(currentAmp);
display.println(F(" A"));
display.print(F("Heater: "));
display.println(heaterEnabled ? F("ON") : F("OFF"));
display.display();
// Управление паяльником
if (heaterEnabled) {
if (currentTemp < desiredTemp) {
digitalWrite(heaterPin, HIGH); // Включаем нагрев
} else {
digitalWrite(heaterPin, LOW); // Выключаем нагрев
}
} else {
digitalWrite(heaterPin, LOW); // Выключаем нагрев, если паяльник выключен
}
// Проверка на максимальную температуру
if (currentTemp > maxTemp) {
// Если текущая температура превышает максимальную, установите предупреждение
display.println(F("JOPA!"));
display.display();
tone(buzzerPin, 3000, 6000); // Включаем пищалку с частотой 2000 Гц на 6000 мс
} else {
display.println(F("NORM"));
display.display();
}
// Задержка для стабилизации температуры
delay(1000);
}