功能要求:Arduino UNO(Atmega328P)控制驱动直流电机,当环境温度低于预定的温度(摄氏25°)时,直流电机停止转动;当环境温度等于或高于预定的温度(摄氏25°)时,启动直流电机转动。同时,实时环境温度在LCD 上显示。LCD 第一行显示TEMPRATURE:第二行显示摄氏温度值。
本次实验电路包含Arduino微控制器,LCD显示屏,L298直流电机驱动模块,LM35温度传感器。LM35可以将温度转化为电压输入,其关系为摄氏温度值 = (传感器值 /1024.0 )*500。L298直流电机驱动模块可以同时驱动两个电机转动,其引脚控制和功能见表。
IN1/IN3 | IN2 /IN4 | ENA/ENB | 电机1/电机2 |
---|---|---|---|
1 | 0 | PWM | 正转 |
1 | 1 | PWM | 制动 |
0 | 0 | PWM | 制动 |
0 | 1 | PWM | 反转 |
如果不需要对电机进行速度调控,则ENA和ENB不需要连接,否则需要接到Arduino uno带有PWM功能的数字引脚上。
#include
const int rs=12,en=11,d4=5,d5=4,d6=3,d7=2;
LiquidCrystal lcd(rs,en,d4,d5,d6,d7);
int ena = 10;
int input1 = 6,input2 = 7;
void setup() {
lcd.begin(16,2);
lcd.print("TEMPERATURE");
pinMode(input1,OUTPUT);
pinMode(input2,OUTPUT);
}
void loop() {
float temp;
int tem;
temp = analogRead(A0);
temp = (temp/1024)*500;
tem = int(temp+0.5);
lcd.setCursor(0,1);
lcd.print(tem);
if(tem<25){
digitalWrite(input1,LOW);
}
else{
digitalWrite(input1,HIGH);
}
}
找到Arduino IDE编译产生的hex文件,在Porteus中将此文件置入ATmega328P中,即可开始仿真。当温度高于或等于25°时,电机开始工作。
Arduino uno和L298电机带有速度调控功能。现在,将本实验予以改进,电机开始工作时,转速将和温度成正相关,当温度为85°时,电机转速达到最高值。Arduino uno的PWM功能可以模拟一个0~5v变化的电压输出,以8为二进制表示。
#include
const int rs=12,en=11,d4=5,d5=4,d6=3,d7=2;
LiquidCrystal lcd(rs,en,d4,d5,d6,d7);
int ena = 10;
int input1 = 6,input2 = 7;
void setup() {
lcd.begin(16,2);
lcd.print("TEMPERATURE");
pinMode(input1,OUTPUT);
pinMode(input2,OUTPUT);
}
void loop() {
float temp;
int tem;
temp = analogRead(A0);
temp = (temp/1024)*500;
tem = int(temp+0.5);
lcd.setCursor(0,1);
lcd.print(tem);
if(tem<25){
digitalWrite(input1,LOW);
}
else{
digitalWrite(input1,HIGH);
if(tem*3<=255)
analogWrite(ena,tem*3);
else
analogWrite(ena,255);
}