산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

DasFilisera 그린 하우스

구성품 및 소모품

DHT22 온도 센서
× 1
DS18B20
× 1
토양 온도 및 습도 센서 FS200-SHT25
× 1
4채널 릴레이 모듈
× 1
2채널 릴레이 모듈
× 1
초음파 센서 - HC-SR04(일반)
× 1
Arduino MKR1000
× 1

앱 및 온라인 서비스

DasData
Microsoft Visual Studio 2015

이 프로젝트 정보

환경 조건을 더 잘 인식하여 식물과 채소를 재배하십시오. MKR1000을 사용하여 간단히

식물 성장을 위한 요건

식물의 성장은 온도, 습도, 빛 및 기타 미네랄 영양소 또는 산소와 같은 몇 가지 이상적인 환경 조건에 따라 달라집니다.

식물에 적절한 양의 물을 제공하거나 온실의 정상 온도를 유지하는 것은 까다로운 과정일 수 있지만 훨씬 쉽게 할 수 있다면 그렇지 않습니다.

하드웨어 개요

온도/습도

TH1 - 외부 온도 값은 방수 DS18B20 센서에서 제공됩니다 - D1 핀 연결

TH2 - 내부 온도 / 흠. DHT22 - 핀 D0

에서 찾을 수 있습니다.

TH3 - FS200/SHT25 - 토양 조건에서 도입됩니다. SCL 및 SDA 핀 12/11

에 대한 연결

물 레버

W1 - 수위를 얻기 위해 A0에서 HC - SR04 연결 - 에코 및 A1에서 트리거와 같은 초음파 센서를 사용합니다. 이 값을 기반으로 R1 - 4채널 릴레이를 사용하여 밸브를 제어할 수 있습니다.

기온/산소

A1 - R2 릴레이를 사용하여 창을 열 때 명령할 수 있는 온도/습도 값을 기반으로 합니다. 기후에 따라 원하는 대로 조정해야 합니다.

릴레이 R1 / R2

Windows 열기 또는 펌프 시작과 같은 일부 명령을 설정하려면 릴레이에 명령을 보낼 수 있습니다... R1은 디지털 핀 7,8,9,10 및 R2 5,6에 연결되어 있습니다.

MKR1000 - 휴식

이제 모든 것을 함께 연결했으므로 json 형식 문자열을 사용하여 MKR1000 장치에 웹 인터페이스를 제공할 aRest 라이브러리를 사용하여 일부 데이터를 얻고 이해해야 합니다. 아래에 제공된 라이브러리, .ino 파일을 사용하고 그에 따라 Wi-Fi 라우터 연결을 변경하십시오.

데이터 및 인터페이스

장치에 인터페이스가 있는 한 이 데이터를 사용하고 로컬 네트워크에서 볼 수도 있습니다.

우리는 Visual Studio 2015 및 .net을 사용하여 온실의 실제 상태를 시각화하는 데 도움이 되는 Windows 애플리케이션을 구축할 뿐만 아니라 통합하려는 약간의 일일 기록 또는 모든 종류의 로그도 보여줍니다.

클라우드에 저장하기 위해 우리는 단순히 DasData 온실 구성을 사용하거나 고유한 데이터 채널을 만들 수 있습니다.

다음 단계는 애플리케이션 폴더에서 Settings.txt에 제공된 DsKey 및 AKey를 수정하는 것입니다. 모든 것이 작동하면 이미 온라인에 일부 데이터가 표시되어야 합니다.

더 많은 향후 업데이트를 위해 DasData의 hackster 채널을 팔로우하십시오.

온실 자동화

온실 구성과 크기에 따라 어떤 밸브 또는 모터가 더 많은 동작을 생성할지 결정해야 합니다. 이 모든 것은 릴레이에서 제어할 수 있습니다.

<섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">

코드

<울>
  • Filisera_Arduino
  • 라이브러리.zip
  • 필리세라 - vb.zip
  • 필리세라 - VS
  • Filisera_Arduino C/C++
    Arduino/Genuino MKR1000 보드에 대해 REST 라이브러리를 사용하는 DASFilisera.
    /* Arduino/Genuino MKR1000 보드에 대해 REST 라이브러리를 사용하는 DASFilisera. aREST - GPL 라이선스에 따라 Marco Schwartz가 2016년에 작성했습니다.*/// 필수 라이브러리 가져오기#include #include #include #include "DHT.h#include #include #include #include // ********************** ***// ** Senzori Temperatura **// *************************#define DHTPIN 0 // 내부 습도/온도/열 index#define DHTTYPE DHT22 // DHT 22(AM2302), AM2321#define ONE_WIRE_BUS 1OneWire oneWire(ONE_WIRE_BUS);달라스 온도 센서(&oneWire);float umidSol =0; // 토양 습도float umidAer =0; // 공기 습도float tempIn =0; // 온도 상승 tempOut =0; // 온도 아웃플로트 tempSol =0; // 컨테이너 volumefloat umidexIn =0; // Feel like temp//VOLUM #define echoPin A0 // 에코 핀 A0#define trigPin A1 // 트리거 핀 A1long duration; // 거리를 계산하는 기간int HR_dist =0; // 계산된 distanceint 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;// Create aREST instanceaREST rest =aREST();// WiFi parameterschar ssid[] ="WIFI_AP";char password[] ="WIFI_PASSW";// 들어오는 TCP 연결을 수신할 포트# LISTEN_PORT 80 정의 // WiFiServer 서버 인스턴스 생성(LISTEN_PORT);//INITIALIZARE SENZORI DHT dht(DHTPIN, DHTTYPE);// RELEE RELEEEint aVentil, aLateral;int inReleu1Ventil =6;int inReleu73Vintil inReleu2Ventil =;int inReleu4Ventil =9;int inReleu1Lateral =10;int inReleu2Lateral =11;// API에 노출될 함수 선언int ledControl(String command);void setup(void){ // Serial 시작 Serial.begin(115200); // 변수를 초기화하고 REST API에 노출 // rest.variable("temperature",&temperature);// rest.variable("humidity",&humidity); // 노출될 함수 rest.function("led",ledControl); // 장치에 이름과 ID를 부여 rest.set_id("1"); rest.set_name("mkr1000"); // WiFi에 연결 while (status !=WL_CONNECTED) { Serial.print("Attempting to connect to SSID:"); Serial.println(ssid); 상태 =WiFi.begin(ssid, 비밀번호); // 10초간 연결 대기:delay(10000); } Serial.println("와이파이 연결됨"); // 서버 시작 server.begin(); Serial.println("서버 시작"); // IP 주소를 출력합니다. IPAddress ip =WiFi.localIP(); Serial.print("IP 주소:"); 직렬.println(ip); // DHT 설정 - DHT 내부 dht(DHTPIN, DHTTYPE);// sensor.begin(); // 외부 포르노 센서 온도 DS-16B20 pinMode(trigPin, OUTPUT); 핀모드(에코핀, 입력); // 변수를 초기화하고 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 ); // sensor.requestTemperatures(); // 온도 출력 }void loop() { getmyDistance(); // getSoilVals(); getInsideVals();// getOutSideVals(); // REST 호출 처리 WiFiClient client =server.available(); if (! 클라이언트) { 반환; } while(!client.available()){ 지연(1); } rest.handle(클라이언트);} 무효 getmyDistance() { digitalWrite(trigPin,LOW); 지연 마이크로초(2); digitalWrite(trigPin,HIGH); 지연마이크로초(10); 디지털 쓰기(trigPin,LOW); 지속 시간 =pulseIn(echoPin,HIGH); //거리 계산 HR_dist =duration/58.2;// sqrLevel =비어 있음 - HR_dist; if (HR_dist>=maximumRange || HR_dist <=minimumRange) { sqrLevel =0; } else { sqrLevel =비어 있음 - HR_dist; Serial.println(HR_dist); } 지연(100); }void getDistance() {digitalWrite(trigPin, LOW);delayMicroseconds(10);// 이제 Ping을 활성화하기 위해 10uS 펄스를 전송합니다. digitalWrite(trigPin, HIGH); 지연마이크로초(10); digitalWrite(trigPin, LOW);// 마지막으로, 들어오는 펄스의 길이를 측정합니다. pulseduration =pulseIn(echoPin, HIGH);// 펄스 길이를 halfpulseduration으로 나눕니다. =pulseduration/2;// centimetres.nivelRamasCm =int( pulseduration/29);nivelCm =비어 있음 - nivelRamasCm;nivelVol =map(nivelRamasCm, full, empty, 100, 0);// 센티미터 단위의 Tipareste nivelul if (nivelCm>=-5 &&nivelCm <=135) { double a =nivelCm / 100 * 니벨볼; 정수 제곱 레벨 =240 - nivelCm; int sqrInvertLevel =120 + nivelRamasCm; if (nivelCm>65 &&nivelCm <=85){ } if (nivelCm>85 &&nivelCm <=100){ } } }long microsecondsToCentimeters (long microseconds) { // 음속은 340m/s 또는 29마이크로초/초입니다. cm // 핑은 앞뒤로 이동하므로 거리는 이동 거리의 절반입니다. return microseconds / 29 / 2;}void getInsideVals() { float h =dht.readHumidity(); // 온도를 섭씨로 읽습니다(기본값) float t =dht.readTemperature(); // 온도를 화씨로 읽습니다(isFahrenheit =true)// float f =dht.readTemperature(true); umidAer =h; 임시 직원 =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; } 무효 getOutSideVals() { tempOut =센서.getTempCByIndex(0); Serial.println("온도 초과:"); Serial.print(tempOut); } 무효 getSoilVals() { umidSol =SHT2x.GetHumidity(); tempSol =SHT2x.GetTemperature(); Serial.println("토양습도(%RH):"); Serial.print(umidSol); Serial.print(" 온도 토양(C):"); Serial.print(tempSol); } // sensor.requestTemperatures(); // 온도 출력 // APIint에서 액세스할 수 있는 사용자 정의 함수 ledControl(String command) { // 명령에서 상태 가져오기 int state =command.toInt(); 디지털 쓰기(6, 상태); 반환 1;} 
    libraries.zipC/C++
    Filisera에서 사용되는 라이브러리
    미리보기 없음(다운로드만 가능).
    Filisera - vb.zipVBScript
    .net Visual Studio Project
    미리보기 없음(다운로드 전용).
    Filisera - VS VBScript
    arduino에서 데이터를 읽고 interface
    Imports System.GlobalizationImports System.IOImports System.NetImports System.ThreadingImports System.Windows.Forms.DataVisualization.ChartingImports Newtonsoft.JsonPublic Class Form1 Private _deviceIP As String =""' DEVICE IP 개인용 intVolumContainer, intUmidSol, intUmidSera, intTempAfara, intTempSera, intTempSol, intUmidex As String ' VARIABILES Private strR1, strR2 As String 'RELAYS Public Count As CountDown'_Private 'COUNTDOWN " 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 SECONDS UPDATE AddHandler Count.Tick, AddressOf Count_Tick AddHandler Count.TimesOut, AddressOf Times_up 'READ SETTINGS FROM .txt FILE Dim path As String =Directory.GetCurrentDirectory( ) Dim FILE_NAME As String =path &"\Settings.txt" Dim myText As String ="" ' If System.IO.File.Exists(FILE_NAME) =True then Dim objReader As New System.IO.StreamReader(FILE_NAME, System. Text.Encoding.Default) 동안 objReader.Peek() <> -1 myText &=objReader.ReadLine() 루프 Dim _settingItems() As String =myText.Split(" ") _deviceIP =_settingItems(0) 'IP-ul 장치 _AKey =_settingItems(1).Replace("akey:", "") _DSKey =_settingItems(2).Replace("dskey:", "") cbxEnabled.Text ="장치:" &_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 Try cmdCheckDevice() 'LOCAL SETTINGS 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() If CDate(dtFrom.Text).ToString("dd.MM.yyyy") =Date.Now().ToString("dd.MM.yyyy") then cmdStartFilisera() 종료 If 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() 시도 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) cbxEnabled를 처리합니다. CheckedChanged cmdCheckDevice() End Sub Private Sub cmdCheckDevice() 시도 cbxDemo.Checked =False이면 lblDevice.Text =("장치 활성화!") lblEvenimente.Text =Date.Now.ToString("dd.MM .yyyy HH:mm:ss") cbxEnabled.Checked =True이면 pingsender를 새 Net.NetworkInformation.Ping으로 흐리게 표시합니다. 그렇지 않으면 pingsender.Send(_deviceIP).Status =Net.NetworkInformation.IPStatus.Success 다음 lblDevice.Text =(" 로컬 네트워크에서 장치를 사용할 수 없습니다!") cbxEnabled.Checked =False btnTemperatura.Enabled =False btnVolumContainer.Enabled =False Count.Reset() Count.Pause() MessageBox.Show("장치 at " &_deviceIP &"을(를) 찾을 수 없습니다! ") Else lblDevice.Text =("장치가 연결되었습니다!") btnTemperatura.Enabled =True btnVolumContainer.Enabled =True cmdGetSensorValues() Timer1.Enabled =True cmdAddData() Count.Start() End If Else End If Else btnTemperatura.Enabled =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) btnVolumContainer.Click ' http를 처리합니다. ://192.168.0.102/digital/7/1 '버튼에서 물 닫기 Dim _ItemsR1() As String =s trR1.Split(",") If btnVolumContainer.Text.Contains("Open") then cmdRelay(_ItemsR1(0), 1) cmdRelay(_ItemsR1(1), 1) cmdRelay(_ItemsR1(2), 0) cmdRelay(_ItemsR1 (3), 0) btnVolumContainer.Text ="물 닫기" Else cmdRelay(_ItemsR1(0), 0) cmdRelay(_ItemsR1(1), 0) cmdRelay(_ItemsR1(2), 1) cmdRelay(_ItemsR1(3), 1 ) 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 'CLOSE WINDOW FROM BUTTON Dim _ItemsR2() As String =strR2.Split(",") If btnTemperatura.Text.Contains("Open") then cmdRelay(_ItemsR2(0), 1) cmdRelay(_ItemsR2(1), 1) btnTemperatura.Text ="닫기 창" Else cmdRelay(_ItemsR2(0), 0) cmdRelay(_ItemsR2(1), 0) btnTemperatura.Text ="창 열기" End If End Sub Private Sub Timer1_Tick(sender As Object, e As EventArgs) 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(compatible; MSIE 6.0; 윈도우 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) 데이터. Close() reader.Close() Catch ex As Exception End Try End Function Private Sub dtFrom_ValueChanged(sender As Object, e As EventArgs) Handles dtFrom.ValueChanged Try 'GET VALUES BASED ON DATE SELECTION _dasResult =_myDas.getDas(_DSKey, "jsond ", CDate(dtFrom.Text).ToString("dd.MM.yyyy"), CDate(dtFrom.Text).ToString("dd.MM.yyyy")) cmdFillData() 예외로 예외 MessageBox.Show(ex .Message.ToString) End Try End Sub Private Sub cmdGetSensorValues() 시도 ''GET SENSOR VALUES FROM DEVICE If cbxDemo.Checked =False then 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("http://" &_deviceIP &"/index.html") Dim 판독기 As 새로운 StreamReader(data) Dim s As String =reader.ReadToEnd() s =s.Replace("""", "").Replace("}", "").Replace("{", "").Replace(" ", "").Replace("변수:", "") Dim sItems() As String =s.Split(",") intVolumContainer =cmdGetVal(sItems(0)) intUmidSol =cmdGetVal(sItems(1)) intUmidSera =cmdGetVal(sItems(2)) intTempSera =cmdGetVal(sItems(3)) intTe 4)) intTempSol =cmdGetVal(sItems(5)) data.Close() 리더.Close() Else intVolumContainer =_rnd(60) intUmidSol =_rnd(80) intUmidSera =_rnd(20) intTempSera =_rnt (57) intTempSol =_rnd(66) End If ggVolum.Value =intVolumContainer rgVolum.Value =intVolumContainer ggUmidSol.Value =intUmidSol ggUmidSera.Value =intUmidSera ggTempSera.Value =int "{"변수" {"볼륨_컨테이너":0, "Umiditate_sol":0.00, "Umiditate_aer":36.60, "Temp_in":26.50, "Temp_out":0.00, "Temp_sol":0.00, "Temp_sol":0.00, id":"1", "name":"FiliSera", "hardware":"arduino", "connected":true} End Try E nd Sub Private Function cmdGetVal(ByVal _sItem As String) 'SPLIT STRING 및 GET VALUES BACK' 시도 Dim _s() As String =_sItem.Split(":") Return _s(1) 예외로 catch ex 예외 End Try End Function Private Sub cmdAddData () 'SEND DATA TO DASDATA CLOUD STORAGE Dim _strFiliseraDataSend As String =intVolumContainer &"|" &intUmidSol &"|" &intUmidSera &"|" &intTempAfara &"|" &intTempSera &"|" &int'e "&intUmidex &"|"&Dim _dasResult As String =_myDas.sendDas(_strFiliseraDataSend, _DSKey, _AKey) Catch ex As Exception cmdLogMe("ERROR..." &ex.Message.ToString(), "error") End Try End Sub Private Sub cmdFillData() 시도 'FILL INTERFACE WILL ALL SORT OF DATA Dim dataSet As DataSet =JsonConvert.DeserializeObject(Of DataSet)(_dasResult) Dim dataTable As DataTable =dataSet.Tables(0) 'GRIDVIEW DataGridView1.DataSource =dataSet. Tables(0) DataGridView1.AutoGenerateColumns =True 'CHARTS ChartTemp.DataSource =dataTable ChartTemp.Series.Clear() chartUmid.DataSource =dataTable 채널 artUmid.Series.Clear() chartVolum.DataSource =dataTable chartVolum.Series.Clear() Dim i As Integer =0 Dim j As Integer =0 Dim k As Integer =0 for Each table In dataSet.Tables For Each row In table. table.Columns의 각 열에 대한 행 Dim colName As String =col.ColumnName.ToString If colName <> "id" And 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 +=1 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" j +=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" k +=1 End If 예외로 예를 포착 End If Next Exit For Next 'FILL THE CHARTS ChartTemp.DataBind() ChartTemp.Visible =True chartUmid.DataBind() chartUmid.Visible =True chartVolum.DataBind() chartVolum.Visible =True Catch ex As 예외 cmdLogMe("오류..." &ex.Message.ToString(), "오류") End Try End Sub Private Sub cmdTriggers() '트리거 설정 및 로그 저장 선택 케이스 intVolumContain er Case> 80 cmdLogMe("HIGH HIGH - 용기 부피 - 물 중지", "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("HIGH - 온실의 온도 - 창문 준비", "1") Case <10 ' cmdLogMe("LOW - 온실의 온도 - 윈도우 준비", "1") 케이스 <10 cmdLogMe("LOW LOW - 컨테이너 볼륨 높음 높음 높음 - 시작 물", "0") End Select End Sub Public Function _rnd(ByVal n As Integer) As Integer '난수 초기화 Generator Dim r As New Random(System.DateTime.Now.Millisecond) Return r.Next(1, n) End Function Private Sub cmdLogMe(message As String, _type As String) Dim _strLog As String ="adeewdf4-4aa34-14ass24 -8436-aea1" '로그 DASDATA DS 키 lstEv enimente.Items.Add((System.DateTime.Now &" " &message) + Constants.vbNewLine) 'STORE LOGS TO DASDATA _myDas.sendDas(message &"|" &_type, _strLog, _AKey) 예외로 예외 cmdLogMe( "ERROR..." &ex.Message.ToString(), "error") End Try End SubEnd 클래스
    소스 파일 - Filisera
    https://github.com/dasdata/DasFilisera

    회로도

    연결이 있는 PDF 파일 - 센서 및 릴레이

    제조공정

    1. 라즈베리 파이 온도 로거
    2. 1선 DS18B20 센서와 Raspberry Pi로 온도 측정
    3. Raspberry pi를 사용하는 TMP006 온도 센서 Python 라이브러리,
    4. Python 및 Raspberry Pi 온도 센서
    5. Raspberry Pi의 1선식 온도 센서 DS1820(GPIO 직접)
    6. Raspberry Pi 1-와이어 디지털 온도계 센서(DS18B20)
    7. Raspberry Pi 온도 및 광 센서
    8. 라즈베리 파이 온도 센서
    9. 베어링 온도 센서 | 탐지기
    10. 랩온칩 유량 및 온도 센서