版本协议

GPL 3.0

标签
Arduino
专业版
#第九届立创电赛#基于Air001的加热台

创建时间:4个月前

191 0

视频

  • mmexport1718244168719.mp4

  • mmexport1718243884268.mp4

描述

<div class="document"> <p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"> </p> <h3 class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;">1、项目功能介绍</h3> <hr class="horizontal-splitline normal-bold-2"> <p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"><span style="color: #95a5a6; font-size: 14px;">使用合宙Air001单片机设计一个pid恒温加热台</span></p> <h3 class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;">2、项目属性</h3> <hr class="horizontal-splitline normal-bold-2"> <p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;">开源项目</p> <h3 class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;">3、开源协议</h3> <hr class="horizontal-splitline normal-bold-2"> <p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"><span style="color: #95a5a6; font-size: 14px;">GPL3.0</span></p> <h3 class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;">4、硬件部分</h3> <hr class="horizontal-splitline normal-bold-2"> <p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"><span style="color: #95a5a6; font-size: 14px;">采集部分使用电阻分压电路采集热敏电阻两端电压值,推算出电阻值即可查表获取温度值;继电器控制部分采用三极管驱动,线圈接二极管用于续流;设计了两个按键,一个boot0用于下载程序,另一个用于用户控制;电源部分采用220v转5v的开关电源板,可在某购物网站上买到;三色LED灯显示当前状态:蓝灯闪-待机中,温度低,红灯闪-待机中,温度高,绿灯闪-加热中,绿灯亮-到达指定温度。</span></p> <h3 class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;">5、软件部分</h3> <hr class="horizontal-splitline normal-bold-2"> <p>#define Relay PA_6<br>#define A0 PA_5<br>#define Button PB_3<br>#define Red PB_1<br>#define Green PB_2<br>#define Blue PB_0</p> <p>int T[251] = {4033,  4030,   4027,   4024,   4020,   4017,   4013,   4009,   4005,   4000,   3996,   3991,   3986,   3981,   3976,   3971,   3965,   3959,   3953,   3947,   3941,   3934,   3927,   3920,   3912,   3905,   3896,   3888,   3880,   3871,   3862,   3852,   3842,   3832,   3822,   3811,   3800,   3788,   3777,   3764,   3752,   3739,   3725,   3712,   3697,   3683,   3668,   3653,   3637,   3621,   3604,   3587,   3569,   3551,   3533,   3514,   3495,   3475,   3455,   3434,   3413,   3391,   3369,   3347,   3324,   3301,   3277,   3253,   3228,   3203,   3178,   3152,   3125,   3099,   3072,   3044,   3017,   2989,   2960,   2932,   2902,   2873,   2844,   2814,   2784,   2753,   2723,   2692,   2661,   2630,   2599,   2567,   2536,   2504,   2472,   2441,   2409,   2377,   2345,   2313,   2285,   2249,   2218,   2186,   2154,   2123,   2091,   2060,   2029,   1998,   1967,   1936,   1906,   1876,   1846,   1816,   1786,   1757,   1728,   1699,   1670,   1642,   1615,   1587,   1559,   1549,   1506,   1479,   1453,   1427,   1402,   1377,   1352,   1328,   1304,   1280,   1257,   1234,   1211,   1189,   1167,   1145,   1124,   1103,   1082,   1062,   1042,   1022,   1003,   984,    966,    947,    929,    912,    894,    877,    861,    844,    828,    812,    797,    781,    766,    752,    737,    724,    710,    697,    683,    670,    657,    645,    632,    620,    608,    597,    586,    575,    564,    553,    543,    532,    522,    512,    503,    494,    484,    475,    466,    458,    449,    440,    433,    424,    416,    409,    401,    394,    387,    380,    372,    366,    359,    352,    346,    340,    334,    327,    321,    316,    310,    305,    299,    294,    288,    283,    279,    273,    269,    264,    260,    255,    250,    246,    242,    237,    233,    230,    226,    222,    218,    214,    211,    207,    204,    200,    197,    193,    190,    187,    184,    181,    178,    175,    172,    169,    166,    164,    161,    158,    156<br>};<br>int pv;<br>int sv = 200;<br>int last_es;<br>int es;<br>int sum_es;<br>int kp = 20;<br>int ki = 5;<br>int kd = 100;<br>bool bzw;<br>int loopTime;<br>int last_value = 0;<br>/****************初始化函数****************/<br>void setup() <br>{<br>  //输入输出模式定义<br>  pinMode(Relay, OUTPUT);<br>  pinMode(Red, OUTPUT);<br>  pinMode(Green, OUTPUT);<br>  pinMode(Blue, OUTPUT);<br>  pinMode(A0, INPUT);<br>  pinMode(Button, INPUT);<br>  //初始化端口<br>  digitalWrite(Red,HIGH);<br>  digitalWrite(Green,HIGH);<br>  digitalWrite(Blue,HIGH);<br>  //串口初始化<br>  Serial.begin(9600);<br>  //ADC配置<br>  analogReadResolution(12);<br>  //PWM<br>  analogWriteFrequency(1);</p> <p>}<br>/****************主循环函数****************/<br>void loop() <br>{<br>  trig();<br>  delay(10);<br>  loopTime = loopTime + 1;<br>  if (loopTime>=150)<br>  {Main();}<br>  <br>  if (bzw==1)<br>  {<br>    analogWrite(Green,0);<br>    analogWrite(Red,255);<br>    if (pv>=sv)<br>    {analogWrite(Blue,0);}<br>    else<br>    {analogWrite(Blue,255);}<br>  }<br>  else<br>  {<br>    analogWrite(Green,255);<br>    if (pv>70)<br>    {analogWrite(Red,128);<br>    analogWrite(Blue,255);}<br>    else<br>    {analogWrite(Blue,128);<br>    analogWrite(Red,255);}<br>  }<br>  //Serial.print("标志位:");<br>  //Serial.println(bzw);<br>}<br>/****************查表函数****************/<br>int table()<br>{<br>    for (int i=0; i<251; i++)<br>    {<br>        if (T[i]<=analogRead(A0))<br>        {return i;}<br>    }<br>}<br>/****************比例环节****************/<br>int P()<br>{<br>    es = sv - pv;<br>    int pValue = kp * es;<br>    return pValue;<br>}<br>/****************积分环节****************/<br>int I()<br>{<br>    sum_es = es+sum_es;<br>    int iValue = sum_es * ki;<br>    return iValue;<br>}<br>/****************微分环节****************/<br>int D()<br>{<br>    int dValue = kd * (es - last_es);<br>    last_es = es;<br>    return dValue;<br>}<br>/****************继电器控制****************/<br>void relayControl(int x)<br>{<br>    float pid = x/2;<br>    if (pid>240)<br>    {pid = 255;}<br>    else if (pid<20)<br>    {pid = 0;}<br>    analogWrite(Relay, pid);<br>    <br>}<br>/****************串口通讯****************<br>void serialConnect()<br>{<br>    while (Serial.available())<br>    {<br>    char serialData = Serial.read();<br>    Serial.println((char)serialData);<br>    }<br>}*/<br>/****************按键扫描****************/<br>void trig()<br>{<br>    <br>    if ((last_value==0) and (digitalRead(Button)==HIGH))<br>    {<br>        bzw = !bzw;<br>        last_value = 1;<br>    }<br>    else if ((last_value==1) and (digitalRead(Button)==LOW))<br>    {<br>        last_value = 0;<br>    }<br>}<br>/****************MAIN****************/<br>void Main()<br>{<br>      pv = table();<br>      Serial.print("当前温度:");<br>      Serial.println(pv);<br>      //Serial.println(analogRead(A0));</p> <p>      int PID;<br>      if (bzw==1)<br>      {<br>          if (pv < (sv-30))<br>          {<br>            relayControl(600);<br>          }<br>          else if (pv > (sv+15))<br>          {<br>            relayControl(0);<br>          }<br>          else<br>          {<br>          PID = P() + I() + D();<br>          //Serial.print("PID:");<br>          //Serial.println(PID);<br>          relayControl(PID);<br>          }<br>      }<br>      else<br>      {<br>          PID = 0;<br>          relayControl(PID);<br>          last_es = 0;<br>          <br>      }<br>      loopTime = 0;<br>}</p> </div>

文档

BOM

暂无

附件

附件名 下载
test.ino

成员

评论(0)

  • 表情
    emoji
    小嘉工作篇
    小嘉日常篇
  • 图片
成功
工程所有者当前已关闭评论
goToTop
svg-battery svg-battery-wifi svg-books svg-more svg-paste svg-pencil svg-plant svg-ruler svg-share svg-user svg-logo-cn svg-double-arrow