Зеленый дом DasFilisera
Компоненты и расходные материалы
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Приложения и онлайн-сервисы
| ||||
|
Об этом проекте
Выращивайте растения и овощи, лучше понимая условия их окружающей среды. Просто используя MKR1000
Требования к росту растений
Рост растений зависит от нескольких идеальных условий окружающей среды, таких как температура, влажность, свет и другие минеральные вещества или кислород.
Обеспечение растений достаточным количеством воды или поддержание нормальной температуры в теплице может быть непростым процессом, но не если бы вы могли сделать это намного проще.
Обзор оборудования
Температура / влажность
TH1 - Значения внешней температуры будут предоставлены водонепроницаемым датчиком DS18B20 - контактный разъем D1
TH2 - Внутри темп. / гул. можно узнать из DHT22 - вывод D0
TH3 - ФС200 / ШТ25 - будет внедряться в почвенных условиях. Подключения будут для контактов SCL и SDA 12/11
Рычаг воды
W1 - для определения уровня воды будет использоваться ультразвуковой датчик, такой как HC - SR04 Connections на A0 - Echo и Trigger на A1. Основываясь на этом значении, вы можете управлять клапаном с помощью реле R1 - 4 каналов.
Температура воздуха / кислород
A1 - На основании значений температуры / влажности вы можете указать, когда открывать окна с помощью реле R2. В зависимости от климата вы должны настроить его по своему усмотрению.
Реле R1 / R2
Чтобы установить некоторые команды, такие как открытие Windows или запуск любого насоса, вы можете отправлять команды на реле ... R1 подключен к цифровым контактам 7,8,9,10 и R2 5,6
MKR1000 - aRest
Теперь, когда мы соединили все вместе, пришло время получить некоторые данные и использовать библиотеку aRest, которая предоставит веб-интерфейс для устройства MKR1000 со строкой формата json. Используйте библиотеки, файлы .ino, представленные ниже, и соответствующим образом измените подключение к маршрутизатору Wi-Fi.
Данные и интерфейс
Пока у нас есть интерфейс для нашего устройства, мы также можем потреблять эти данные и видеть их в локальной сети.
Мы использовали Visual Studio 2015 и .net для создания приложения для Windows, которое поможет вам визуализировать живые условия в теплице, а также немного ежедневной истории или всех видов журналов, которые вы хотите интегрировать.
Для хранения в облаке мы просто использовали конфигурации теплицы DasData, или вы можете создать свои собственные каналы данных.
Следующим шагом будет изменение DsKey и AKey, предоставленных в Settings.txt из папки приложения. Если все работает, вы уже должны увидеть некоторые данные в Интернете.
Следите за хакерским каналом DasData, чтобы узнать больше о будущих обновлениях
Автоматизация теплиц
Вы должны решить, какие клапаны или двигатели будут создавать больше действия в зависимости от конфигурации и размеров вашей теплицы. Все это можно было контролировать с помощью реле.
Код
- Filisera_Arduino
- libraries.zip
- Filisera - vb.zip
- Filisera - VS
Filisera_Arduino C / C ++
DASFilisera использует библиотеку aREST для платы Arduino / Genuino MKR1000./ * DASFilisera использует библиотеку aREST для платы Arduino / Genuino MKR1000. aREST - Написано в 2016 году Марко Шварцем под лицензией GPL. * /// Импортируйте необходимые библиотеки # include#include #include #include "DHT.h" #include #include #include #include // ********************** *** // ** Senzori Temperatura ** // ************************* # определить DHTPIN 0 // Внутренняя влажность / температура / тепло index # define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321 # define ONE_WIRE_BUS 1OneWire oneWire (ONE_WIRE_BUS); датчики температуры Dallas (&oneWire); float umidSol =0; // Влажность почвыfloat umidAer =0; // Влажность воздуха float tempIn =0; // Температура надувания tempOut =0; // Температура на выходе tempSol =0; // Объем контейнера плавающий umidexIn =0; // По ощущениям темп // VOLUM #define echoPin A0 // Echo pin A0 # define trigPin A1 // Триггерный вывод A1long duration; // продолжительность для вычисления расстояния int HR_dist =0; // Расчетное расстояние int minimumRange =5; // Мин. Диапазон сонараint maximumRange =200; // Макс. Дальность действия сонараunsigned long pulseduration =0; int nivelCm, nivelRamasCm; int nivelProc, nivelVol; int empty =100; int full =100; int sqrLevel, sqrInvertLevel; // Statusint status =WL_IDLE_STATUS; // Создание экземпляра aRESTaREST rest =aREST (); // Параметры WiFi char ssid [] ="WIFI_AP"; char password [] ="WIFI_PASSW"; // Порт для прослушивания входящих TCP-соединений # define LISTEN_PORT 80 // Создание экземпляра сервераWiFiServer server (LISTEN_PORT); // INITIALIZARE SENZORI DHT dht (DHTPIN, DHTTYPE); // RELEE RELEEEint aVentil, aLateral; int inReleu1Ventil =6; int inReleu2Ventil =6; int inReleu2Ventil =6; int inReleu2Ventil =6; int inReleu2Ventil =6; int inReleu2Ventil; int inReleu4Ventil =9; int inReleu1Lateral =10; int inReleu2Lateral =11; // Объявить функции, которые будут доступны APIint ledControl (команда String); void setup (void) {// Запустить Serial Serial.begin (115200); // Инициализируем переменные и предоставляем их REST API // rest.variable ("temperature", &temperature); // rest.variable ("влажность", &влажность); // Предоставляемая функция rest.function ("led", ledControl); // Дать имя и ID устройству rest.set_id ("1"); rest.set_name ("mkr1000"); // Подключаемся к WiFi while (status! =WL_CONNECTED) {Serial.print ("Попытка подключиться к SSID:"); Serial.println (ssid); status =WiFi.begin (ssid, пароль); // Ждем 10 секунд подключения:delay (10000); } Serial.println («WiFi подключен»); // Запускаем сервер server.begin (); Serial.println («Сервер запущен»); // Распечатать IP-адрес IPAddress ip =WiFi.localIP (); Serial.print ("IP-адрес:"); Serial.println (ip); // НАСТРОЙКА DHT - ВНУТРИ DHT dht (DHTPIN, DHTTYPE); // sensor.begin (); // Датчик температуры внешней среды DS-16B20 pinMode (trigPin, OUTPUT); pinMode (echoPin, ВХОД); // Инициализировать переменные и предоставить их REST API rest.variable ("Vol_container", &sqrLevel); rest.variable ("Umiditate_sol", &umidSol); rest.variable ("Umiditate_aer", &umidAer); rest.variable ("Temp_in", &tempIn); rest.variable ("Temp_out", &tempOut); rest.variable ("Temp_sol", &tempSol); // rest.variable ("Umidex_in", &umidexIn); // сенсоры.requestTemperatures (); // Температурный выход} void loop () {getmyDistance (); // getSoilVals (); getInsideVals (); // getOutSideVals (); // Обработка вызовов REST WiFiClient client =server.available (); если (! клиент) {возврат; } пока (! client.available ()) {задержка (1); } rest.handle (клиент);} void getmyDistance () {digitalWrite (trigPin, LOW); delayMicroseconds (2); digitalWrite (trigPin, HIGH); delayMicroseconds (10); digitalWrite (trigPin, LOW); duration =pulseIn (echoPin, HIGH); // вычислить расстояние HR_dist =duration / 58.2; // sqrLevel =empty - HR_dist; если (HR_dist> =maximumRange || HR_dist <=minimumRange) {sqrLevel =0; } еще {sqrLevel =empty - HR_dist; Serial.println (HR_dist); } задержка (100); } void getDistance () {digitalWrite (trigPin, LOW); delayMicroseconds (10); // теперь отправляем импульс 10uS для активации Ping digitalWrite (trigPin, HIGH); delayMicroseconds (10); digitalWrite (trigPin, LOW); // наконец, измеряем длину входящего импульса pulseduration =pulseIn (echoPin, HIGH); // делим длину импульса на halfpulseduration =pulseduration / 2; // конвертируем в сантиметры. nivelRamasCm =int ( pulseduration / 29); nivelCm =empty - nivelRamasCm; nivelVol =map (nivelRamasCm, full, empty, 100, 0); // Типаэстэ нивелул в сантиметрах if (nivelCm> =-5 &&nivelCm <=135) {double a =nivelCm / 100 * nivelVol; int sqrLevel =240 - nivelCm; int sqrInvertLevel =120 + nivelRamasCm; if (nivelCm> 65 &&nivelCm <=85) {} if (nivelCm> 85 &&nivelCm <=100) {}}} long microsecondsToCentimeters (длинные микросекунды) {// Скорость звука составляет 340 м / с или 29 микросекунд в сантиметр // Пинг проходит вперед и назад, поэтому расстояние составляет половину пройденного расстояния return microseconds / 29/2;} void getInsideVals () {float h =dht.readHumidity (); // Считываем температуру в градусах Цельсия (по умолчанию) float t =dht.readTemperature (); // Считываем температуру по Фаренгейту (isFahrenheit =true) // с плавающей запятой f =dht.readTemperature (true); umidAer =h; tempIn =t; // Проверяем, нет ли сбоев при чтении, и выходим раньше (чтобы повторить попытку). if (isnan (h) || isnan (t)) {Serial.println («Не удалось прочитать с датчика DHT!»); возвращение; } // Вычислить индекс тепла в градусах Фаренгейта (по умолчанию) // float hif =dht.computeHeatIndex (f, h); // Вычислить индекс тепла в градусах Цельсия (isFahreheit =false) // float hic =dht.computeHeatIndex (t, h, false); // umidexIn =hic; } void getOutSideVals () {tempOut =sizes.getTempCByIndex (0); Serial.println ("Температура на выходе:"); Serial.print (tempOut); } void getSoilVals () {umidSol =SHT2x.GetHumidity (); tempSol =SHT2x.GetTemperature (); Serial.println («Влажность почвы (% относительной влажности):»); Серийный принт (umidSol); Serial.print («Температура почвы (C):»); Serial.print (tempSol); } // сенсоры.requestTemperatures (); // Temperatura Out // Пользовательская функция, доступная через APIint ledControl (String command) {// Получить состояние из команды int state =command.toInt (); digitalWrite (6, состояние); возврат 1;}
libraries.zip C / C ++
Библиотеки, используемые в FiliseraБез предварительного просмотра (только загрузка).
Filisera - vb.zip VBScript
.net Проект Visual StudioБез предварительного просмотра (только загрузка).
Filisera - VS VBScript
.net файл, который будет читать данные из arduino и показывать интерфейсImports System.GlobalizationImports System.IOImports System.NetImports System.ThreadingImports System.Windows.Forms.DataVisualization.ChartingImports Newtonsoft.JsonPublic Class Form1 Private _deviceIP As String ="" ' УСТРОЙСТВО IP Private intVolumContainer, intUmidSol, intUmidSera, intTempAfara, intTempSera, intTempSol, intUmidex As String 'VARIABILES Private strR1, strR2 As String' RELAYS Public Count As CountDown 'Private As String ="COUNTDOWN TICK RESIT_ String ="" 'USER KEY DASDATA Private _DSKey As String =""' DATASET KEY DASDATA Private _myDas As New dasData.das Private Sub Form1_Load (sender As Object, e As EventArgs) Обрабатывает MyBase.Load Count =New CountDown (50, 0 ) '5 СЕКУНД ОБНОВЛЕНИЕ AddHandler Count.Tick, AddressOf Count_Tick AddHandler Count.TimesOut, AddressOf Times_up Попробуйте' ПРОЧИТАТЬ НАСТРОЙКИ ИЗ .txt ФАЙЛА Тусклый путь As String =Directory.GetCurrentDirectory ( ) Dim FILE_NAME As String =path &"\ Settings.txt" Dim myText As String ="" 'Если System.IO.File.Exists (FILE_NAME) =True, затем Dim objReader как новый System.IO.StreamReader (FILE_NAME, System. Text.Encoding.Default) Do While objReader.Peek () <> -1 myText &=objReader.ReadLine () Loop Dim _settingItems () As String =myText.Split ("") _deviceIP =_settingItems (0) 'IP-ul DEVICE _AKey =_settingItems (1) .Replace ("akey:", "") _DSKey =_settingItems (2) .Replace ("dskey:", "") cbxEnabled.Text ="Device:" &_deviceIP txtInfo.Text =" IP-устройство:"&_deviceIP &vbNewLine &" AKey:"&_AKey &vbNewLine &" DSKey:"&_DSKey &vbNewLine strR1 =_settingItems (3) .Replace (" relay1:"," ") txtInfo.Text + =" Relay1 :"&strR1 &vbNewLine strR2 =_settingItems (4) .Replace (" relay2:"," ") txtInfo.Text + =" Relay2:"&strR2 &vbNewLine 'txtInfo.Text =" Настройки:"&myText objReader.Dispose () objReader.Close () End If Catch ex As Exception lblDevice.Text =ex.Message.ToString End Попробуйте cmdCheckDevice () 'ЛОКАЛЬНЫЕ НАСТРОЙКИ Thread.CurrentThread.CurrentCulture =New CultureInfo ("en-US") 'Thread.CurrentThread.CurrentUICulture =New CultureInfo ("ro-RO") cmdStartFilisera () End Sub Private Sub Count_Tick (ByVal sender As System.Object, ByVal e As System.EventArgs) cmdGetSensorValues () cmdTriggers () Если CDate (dtFrom.Text) .ToString ("dd.MM.yyyy") =Date.Now (). ToString ("dd.MM.yyyy") Тогда cmdStartFilisera () Если End Sub Private Sub Times_up (ByVal sender As System.Object, ByVal e As System.EventArgs) 'Count.Reset ()' Count.Pause () End Sub Private Sub cmdStartFilisera () Try dtFrom.MaxDate =DateTime.Now _dasResult =_myDas.getDas (_DSKey, "json", 0, 100) cmdFillData () Catch ex As Exception lblDevice.Text + =ex.Message.ToString End Try End Sub Private Sub cbxEnabled_CheckedChanged (sender As Object, e As EventArgs) Обрабатывает cbxEd. CheckedChanged cmdCheckDevice () End Sub Private Sub cmdCheckDevice () Try If cbxDemo.Checked =False Then lblDevice.Text =("Включить устройство!") LblEvenimente.Text =Date.Now.ToString ("dd.MM .yyyy HH:mm:ss ") Если cbxEnabled.Checked =True, тогда Dim pingsender As New Net.NetworkInformation.Ping Если не pingsender.Send (_deviceIP) .Status =Net.NetworkInformation.IPStatus.Success Then lblDevice.Text =(" Устройство недоступно в локальной сети! ") CbxEnabled.Checked =False btnTemperatura.Enabled =False btnVolumContainer.Enabled =False Count.Reset () Count.Pause () MessageBox.Show (" Устройство в "&_deviceIP &" не найдено! ") Else lblDevice.Text =(" Устройство подключено! ") BtnTemperatura.Enabled =True btnVolumContainer.Enabled =True cmdGetSensorValues () Timer1.Enabled =True cmdAddData () Count.Start () End If Else End If Else b True btnVolumContainer.Enabled =True cmdGetSensorValues () Timer1.Enabled =True cmdAddData () Count.Start () End If Catch ex As Exception End Try End Sub Private Sub btnVolumContainer_Click (sender As Object, e As EventArgs) Handles btn ://192.168.0.102/digital/7/1 'ЗАКРЫТЬ ВОДУ ОТ КНОПКИ Dim _ItemsR1 () As String =s trR1.Split (",") Если btnVolumContainer.Text.Contains ("Open") Тогда cmdRelay (_ItemsR1 (0), 1) cmdRelay (_ItemsR1 (1), 1) cmdRelay (_ItemsR1 (2), 0) cmdRelay (_ItemsRelay (_Items (3), 0) btnVolumContainer.Text ="Закрыть воду" Остальное cmdRelay (_ItemsR1 (0), 0) cmdRelay (_ItemsR1 (1), 0) cmdRelay (_ItemsR1 (2), 1) cmdRelay (_ItemsR1 (3), ) btnVolumContainer.Text ="Open water" End If 'Dim _url As String =_deviceIP &"digital / 7/1" End Sub Private Sub btnTemperatura_Click (sender As Object, e As EventArgs) Обрабатывает btnTemperatura.Click' ЗАКРЫТЬ ОКНО С КНОПКИ _ItemsR2 () As String =strR2.Split (",") Если btnTemperatura.Text.Contains ("Open") Тогда cmdRelay (_ItemsR2 (0), 1) cmdRelay (_ItemsR2 (1), 1) btnTemperatura.Text ="Close window "Else cmdRelay (_ItemsR2 (0), 0) cmdRelay (_ItemsR2 (1), 0) btnTemperatura.Text =" Open window "End If End Sub Private Sub Sub Timer1_Tick (sender As Object, e As EventArgs) Handles Timer1.Tick cmdAddData () End Sub Private Sub btnTestCloud_Click (sender As Object, e As EventArgs) Обрабатывает btnTestCloud. Щелкните Попробовать cmdStartFilisera () Catch ex As Exception MessageBox.Show («Потеряно соединение с DasData!») End Try End Sub Private Function cmdRelay (ByVal _DPin As String, ByVal _cmd As Int16) Try Dim _urlCommand As String =_deviceIP &"/ digital / "&_DPin &" / "&_cmd Dim client As New WebClient () client.Headers.Add (" user-agent "," Arduino / 4.0 (совместимый; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;) ") Dim data As Stream =client.OpenRead (_urlCommand) Dim reader As New StreamReader (data) Dim s As String =reader.ReadToEnd () 'txtInfo.Text + =(s) data. Close () reader.Close () Catch ex As Exception End Try End Function Private Sub dtFrom_ValueChanged (sender As Object, e As EventArgs) Обрабатывает dtFrom.ValueChanged Попробуйте 'ПОЛУЧИТЬ ЗНАЧЕНИЯ НА ОСНОВЕ ВЫБОРА ДАТЫ _dasResult =_myDas.getDas (_DSKey, " ", CDate (dtFrom.Text) .ToString (" dd.MM.yyyy "), CDate (dtFrom.Text) .ToString (" dd.MM.yyyy ")) cmdFillData () Catch ex As Exception MessageBox.Show (ex .Message.ToString) End Try End Sub Private Sub cmdGetSensorValues () Try '' ПОЛУЧИТЬ СЕНСОРНЫЕ ЗНАЧЕНИЯ С УСТРОЙСТВА Если cbxDemo.Checked =False, Затем Dim client As New WebClient () client.Headers.Add ("user-agent", "Arduino /4.0 (совместимый; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;) ") Тусклые данные как Stream =client.OpenRead (" http:// "&_deviceIP &" /index.html ") Dim reader As Новый StreamReader (данные) Dim s As String =reader.ReadToEnd () s =s.Replace ("" "", "") .Replace ("}", "") .Replace ("{", "") .Replace ("", "") .Replace ("variables:", "") Dim sItems () As String =s.Split (",") intVolumContainer =cmdGetVal (sItems (0)) intUmidSol =cmdGetVal (sItems (1)) intUmidSera =cmdGetVal (sItems (2)) intTempSera =cmdGetVal (sItems 4)) intTempSol =cmdGetVal (sItems (5)) data.Close () reader.Close () Иначе intVolumContainer =_rnd (60) intUmidSol =_rnd (80) intUmidSera =_rnd (20) intTempSera =_rnd (45) intTempA (57) intTempSol =_rnd (66) Конец Если ggVolum.Value =intVolumContainer rgVolum.Value =intVolumContainer ggUmidSol.Value =intUmidSol ggUmidSera.Value =intUmidSera ggTempSera.Value =intTempSera ggTempOut.Value =intTempAfara ggTempSol.Value =intTempSol улов ех как исключение '{"variables" {"Volum_container":0, "Umiditate_sol":0.00, "Umiditate_aer":36.60, "Temp_in":26.50, "Temp_out":0.00, "Temp_sol":0.00, "Umidex_in":26.37}, " id ":" 1 "," name ":" FiliSera "," hardware ":" arduino "," connected ":true} Конец Попытки E nd Sub Private Function cmdGetVal (ByVal _sItem As String) Попробуйте 'SPLIT STRING AND GET VALUES BACK Dim _s () As String =_sItem.Split (":") Return _s (1) Catch ex As Exception End Try End Function Private Sub cmdAddData () Попробуйте 'ОТПРАВИТЬ ДАННЫЕ В ОБЛАЧНОЕ ХРАНИЛИЩЕ ДАННЫХ Dim _strFiliseraDataSend As String =intVolumContainer &"|" &intUmidSol &"|" &intUmidSera &"|" &intTempAfara &"|" &intTempSera &"|" &intTempSera &"|" &intTemp | "&intUmidex &" | "&Dim _dasResult As String =_myDas.sendDas (_strFiliseraDataSend, _DSKey, _AKey) Catch ex As Exception cmdLogMe (" ERROR ... "&ex.Message.ToString ()," error ") Конец попытки End Sub Private Sub cmdFillData () Попробуйте 'ЗАПОЛНИТЬ ИНТЕРФЕЙС БУДЕТ ВСЕ ВИДЫ ДАННЫХ Dim dataSet As DataSet =JsonConvert.DeserializeObject (Of DataSet) (_ dasResult) Dim dataTable As DataTable =dataSet.Tables (0)' GRIDVIEW DataGridView1.DetataSource. Таблицы (0) DataGridView1.AutoGenerateColumns =True 'ДИАГРАММЫ ChartTemp.DataSource =dataTable ChartTemp.Series.Clear () chartUmid.DataSource =dataTable ch artUmid.Series.Clear () chartVolum.DataSource =dataTable chartVolum.Series.Clear () Dim i As Integer =0 Dim j As Integer =0 Dim k As Integer =0 Для каждой таблицы в dataSet.Tables For Each row In table. Строки для каждого столбца в таблице. Столбцы Dim colName As String =col.ColumnName.ToString Если colName <> "id" И colName <> "AIDate", тогда попробуйте Dim serieName As String =RTrim (colName) 'VOLUME If colName.Contains ( "Nivel") Затем chartVolum.Series.Add (serieName) chartVolum.Series (serieName) .LabelFormat ="N1" chartVolum.Series (i) .ChartType =SeriesChartType.Line chartVolum.Series (i) .BorderWidth =2 chartVolum.Series (i) .Color =Color.Aqua chartVolum.Series (i) .BorderDashStyle =ChartDashStyle.Solid chartVolum.Series (serieName) .YValueMembers =RTrim (colName) chartVolum.Series (serieName) .XValueMember ="AIDate" i End If 'HUMIDITY If colName.Contains ("Umid") Then chartUmid.Series.Add (serieName) chartUmid.Series (serieName) .LabelFormat ="N1" chartUmid.Series (j) .ChartType =SeriesChartType.Line chartU mid.Series (j) .BorderWidth =2 chartUmid.Series (j) .BorderDashStyle =ChartDashStyle.Solid chartUmid.Series (serieName) .YValueMembers =RTrim (colName) chartUmid.Series (serieName) .XValueMember =+ ="AIDate" 1 End If 'TEMP If colName.Contains ("Temp") Then ChartTemp.Series.Add (serieName) ChartTemp.Series (serieName) .LabelFormat ="N1" ChartTemp.Series (k) .ChartType =SeriesChartType.Line ChartTemp.Series (k) .BorderWidth =2 ChartTemp.Series (k) .BorderDashStyle =ChartDashStyle.Solid ChartTemp.Series (serieName) .YValueMembers =RTrim (colName) ChartTemp.Series (serieName) .XValueMember ="AIDate" Catch ex As Exception End Try End If Next Exit For Next Next 'ЗАПОЛНИТЬ ДИАГРАММЫ ChartTemp.DataBind () ChartTemp.Visible =True chartUmid.DataBind () chartUmid.Visible =True chartVolum.DataBind () chartVolum.Visible =True Catch ex As Исключение cmdLogMe ("ERROR ..." &ex.Message.ToString (), "error") End Try End Sub Private Sub cmdTriggers () 'SET TRIGGERS AND STORE LOG Select Case intVolumContain er Case> 80 cmdLogMe («ВЫСОКИЙ ВЫСОКИЙ - объем контейнера - остановка воды», «0») Case> 70 'cmdLogMe («HIGH - объем контейнера - вода начнется», «1») Case <20' cmdLogMe («LOW - Низкий объем контейнера - вода прекратится »,« 1 ») Case <10 cmdLogMe (« LOW LOW - объем контейнера высокий высокий высокий - начальная вода »,« 0 ») End Select Select Case intTempSera Case> 38 cmdLogMe (« HIGH HIGH » - Температура в теплице - открытые окна »,« 0 ») Case> 30 'cmdLogMe (« ВЫСОКАЯ - Температура в теплице - подготовьте окна »,« 1 ») Case <10' cmdLogMe (« LOW - Температура в теплице - подготовить окна »,« 1 ») Case <10 cmdLogMe (« LOW LOW - объем контейнера высокий высокий высокий - начальная вода »,« 0 ») End Select End Sub Public Function _rnd (ByVal n As Integer) As Integer 'инициализировать случайное число генератор Dim r как новый случайный (System.DateTime.Now.Millisecond) Return r.Next (1, n) End Function Private Sub cmdLogMe (message As String, _type As String) Try Dim _strLog As String ="adeewdf4-4aa34-14ass24 -8436-aea1 "'LOG DASDATA DS KEY lstEv enimente.Items.Add ((System.DateTime.Now &"" &message) + Constants.vbNewLine) 'СОХРАНИТЬ ЖУРНАЛЫ ДАННЫХ ДАННЫХ _myDas.sendDas (message &"|" &_type, _strLog, _AKey) Catch ex As Exception cmdLogMe ( «ERROR ...» &ex.Message.ToString (), «error») End Try End SubEnd Class
Исходные файлы - Filisera
https://github.com/dasdata/DasFiliseraСхема
PDF-файл с подключениями - датчики и релеПроизводственный процесс
- Регистратор температуры Raspberry Pi
- Измерение температуры с помощью однопроводного датчика DS18B20 и Raspberry Pi
- Библиотека Python датчика температуры TMP006 с использованием Raspberry pi,
- Датчик температуры Python и Raspberry Pi
- 1-проводный датчик температуры DS1820 на Raspberry Pi (напрямую через GPIO)
- Цифровой датчик термометра Raspberry Pi 1-Wire (DS18B20)
- Датчик температуры и освещенности Raspberry Pi
- Датчик температуры Raspberry Pi
- Датчик температуры подшипника | детектор
- Лабораторный датчик расхода и температуры