//温度传感器控制2相4线步进电机左右旋转
/*上电先自检(正反各转一圈),然后根据当前温度调节位置,温度越高,顺时针旋出越多*/
#include<Stepper.h> //引用官方步进电机库文件
#define STEPS 200 //定义步进电机每转的步数,(个人理解,相当于每转多少个脉冲)
Stepper stepper(STEPS,8,9,10,11); //初始化步进电机引脚
int previous = 0; //定义变量记录上一次的读取模拟量
const float BETA = 3950; //应与热敏电阻的β系数相匹配
void setup()
{
pinMode(A0, INPUT);
stepper.setSpeed(30); //初始化步进电机速度(单位rpm)
Serial.begin(9600);
stepper.step(STEPS); //自检-顺时针转一圈
delay(500);
stepper.step(-STEPS); //自检-逆时针转一圈
delay(1000);
}
void loop()
{
int analogValue = analogRead(A0);
float celsius = 1 / (log(1 / (1023. / analogValue - 1)) / BETA + 1.0 / 298.15) - 273.15;
int val = analogRead(A0); //定义变量val读取电位器AD值(获取传感器读数)
stepper.step(previous - val); //把步进数设置为上次和这次读取的差值(移动步数为历史读数减去当前读数)
previous = val; //记下这次读取值,作为历史数据,方便下次比较(保存历史读数)
Serial.print("setp:");
Serial.println(previous);
Serial.print("temp:");
Serial.println(celsius);
delay(500);
}