https://youtu.be/f7UezmEiRLkскетч очень простой и очень Понятный
#include <OneWire.h> // Библиотека шины датчиков температуры
#include <DallasTemperature.h> // Библиотека Датчиков
#include <SoftwareSerial.h> //Софт сериал
SoftwareSerial mySerial(9, 8); // Софт сериал RX, TX
#define ONE_WIRE_BUS 11 // Пин подключения датчика DS18B20
#define term_power 12 // Указываем пин подключения питания датчика температуры
OneWire oneWire(ONE_WIRE_BUS); // с шиной данных
DallasTemperature sensors(&oneWire); // Инициализируем датчики
String val = ""; //переменная для чтения смс
#define MASTER "+79876543210" //укажите телефон хозяина
int ch = 0; //хз прост переменная
int t1;
unsigned long time_t;
#include "HX711.h"
HX711 scale(A1, A0);
float calibration_factor = -0.735; // калибровка! у каждых Тенза датчиков свой калибровочный коэффициент
float units; //переменные веса
float ounces; //переменные веса
float ves; //переменные веса
void setup(void){ //Предустановки
pinMode(11, INPUT_PULLUP);
Serial.begin(9600);
analogReference(INTERNAL);
scale.set_scale();
scale.tare(); //Сбрасываем на 0
scale.set_scale(calibration_factor); //Применяем калибровку
sensors.begin(); //Датчики
pinMode(term_power, OUTPUT); // Определяем пин подключения питания датчика температуры
Serial.println("Vint-cip@mail.ru");
mySerial.begin(9600); //подключаем порт модема (при других скоростях не отвечает)
delay(500);
mySerial.println("AT+GMM"); //вывести в терминал иноформацию о модеме
delay(500);
mySerial.println("AT+CSQ"); //вывести в терминал уровень сигнала (если 99, то связи нет)
delay(500);
mySerial.println("AT+CLIP=1"); //включаем АОН
delay(500);
mySerial.println("AT+CMGF=1"); //режим кодировки СМС - обычный (для англ.)
delay(500);
mySerial.println("AT+CSCS=\"GSM\""); //режим кодировки текста
delay(500);
mySerial.println("AT+CNMI=2,2");
delay(500);
}
void loop(void){ //основная программа
for(int i = 0;i < 100; i ++) units =+ scale.get_units(), 100; // усредняем показания считав 10 раз
units / 100; // делим на 10
ounces = units * 0.035274; // переводим унции в граммы
ves = ounces ; // переводим унции в граммы
ves = round(ves)/ 1000; // Запоминаем округленный текущий вес (для сравнения)
float Vbat = (analogRead(A6) * 1.1) / 1024.0;// образцовое напряжение ардуинки
float Vin = Vbat / (11.2 / (110.0 + 11.2)); // R2/(R1+R2)
sensors.requestTemperatures(); //читаем температуру
t1=sensors.getTempCByIndex(0); // это калибровка согласно показаниям датчика в равных условиях
Serial.print(t1); //печать в порт для отладки
Serial.print((char)176); //печать в порт для отладки
Serial.println();//печать в порт для отладки
Serial.print(ves );//печать в порт для отладки
Serial.print(" Kg");//печать в порт для отладки
Serial.println();//печать в порт для отладки
Serial.print(Vin );//печать в порт для отладки
Serial.print(" Volt");//печать в порт для отладки
Serial.println();
if (mySerial.available()) { //есть данные от GSM модуля
delay(200); //выждем, чтобы строка успела попасть в порт целиком раньше чем будет считана
while (mySerial.available()) { //сохраняем входную строку в переменную val
ch = mySerial.read();
val += char(ch);
delay(10);
}
Serial.println(val); // дублируем сообщение в терминал
//----------------------- определение факта приема СМС и сравнение номера(ов) с заданным(и)
if (val.indexOf("+CMT") > -1) { //если обнаружен СМС (для определения звонка вместо "+CMT" вписать "RING", трубку он не берет, но реагировать на факт звонка можно)
if (val.indexOf("79876543210") > -1) { //если номер sms наш. Укажите свой номер без "+"
Serial.println("--- SMS DETECTED ---"); //Просто подтверждаем
if (val.indexOf("Inform") > -1) { // если обнаружено кодовое слово Info
Serial.println("send you ok"); // сообщаем об этом в терминал (если нужно)
digitalWrite(term_power, HIGH); // Включаем питание датчика температуры
if (millis() - time_t > 5000) {
time_t = millis();
}
delay(200);
//собираем SMS
String smska = "Temperature:";
smska += " "; // Пробел для более удобной читаемости
smska += t1; // переменная температуры 1
smska += " C."; // Пробел для более удобной читаемости
smska += " "; // Пробел для более удобной читаемости
smska += " Ves Ulika "; // Пробел для более удобной читаемости
// smska += " "; // Пробел для более удобной читаемости
smska += ves; // переменная "Вес"
smska += " "; // Пробел для более удобной читаемости
smska += "Kg. "; // Пробел для более удобной читаемости
smska += " "; // Пробел для более удобной читаемости
smska += "battery ";
smska += Vin; // переменная "вольт"
//smska += " "; // Пробел для более удобной читаемости
smska += " Volt."; // Пробел для более удобной читаемости
smska += " "; // Пробел для более удобной читаемости
delay(200);
// digitalWrite(term_power, LOW); // Отключаем питание датчика температуры
Serial.println(smska);
sms(smska, String(MASTER)); //отправляем СМС на номер +7xxxxxxxxxx // отвечаем смской
} else { // если другое слово или вообще пустое сообщение
Serial.println("no send you"); //неверная команда
sms (String("No comand"), String(MASTER)); //запускаем процесс отправки смс с отчетом о неверной температуре
}
} else {
Serial.println("NO MASTER SMS"); //Если нет посылаем нафиг
sms (String("Warning!!! Hacking attempt"), String(MASTER));// Отсылаем уведомление хозяину о попытке взлома
}
val = "";
}
}
}
void sms(String text, String phone) //процедура отправки СМС
{
Serial.println("SMS send started");
mySerial.println("AT+CMGS=\"" + phone + "\"");
delay(500);
mySerial.print(text);
delay(500);
mySerial.print((char)26);
delay(500);
Serial.println("SMS send complete");
delay(2000);
delay(5000);
mySerial.println("AT+CMGD=4"); //стираем память смс
delay(100);
digitalWrite(term_power, LOW); // Отключаем питание датчика температуры
delay(900);
}