제조공정
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
여보세요. 이 프로젝트는 훨씬 더 큰 프로젝트의 일부입니다. 이 부분에 대해 많은 문제가 있었고 결국 해결책을 찾았기 때문에 커뮤니티와 공유하기로 결정했으며 프로젝트에 도움이 되기를 바랍니다.
프로젝트 설명
Arduino에 SMS를 보내고 집에서 온도를 확인하십시오.
소프트웨어
SIM800L 모듈의 경우 "Seeeduino_GPRS-master" 라이브러리를 사용했습니다. MEGA에서 작동하려면 "sim800.h" 라이브러리에서 다음 줄을 변경해야 했습니다.
#define SIM800_TX_PIN 8#define SIM800_RX_PIN 7
...TX_PIN 10 및 RX_PIN 11로. 라이브러리를 "SoftwareSerial"에서 Mega Serial 포트 중 하나로, 즉 Serial3 중 하나로 변경하는 것이 너무 어려워서 쉬운 방법을 택했습니다.
문제
기본적으로 내 코드는 "DHT.h" 및 "Seeeduino_GPRS-master"의 두 라이브러리에서 예제를 잘라내어 붙여넣습니다. 내가 가진 문제는 "gprs.h" 예제가 미리 정해진 메시지를 따옴표로 묶는 방법만 보여주었다는 것입니다. 내 온도 센서에서 가변 float 값을 보내는 방법을 알아낼 수 없었습니다. 이것은 내가 시도한 다른 라이브러리에서도 마찬가지였습니다:"GPRS_SIM900-master" 및 "SIM800L-master" .
나는 내 문제를 해결하기 위해 웹을 검색하는 데 몇 주를 보냈지만 아무 것도 찾지 못했습니다. 나는 같은 주제에 대한 포럼 게시물을 찾았고, 답변을 얻지 못한 불쌍한 영혼들을 위해 이 게시물을 찾으시기 바랍니다.
답변
float 값을 String으로 변환한 다음 String을 Char Array로 변환 - 간단합니다!
코드 조각 <사전><코드> MyString =String(temp,0); // float를 StringMyString으로 변환 =(MyString + " Degrees C");// 문자열을 char로 변환은 여기에서 시작합니다.// Length(null 종결자에 대해 하나의 추가 문자 포함)int str_len =MyString.length() + 1; // 문자 배열(버퍼) 준비 char char_array[str_len];// MyString.toCharArray(char_array, str_len);//문자열을 char로 변환합니다. heregprs.sendSMS("04+++++++ +",char_array); //전화번호와 텍스트를 정의합니다.
배선
SIM 모듈에 전원을 공급하기 위해 ULTRAFIRE 18650 배터리를 사용했습니다. 나중에 회로에 전압 조정기를 추가하겠습니다. 이 튜토리얼을 참조하십시오.
참고 자료
<울>
라이브러리 <울>
// 다양한 DHT 습도/온도 센서에 대한 테스트 스케치 예제// 작성:ladyada, public domain#include "DHT.h#define DHTPIN 2 // 어떤 디지털 핀에 연결했는지#define DHTTYPE DHT22 // DHT 22(AM2302), AM2321//#define DHTTYPE DHT21 // DHT 21(AM2301)// 센서의 핀 1(왼쪽)을 연결합니다. +5V// 센서의 핀 2를 DHTPIN에 연결합니다.// 센서의 핀 4(오른쪽)를 GROUND에 연결합니다.// 10K 저항을 핀 2(데이터)에서 핀 1(전원)에 연결합니다. sensor // DHT를 초기화합니다. sensor.DHT dht(DHTPIN, DHTTYPE);#include#include #define TIMEOUT 5000GPRS gprs;bool ITemp =false;float temp;String MyString;#define LED_PIN 13bool ledStatus;//SIM800char currentLine[500] ="";int currentLineIndex =0;//메시지 알림이 발견되고 직렬 출력의 다음//라인이 다음과 같은 경우 true로 설정되는 부울 실제 SMS 메시지 contentbool nextLineIsMessage =false;void 응답()// 여기에서 기능 시작{ Serial.println("GPRS - SMS 테스트 보내기 ..."); gprs.preInit(); 지연(1000); 동안(0 !=gprs.init()) { 지연(1000); Serial.print("초기화 오류\r\n"); } Serial.println("초기화 성공, SMS 메시지 보내기 시작..."); if (ITemp ==true){ float t =dht.readTemperature(); 온도 =t; ITemp =거짓; } MyString =문자열(임시,0); // float를 String으로 변환 MyString =(MyString + " Degrees C"); // 문자열을 char로 변환은 여기에서 시작합니다. // 길이(널 종결자에 대해 하나의 추가 문자 포함) int str_len =MyString.length() + 1; // 문자 배열(버퍼) 준비 char char_array[str_len]; // MyString.toCharArray(char_array, str_len)에 복사합니다. // 여기서 문자열을 char로 변환합니다. gprs.sendSMS("04++++++++",char_array); //전화번호 및 텍스트 정의 // 여기서 함수 종료}void setup() { Serial.begin(9600); Serial.println("DHTxx 테스트!"); dht.begin(); gprs.preInit(); 지연(1000); 동안(0 !=gprs.init()) { 지연(1000); Serial.print("초기화 오류\r\n"); //나중에 Nextion HMI 홈 페이지에 SIM 오류 표시 } //SMS 모드를 ASCII로 설정 if(0 !=gprs.sendCmdAndWaitForResp("AT+CMGF=1\r\n", "OK", TIMEOUT)) { ERROR( "오류:CNMI"); 반품; } //새 SMS 메시지 표시 수신 시작 if(0 !=gprs.sendCmdAndWaitForResp("AT+CNMI=1,2,0,0,0\r\n", "OK", TIMEOUT)) { ERROR(" 오류:CNMI"); 반품; } Serial.println("Init success");}void loop() { // 측정 사이에 몇 초를 기다립니다. 지연(2000); // 온도 또는 습도를 읽는 데 약 250밀리초가 걸립니다! // 센서 판독값은 최대 2초가 될 수도 있습니다. '오래된'(매우 느린 센서) float h =dht.readHumidity(); // 온도를 섭씨로 읽습니다(기본값) float t =dht.readTemperature(); Serial.print("습도:"); Serial.print(h); Serial.println(" %\t"); Serial.print("온도:"); Serial.print(t); Serial.println(" *C "); SIM();}void SIM(){ //현재 상태를 LED 핀에 씁니다. digitalWrite(LED_PIN, ledStatus); Serial.println("SMS를 찾고 있습니다"); //SIM800에서 직렬 출력이 있는 경우 if(gprs.serialSIM800.available()){ char lastCharRead =gprs.serialSIM800.read(); //\r 또는 \n에 도달할 때까지 직렬 출력에서 각 문자를 읽습니다(줄 끝을 나타냄) if(lastCharRead =='\r' || lastCharRead =='\n'){ String lastLine =String(currentLine); //마지막 줄이 +CMT이면 새 SMS 메시지 표시가 수신되었습니다. //따라서 다음 줄은 메시지 내용입니다. if(lastLine.startsWith("+CMT:")){ Serial.println(lastLine); nextLineIsMessage =참; } else if (lastLine.length()> 0) { if(nextLineIsMessage) { Serial.println(lastLine); //메시지 내용을 읽고 SMS 내용에 따라 상태를 설정 if(lastLine.indexOf("InTemp")>=0){ Serial.println("InTemp"); ITemp =참; 회신하다 (); // ledStatus =1; // Serial.println("조명 켜기"); // } else if(lastLine.indexOf("LED 꺼짐")>=0) { // ledStatus =0; // Serial.println("조명 끄기"); } nextLineIsMessage =거짓; } } //읽을 다음 줄에 대한 문자 배열 지우기 for( int i =0; i 섹션> 회로도
제조공정
구성품 및 소모품 Arduino Mega 2560 × 1 Mega 2560용 3.2인치 tft 모듈 × 1 온도 프로브 × 1 Adafruit 습도 및 온도 센서 × 1 mh-z19 CO2 센서 × 1 RTC 모듈 × 1 조정 가능한 전압 조정기 × 1 항공 플러그 L89 G12 × 1 앱 및 온라인 서비스 Arduino IDE 이 프로젝트 정보
이 Arduino 자습서에서는 Arduino 보드와 처리 개발 환경을 사용하여 이 멋진 레이더를 만드는 방법을 보여 드리겠습니다. 자세한 내용은 다음 동영상을 보거나 아래에 작성된 튜토리얼을 참조하세요. 개요 이 Arduino 프로젝트에 필요한 것은 물체를 감지하기 위한 초음파 센서, 센서를 회전시키기 위한 작은 취미 생활자 서보 모터 및 이를 제어하기 위한 Arduino 보드뿐입니다. 다음 동영상을 보거나 아래에 작성된 튜토리얼을 읽을 수 있습니다.[/column] 이 Arduino 프로젝트에 필요한 구성요소 다음 사이트에서