오븐으로 돌아가다

12329 단어 TosterM5stack
필기일 뿐이라고.스스로 책임지세요.
나는 용접 재료의 용해 온도와 제작된 기판에 여러 가지 변화가 있을 것이라고 생각한다.

개시하다


네코비트의 영상을 보면서 이렇게 하면 개조하지 않고 갈 수 있을 것 같아요.
https://www.youtube.com/watch?v=M0lduil1xF0

사용한 적이 있다


오븐 코끼리 인쇄 EQ-AG22-BA-JKhttps://online.nojima.co.jp/commodity/1/2810000079429/
M5Stack Basic+Bus Module
https://wiki.seeedstudio.com/Grove-I2C_Thermocouple_Amplifier-MCP9600/
열전지https://www.amazon.co.jp/dp/B015E4EBL0 앞부분의 수지를 뽑고 있습니다.열전지의 앞부분은 동띠가 조금 있는 것이 가장 좋다.면적을 위해서.열전대 동선에서 탈출한 열량과 들어간 열량의 균형이 좋지 않으면 비교적 낮다는 뜻이다
SSR  https://akizukidenshi.com/catalog/g/gI-08620/
전자 부품 약간
냉장고(크림 용접 주석 보관용: 8℃로 설정)https://www.amazon.co.jp/dp/B08QM9PQCS

회로도



소묘


183℃의 크림 용접재 시험 오류
열전지의 온도는 약간 낮게 보입니까?(160℃ 내외 용접 주석 용해)
SSR 차단 후 10℃ 정도 상승
프로필을 많이 봤는데, 결과적으로
주석 용접 전 온도에서 활성화 보조 용접제 90초
용접재는 183~30초가량 녹아 OFF의 최대 온도는 205(200±10)℃(210℃로 조금 올라감)로 흰색 기판이 약간 노랗게 변하지만 허용 범위다.부적합 포장 온도로 설정
재사용 대기 시간 포함 183℃ 이상 60초간 유지 가능
이런 느낌은 다음과 같다.
https://nwws.jpn.org/Toster/Control.zip
스케치 부분
#include <M5Stack.h>
#include <Wire.h>
#include <Adafruit_I2CDevice.h>
#include <Adafruit_I2CRegister.h>
#include "Adafruit_MCP9600.h"
#include "START_XBM.h"
#include "STOP_XBM.h"
#include "now_XBM.h"
#include "mode0_XBM.h"
#include "mode1_XBM.h"
#include "mode2_XBM.h"
#include "mode3_XBM.h"
#include "mode4_XBM.h"
#include "mode5_XBM.h"
#define SsrPin G26

#define mode1_Temp 140.0f
#define mode2_Temp 140.0f
#define mode2_TempWidth 5.0f
#define mode2_Time 90000 //90s
#define mode3_Temp 183.0f
#define mode4_Temp 200.0f
#define mode4_TempWidth 10.0f
#define mode4_Time 30000 //30s
#define mode5_Temp 183.0f
#define mode6_Temp 150.0f

TFT_eSprite spr_main0 = TFT_eSprite(&M5.Lcd);
TFT_eSprite spr_main1 = TFT_eSprite(&M5.Lcd);
TFT_eSprite spr_btnA = TFT_eSprite(&M5.Lcd);
TFT_eSprite spr_btnB = TFT_eSprite(&M5.Lcd);
TFT_eSprite spr_btnC = TFT_eSprite(&M5.Lcd);
TFT_eSprite spr_Graph = TFT_eSprite(&M5.Lcd);

unsigned long totalMillis = 0, mode2Millis = 0, mode4Millis = 0, mode5Millis = 0;
byte mode = 0;
Adafruit_MCP9600 mcp;

void btnAEnable() {
  spr_btnA.fillScreen(TFT_BLACK);
  spr_btnB.fillScreen(TFT_BLACK);
  spr_btnC.fillScreen(TFT_BLACK);
  spr_btnA.drawXBitmap(0, 0, START, START_width, START_height, TFT_WHITE);
  spr_btnB.drawXBitmap(0, 0, STOP, STOP_width, STOP_height, TFT_DARKGREY);
  spr_btnC.drawXBitmap(0, 0, STOP, STOP_width, STOP_height, TFT_DARKGREY);
  spr_btnA.pushSprite(40, 220);
  spr_btnB.pushSprite(130, 220);
  spr_btnC.pushSprite(220, 220);
}
void btnADisenable() {
  spr_btnA.fillScreen(TFT_BLACK);
  spr_btnB.fillScreen(TFT_BLACK);
  spr_btnC.fillScreen(TFT_BLACK);
  spr_btnA.drawXBitmap(0, 0, START, START_width, START_height, TFT_DARKGREY);
  spr_btnB.drawXBitmap(0, 0, STOP, STOP_width, STOP_height, TFT_WHITE);
  spr_btnC.drawXBitmap(0, 0, STOP, STOP_width, STOP_height, TFT_WHITE);
  spr_btnA.pushSprite(40, 220);
  spr_btnB.pushSprite(130, 220);
  spr_btnC.pushSprite(220, 220);
}

void setup() {
  M5.begin(true, false, true, true);
  M5.Speaker.setBeep(1000, 100);
  pinMode(SsrPin, OUTPUT);
  digitalWrite(SsrPin, HIGH);
  spr_main0.setColorDepth(8);
  spr_main1.setColorDepth(8);
  spr_btnA.setColorDepth(8);
  spr_btnB.setColorDepth(8);
  spr_btnC.setColorDepth(8);
  spr_Graph.setColorDepth(8);

  spr_main0.createSprite(160, 110);
  spr_main1.createSprite(160, 110);
  spr_btnA.createSprite(60, 20);
  spr_btnB.createSprite(60, 20);
  spr_btnC.createSprite(60, 20);
  spr_Graph.createSprite(320, 110);
  Serial.begin(115200);
  if (! mcp.begin(I2C_ADDRESS)) {
    Serial.println("Sensor not found. Check wiring!");
    while (1);
  }

  Serial.println("Found MCP9600!");

  mcp.setADCresolution(MCP9600_ADCRESOLUTION_16);  
  Serial.print("ADC resolution set to ");
  switch (mcp.getADCresolution()) {
    case MCP9600_ADCRESOLUTION_18:   Serial.print("18"); break;
    case MCP9600_ADCRESOLUTION_16:   Serial.print("16"); break;
    case MCP9600_ADCRESOLUTION_14:   Serial.print("14"); break;
    case MCP9600_ADCRESOLUTION_12:   Serial.print("12"); break;
  }
  Serial.println(" bits");

  mcp.setThermocoupleType(MCP9600_TYPE_K);
  Serial.print("Thermocouple type set to ");
  switch (mcp.getThermocoupleType()) {
    case MCP9600_TYPE_K:  Serial.print("K"); break;
    case MCP9600_TYPE_J:  Serial.print("J"); break;
    case MCP9600_TYPE_T:  Serial.print("T"); break;
    case MCP9600_TYPE_N:  Serial.print("N"); break;
    case MCP9600_TYPE_S:  Serial.print("S"); break;
    case MCP9600_TYPE_E:  Serial.print("E"); break;
    case MCP9600_TYPE_B:  Serial.print("B"); break;
    case MCP9600_TYPE_R:  Serial.print("R"); break;
  }
  Serial.println(" type");

  mcp.setFilterCoefficient(2); 
  Serial.print("Filter coefficient value set to: ");
  Serial.println(mcp.getFilterCoefficient());

  mcp.setAlertTemperature(1, 30);
  Serial.print("Alert #1 temperature set to ");
  Serial.println(mcp.getAlertTemperature(1));
  mcp.configureAlert(1, true, true);  // alert 1 enabled, rising temp

  mcp.enable(true);

  Serial.println(F("------------------------------"));
  btnAEnable();
}

void loop() {
  M5.update();
  // float temp = 0;
  // get_temperature(&temp);
  float temp = mcp.readThermocouple();
  if (M5.BtnB.wasPressed())
  { mode = 0;
    digitalWrite(SsrPin, LOW);
    M5.Speaker.beep();
    btnAEnable();
  }
  if (M5.BtnC.wasPressed())
  { mode = 0;
    digitalWrite(SsrPin, LOW);
    M5.Speaker.beep();
    btnAEnable();
  }
  if (digitalRead(SsrPin) == LOW)
    spr_main0.fillScreen(TFT_WHITE);
  else spr_main0.fillScreen(TFT_PINK);
  spr_main0.drawXBitmap(0, 0, now, now_width, now_height, TFT_BLACK);
  spr_main0.setTextColor(TFT_BLACK);
  spr_main0.setTextDatum(TR_DATUM);
  spr_main0.drawNumber(temp, 159, 27, 4);
  if (mode != 0) {
    spr_main0.drawNumber((millis() - totalMillis) / 1000, 159, 109, 4);
  }
  spr_main0.pushSprite(0, 0);

  spr_main1.fillScreen(TFT_WHITE);

  switch (mode) {
    case 0: //待機状態
      digitalWrite(SsrPin, LOW);
      spr_main1.drawXBitmap(0, 0, mode0, mode0_width, mode0_height, TFT_BLUE);

      if (M5.BtnA.wasPressed())
      { mode = 1;
        btnADisenable();
        M5.Speaker.beep();
        totalMillis = millis();
        digitalWrite(SsrPin, HIGH);
        spr_Graph.fillScreen(TFT_BLACK);
        spr_Graph.drawLine(20, 0, 20, 100, TFT_WHITE);
        spr_Graph.drawLine(20, 100, 320, 100, TFT_WHITE);
        spr_Graph.setTextDatum(CR_DATUM);
        spr_Graph.setTextColor(TFT_WHITE);
        spr_Graph.drawString("100", 20, 100 - 100 / 2.5, 2);
        spr_Graph.drawString("200", 20, 100 - 200 / 2.5, 2);
        spr_Graph.drawLine(20, 100 - 183 / 2.5, 320, 100 - 183 / 2.5, TFT_RED);
      }
      break;
    case 1:  //昇温
      if (temp >= mode1_Temp) {
        mode = 2;
        mode2Millis = millis();
        M5.Speaker.beep();
      } else {
        spr_main1.drawXBitmap(0, 0, mode1, mode1_width, mode1_height, TFT_ORANGE);
        spr_main1.setTextDatum(TR_DATUM);
        spr_main1.setTextColor(TFT_ORANGE);
        spr_main1.drawNumber(mode1_Temp, 159, 27, 4);
      }
      break;
    case 2://予熱ステージ
      if (millis() > (mode2Millis + mode2_Time)) {
        mode = 3;
        M5.Speaker.beep();
        digitalWrite(SsrPin, HIGH);
      } else {
        if (temp > (mode2_Temp + mode2_TempWidth / 2.0f))  digitalWrite(SsrPin, LOW);
        if (temp < (mode2_Temp + mode2_TempWidth / 2.0f))  digitalWrite(SsrPin, HIGH);
        spr_main1.drawXBitmap(0, 0, mode2, mode2_width, mode2_height, TFT_ORANGE);
        spr_main1.setTextColor(TFT_ORANGE);
        spr_main1.setTextDatum(TR_DATUM);
        spr_main1.drawNumber(mode2_Temp, 159, 27, 4);
        spr_main1.drawNumber(mode2_Time / 1000, 159, 54, 4);
        spr_main1.drawNumber((millis() - mode2Millis) / 1000, 159, 82, 4)  ;
      }
      break;
    case 3:
      if (temp >= mode3_Temp) {
        mode = 4;
        mode4Millis = millis();
        M5.Speaker.beep();
      } else {
        spr_main1.drawXBitmap(0, 0, mode3, mode3_width, mode3_height, TFT_RED);
        spr_main1.setTextDatum(TR_DATUM);
        spr_main1.setTextColor(TFT_RED);

        spr_main1.drawNumber(mode3_Temp, 159, 27, 4);

      }
      break;
    case 4://半田フローステージ
      if (millis() > (mode4Millis + mode4_Time)) {
        mode = 5;
        digitalWrite(SsrPin, LOW);
        M5.Speaker.beep();
      } else {
        if (temp > (mode4_Temp + mode4_TempWidth / 2.0f))  digitalWrite(SsrPin, LOW);
        if (temp < (mode4_Temp + mode4_TempWidth / 2.0f))  digitalWrite(SsrPin, HIGH);
        spr_main1.drawXBitmap(0, 0, mode4, mode4_width, mode4_height, TFT_RED);
        spr_main1.setTextColor(TFT_RED);
        spr_main1.setTextDatum(TR_DATUM);
        spr_main1.drawNumber(mode4_Temp, 159, 27, 4);
        spr_main1.drawNumber(mode4_Time / 1000, 159, 54, 4);
        spr_main1.drawNumber((millis() - mode4Millis) / 1000, 159, 82, 4)    ;
      }
      break;
    case 5:
      if (temp < mode5_Temp) {
        mode = 6;
        mode5Millis = (millis() - mode4Millis) ;
        M5.Speaker.beep();
      } else {
        spr_main1.drawXBitmap(0, 0, mode5, mode5_width, mode5_height, TFT_RED);
        spr_main1.setTextColor(TFT_RED);
        spr_main1.setTextDatum(TR_DATUM);
        spr_main1.drawNumber(mode5_Temp, 159, 27, 4);
        spr_main1.drawNumber((millis() - mode4Millis) / 1000, 159, 82, 4)    ;
      }
      break;
    case 6:
      if (temp < mode6_Temp) {
        mode = 0;
        M5.Speaker.beep();
        btnAEnable();
      } else {
        spr_main1.drawXBitmap(0, 0, mode5, mode5_width, mode5_height, TFT_RED);
        spr_main1.setTextColor(TFT_RED);
        spr_main1.setTextDatum(TR_DATUM);
        spr_main1.drawNumber(mode6_Temp, 159, 27, 4);
        spr_main1.drawNumber(mode5Millis / 1000, 159, 82, 4)    ;

      }
      break;
  }
  spr_main1.pushSprite(160, 0);
  //Graph
  if (mode != 0) {
    int x = (int)((millis() - totalMillis) / 2000ul) + 20;
    int y = 100 - (temp / 2.5);
    if (y < 0)y = 0;
    if (y > 109)y = 109;
    if (x > 320)x = 320;
    spr_Graph.drawPixel(x, y, TFT_WHITE);
  }
  spr_Graph.pushSprite(0, 110);

  delay(500);
}
MCP9600의 라이브러리 Grove가 불안정하므로 Adafruite의
18비트. 불안정해서 16비트.
필터의 응답이 느려집니다. 2 를 누르십시오.

액션 화면




아래 사진은 ADC의 위치가 18일 때 가끔 낮은 온도를 나타낸다.

좋은 웹페이지 즐겨찾기