[Arduino] Thermistor, Peltier module 을 활용해 Rising time과 Return Time 다항식 만들기 / 파이썬 / 아두이노

2025. 4. 16. 17:16·HCI/Arduino
728x90
반응형

이전 포스팅에서 만든 최종 결과로, 다항식을 만들어볼 예정입니다.

일단 제 실험 결과는 아래처럼 나왔습니다.

더보기
Folder File Delta Rise_Time_s Return_Time_s
delta_-1.0 run_1.csv -1 1.029 1.027
delta_-1.0 run_2.csv -1 1.029 1.027
delta_-1.0 run_3.csv -1 1.03 0.822
delta_-1.0 run_4.csv -1 1.03 1.027
delta_-1.0 run_5.csv -1 1.029 1.028
delta_-2.0 run_1.csv -2 1.648 1.644
delta_-2.0 run_2.csv -2 1.75 1.644
delta_-2.0 run_3.csv -2 1.648 1.644
delta_-2.0 run_4.csv -2 1.75 1.028
delta_-2.0 run_5.csv -2 1.647 1.644
delta_-3.0 run_1.csv -3 2.369 2.159
delta_-3.0 run_2.csv -3 2.265 2.159
delta_-3.0 run_3.csv -3 2.265 2.055
delta_-3.0 run_4.csv -3 2.369 2.159
delta_-3.0 run_5.csv -3 2.367 2.158
delta_-4.0 run_1.csv -4 2.678 2.467
delta_-4.0 run_2.csv -4 2.883 2.467
delta_-4.0 run_3.csv -4 2.883 2.468
delta_-4.0 run_4.csv -4 2.781 2.467
delta_-4.0 run_5.csv -4 2.884 2.467
delta_-5.0 run_1.csv -5 3.296 2.673
delta_-5.0 run_2.csv -5 3.398 2.672
delta_-5.0 run_3.csv -5 3.398 2.672
delta_-5.0 run_4.csv -5 3.398 2.672
delta_-5.0 run_5.csv -5 3.296 2.467
delta_-6.0 run_1.csv -6 4.015 2.98
delta_-6.0 run_2.csv -6 3.811 2.981
delta_-6.0 run_3.csv -6 3.81 2.981
delta_-6.0 run_4.csv -6 3.809 2.877
delta_-6.0 run_5.csv -6 3.81 2.98
delta_0.0 run_1.csv 0    
delta_0.0 run_2.csv 0    
delta_0.0 run_3.csv 0    
delta_0.0 run_4.csv 0    
delta_0.0 run_5.csv 0    
delta_1.0 run_1.csv 1 1.132 1.028
delta_1.0 run_2.csv 1 1.028 1.027
delta_1.0 run_3.csv 1 1.028 1.13
delta_1.0 run_4.csv 1 1.131 1.028
delta_1.0 run_5.csv 1 1.132 1.027
delta_2.0 run_1.csv 2 1.749 1.748
delta_2.0 run_2.csv 2 1.543 1.541
delta_2.0 run_3.csv 2 1.647 1.645
delta_2.0 run_4.csv 2 1.749 1.644
delta_2.0 run_5.csv 2 1.749 1.644
delta_3.0 run_1.csv 3 2.47 2.262
delta_3.0 run_2.csv 3 2.263 2.261
delta_3.0 run_3.csv 3 2.367 2.159
delta_3.0 run_4.csv 3 2.264 2.261
delta_3.0 run_5.csv 3 2.263 2.261
delta_4.0 run_1.csv 4 2.675 2.673
delta_4.0 run_2.csv 4 2.779 2.569
delta_4.0 run_3.csv 4 2.676 2.364
delta_4.0 run_4.csv 4 2.779 2.467
delta_4.0 run_5.csv 4 2.882 2.569
delta_5.0 run_1.csv 5 3.191 2.776
delta_5.0 run_2.csv 5 3.088 2.878
delta_5.0 run_3.csv 5 3.088 2.775
delta_5.0 run_4.csv 5 2.984 2.775
delta_5.0 run_5.csv 5 3.19 2.57
delta_6.0 run_1.csv 6 3.602 2.877
delta_6.0 run_2.csv 6 3.603 2.878
delta_6.0 run_3.csv 6 3.705 2.877
delta_6.0 run_4.csv 6 3.602 2.981
delta_6.0 run_5.csv 6 3.499 2.878

이제, 이걸 다항식으로 만들어보겠습니다.

 

import numpy as np
import pandas as pd
from numpy.polynomial import Polynomial
import json

# ============================
# 1. Load and clean data
# ============================

# CSV 파일 로드
df = pd.read_csv("delta_summary_rise_return_times.csv")

# NaN 제거
clean_data = df.dropna(subset=["Rise_Time_s", "Return_Time_s"])

# ============================
# 2. Group by Delta and get mean
# ============================

# Delta별 평균 Rise/Return Time 계산
delta_avg = clean_data.groupby("Delta")[["Rise_Time_s", "Return_Time_s"]].mean().reset_index()

# 평균 Rise, Return도 함께 저장
delta_avg["Mean_Time"] = delta_avg[["Rise_Time_s", "Return_Time_s"]].mean(axis=1)

# 컬럼명 명확히
delta_avg.rename(columns={
    "Rise_Time_s": "Mean_Rise_Time_s",
    "Return_Time_s": "Mean_Return_Time_s"
}, inplace=True)
output_path = "delta_mean_times.csv"
round(delta_avg,2).to_csv(output_path, index=False)
# ============================
# 3. Polynomial Fit
# ============================

# Δ별 평균값 추출
deltas = delta_avg["Delta"].values
rise_times = delta_avg["Mean_Rise_Time_s"].values
return_times = delta_avg["Mean_Return_Time_s"].values

# 2차 다항식 피팅 후 standard basis로 변환
rise_poly = Polynomial.fit(deltas, rise_times, 2).convert()
return_poly = Polynomial.fit(deltas, return_times, 2).convert()

# ============================
# 4. Δ 입력 시 평균값 계산 함수
# ============================

def get_rise_return_time(delta_val):
    if delta_val == 0:
        return 0.0, 0.0
    rise = rise_poly(delta_val)
    ret = return_poly(delta_val)
    return round(rise, 2), round(ret, 2)

# 예시 출력
print(f"다항식: rising : {rise_poly} \n return: {return_poly}")
example_outputs = {delta: get_rise_return_time(delta) for delta in [-6, -4.3, -2, 0, 1.5, 3.2, 6]}
print(example_outputs)

# ============================
# 5. 다항식 계수 JSON 저장 (JS 연동용)
# ============================

# 계수 추출
rise_coeffs = rise_poly.coef.tolist()
return_coeffs = return_poly.coef.tolist()

# JSON 파일로 저장
with open("rise_coeffs.json", "w") as f:
    json.dump(rise_coeffs, f)

with open("return_coeffs.json", "w") as f:
    json.dump(return_coeffs, f)

 

최종적으로 저장되는 형태

Delta Mean_Rise_Time_s Mean_Return_Time_s Mean_Time
-6 3.85 2.96 3.41
-5 3.36 2.63 2.99
-4 2.82 2.47 2.64
-3 2.33 2.14 2.23
-2 1.69 1.52 1.6
-1 1.03 0.99 1.01
1 1.09 1.05 1.07
2 1.69 1.64 1.67
3 2.33 2.24 2.28
4 2.76 2.53 2.64
5 3.11 2.75 2.93
6 3.6 2.9 3.25
728x90
반응형

'HCI > Arduino' 카테고리의 다른 글

[Arduino] dual thermal feedback  (0) 2025.05.22
[Arduino] Thermistor, Peltier module 을 활용해 Rising time과 Return Time 계산하기 / 파이썬 / 아두이노  (0) 2025.04.16
[Arduino] Thermistor 센서 값 받아 아두이노 출력 하기  (2) 2024.09.27
'HCI/Arduino' 카테고리의 다른 글
  • [Arduino] dual thermal feedback
  • [Arduino] Thermistor, Peltier module 을 활용해 Rising time과 Return Time 계산하기 / 파이썬 / 아두이노
  • [Arduino] Thermistor 센서 값 받아 아두이노 출력 하기
sillon
sillon
꾸준해지려고 합니다..
    반응형
  • sillon
    sillon coding
    sillon
  • 전체
    오늘
    어제
    • menu (614)
      • notice (2)
      • python (68)
        • 자료구조 & 알고리즘 (23)
        • 라이브러리 (19)
        • 기초 (8)
        • 자동화 (14)
        • 보안 (1)
      • coding test - python (301)
        • Programmers (166)
        • 백준 (76)
        • Code Tree (22)
        • 기본기 문제 (37)
      • coding test - C++ (5)
        • Programmers (4)
        • 백준 (1)
        • 기본기문제 (0)
      • 공부정리 (5)
        • 신호처리 시스템 (0)
        • Deep learnig & Machine lear.. (41)
        • Data Science (18)
        • Computer Vision (17)
        • NLP (40)
        • Dacon (2)
        • 모두를 위한 딥러닝 (강의 정리) (4)
        • 모두의 딥러닝 (교재 정리) (9)
        • 통계 (2)
      • HCI (23)
        • Haptics (7)
        • Graphics (11)
        • Arduino (4)
      • Project (21)
        • Web Project (1)
        • App Project (1)
        • Paper Project (1)
        • 캡스톤디자인2 (17)
        • etc (1)
      • OS (10)
        • Ubuntu (9)
        • Rasberry pi (1)
      • App & Web (9)
        • Android (7)
        • javascript (2)
      • C++ (5)
        • 기초 (5)
      • Cloud & SERVER (8)
        • Git (2)
        • Docker (1)
        • DB (4)
      • Paper (7)
        • NLP Paper review (6)
      • 데이터 분석 (0)
        • GIS (0)
      • daily (2)
        • 대학원 준비 (0)
      • 영어공부 (6)
        • job interview (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    백준
    소수
    programmers
    Python
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
sillon
[Arduino] Thermistor, Peltier module 을 활용해 Rising time과 Return Time 다항식 만들기 / 파이썬 / 아두이노
상단으로

티스토리툴바