写程序,基于Arduino实现采集HX711模块和DHT11传感器数据,并在0.96寸4管脚驱动芯片SSD131590的显示屏上显示出来。采集HX711模块压力传感器的重量以及dht11传感器的温湿度,通过ESP8266 WIFI模块上传到手机app,当重量超过4kg或温度超过40度app发出提醒。并且手机app设置一个按钮,按一次使sg90舵机转动130度,再按一次转回0度以此循环。还要实现靠近 HC-SR04 模块,sg90舵机就会转动到 90 度,离开后sg90舵机会转动回 0 度。
时间: 2024-03-25 20:40:26 浏览: 99
用Arduino读取DHT11温湿度传感器
以下是一个简单的代码示例,可以实现你描述的功能。这个代码需要你连接好各个模块,并在你的手机上安装一个能够接收并处理温度、湿度和重量数据的应用程序,例如 Blynk。
```C++
#include <HX711.h>
#include <DHT.h>
#include <Wire.h>
#include <Adafruit_SSD1306.h>
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <NewPing.h>
#define DHTPIN 2
#define DHTTYPE DHT11
#define HX711_DOUT 3
#define HX711_SCK 4
#define trigPin 5
#define echoPin 6
#define servoPin 7
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
#define SCREEN_ADDRESS 0x3C
HX711 scale(HX711_DOUT, HX711_SCK);
DHT dht(DHTPIN, DHTTYPE);
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
NewPing sonar(trigPin, echoPin, 200);
BlynkTimer timer;
const char* ssid = "your_SSID";
const char* password = "your_PASSWORD";
const char* auth = "your_AUTH_TOKEN";
const char* server = "blynk-cloud.com";
const int port = 80;
float h, t, w;
int distance, servoPos = 0;
bool isNear = false;
void setup() {
Serial.begin(9600);
display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS);
scale.set_scale(2280.f);
scale.tare();
dht.begin();
Blynk.begin(auth, ssid, password, server, port);
timer.setInterval(1000L, sendData);
}
void loop() {
h = dht.readHumidity();
t = dht.readTemperature();
w = scale.get_units(10);
distance = sonar.ping_cm();
if (distance <= 10) {
if (!isNear) {
servoPos = 90;
isNear = true;
Blynk.notify("Someone is near!");
}
} else {
if (isNear) {
servoPos = 0;
isNear = false;
}
}
display.clearDisplay();
display.setCursor(0, 0);
display.print("Humidity: ");
display.print(h);
display.setCursor(0, 10);
display.print("Temperature: ");
display.print(t);
display.setCursor(0, 20);
display.print("Weight: ");
display.print(w);
display.setCursor(0, 30);
display.print("Distance: ");
display.print(distance);
display.display();
timer.run();
}
void sendData() {
if (w > 4000 || t > 40) {
Blynk.notify("Weight or temperature is too high!");
}
Blynk.virtualWrite(V1, t);
Blynk.virtualWrite(V2, h);
Blynk.virtualWrite(V3, w);
}
BLYNK_WRITE(V4) {
if (param.asInt()) {
if (servoPos == 0) {
servoPos = 130;
} else {
servoPos = 0;
}
digitalWrite(servoPin, servoPos);
}
}
```
这个代码使用了多个库,包括 HX711、DHT、Wire、Adafruit_SSD1306、ESP8266WiFi、BlynkSimpleEsp8266 和 NewPing。你需要在 Arduino IDE 的菜单栏中选择 Sketch -> Include Library -> Manage Libraries,并搜索这些库并安装它们。
这个代码通过 HX711 模块采集重量数据,通过 DHT11 模块采集温度和湿度数据,通过 HC-SR04 模块采集距离数据。它使用一个 SSD1306 OLED 显示屏在屏幕上显示这些数据。它还使用一个 SG90 伺服电机来控制舵机的位置。
该代码使用 Blynk 库将温度、湿度和重量数据上传到 Blynk 应用程序,如果重量或温度超过阈值,Blynk 应用程序将发出通知。该代码还使用 Blynk 应用程序中的虚拟按键控制 SG90 伺服电机的位置。如果 HC-SR04 模块检测到有人靠近,Blynk 应用程序也会发出通知。
阅读全文