제조공정
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
|
이 프로젝트는 기계식 압축기의 효율성을 확인하기 위해 저장소에 내장된 공기 압력을 기록하고 싶었던 결과였습니다.
George Kontaxis의 도움
https://www.youtube.com/watch?v=AB7zgnfkEi4&feature=youtu.be
날짜와 압력을 막대 및 PSI로 표시하는 디스플레이
아두이노 압력계. 3 압력 읽기 섹션> <섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">
//2018년 8월 12일 Philip Blayney 및 Jack Davidson이 George의 코드를 사용하여 작성했습니다. //SKU237545 압력 센서용 Kontaxis //https://www.youtube.com/watch?v=AB7zgnfkEi4&feature=youtu.be #include " LiquidCrystal_PCF8574.h#include "RTClib.h" // 실시간 시계#include// sd 카드 #define LCD_ADDRESS 0x27 // LCD 특성 정의#define LCD_ROWS 2#define LCD_COLUMNS 16#define SCROLL_DELAY 150#define BACKLIGHT 255 // 개체 초기화LiquidCrystal_PCF8574 lcdI2C;RTC_DS1307 RTC; // 실시간 클록 정의 objectint n =1; 정수 값; // Arduino 아날로그 핀용 간단한 데이터 로거 #define LOG_INTERVAL 1000 // 항목 간 밀링(더 많은/더 빠른 데이터 사용을 위해 감소) // 기록된 데이터를 디스크에 영구적으로 쓰기 전에 몇 밀리초인지 // LOG_INTERVAL로 설정 매번 쓰기(가장 안전함) // 10*LOG_INTERVAL로 설정하여 10개의 데이터 읽기마다 모든 데이터를 쓰십시오. 전원이 끊긴 경우 // 마지막 10개의 읽기까지 잃을 수 있지만 전력을 덜 사용하고 훨씬 빠릅니다!#define SYNC_INTERVAL 10000 // flush() 호출 사이에 밀링 - 카드에 데이터 쓰기 600000 =10 minutesuint32_t syncTime =0; // 마지막 sync()의 시간 const int chipSelect =10; // 데이터 로깅 실드의 경우 SD cs 라인에 디지털 핀 10을 사용합니다. File logfile;void error(char *str){ Serial.print(F("error:")); Serial.println(str);} 무효 설정(무효){ Serial.begin(9600); // 직렬 포트 시작 Serial.println(F("압력 판독 SKU237545 SENSOR")); //F =동적 메모리를 저장하는 매크로 함수 lcdI2C.begin(LCD_COLUMNS, LCD_ROWS, LCD_ADDRESS, BACKLIGHT); lcdI2C.print(F("SKU237545 센서" )); lcdI2C.setCursor(0,1); lcdI2C.print(F(" 막대와 psi " )); 지연(2000); // SD 카드 초기화 Serial.print(F("SD 카드 초기화 중...")); // 사용하지 않더라도 기본 칩 선택 핀이 // 출력으로 설정되어 있는지 확인합니다. pinMode(10, OUTPUT); if (!SD.begin(chipSelect)) { // 카드가 존재하고 초기화 가능한지 확인:error("Card failed, or not present"); } Serial.println(F("카드가 초기화되었습니다.")); char 파일 이름[] ="LOGGER00.CSV"; // 새 파일 생성 for (uint8_t i =0; i <100; i++) { filename[6] =i/10 + '0'; 파일명[7] =i%10 + '0'; if (! SD.exists(filename)) { // 새 파일이 존재하지 않는 경우에만 엽니다. logfile =SD.open(filename, FILE_WRITE); 부서지다; // 루프를 떠나십시오! } } if (! logfile) { error("파일을 만들 수 없습니다"); } lcdI2C.clear(); lcdI2C.setCursor(0,0); lcdI2C.print(F("파일 번호 " )); lcdI2C.print(파일명); Serial.print(F("로그인 대상:")); Serial.println(파일명); // RTC에 연결 if (!RTC.begin()) { logfile.println("RTC 실패"); #if ECHO_TO_SERIAL Serial.println(F("RTC 실패")); #endif //ECHO_TO_SERIAL } logfile.println("날짜/시간, 압력, 막대, 읽기, psi, 읽기 "); 지연(5000); lcdI2C.clear(); // LCD 화면을 지웁니다.} void loop(void){int sensorVal=analogRead(A1);//Serial.print("센서 값:");//Serial.print(sensorVal);부동 전압 =(sensorVal*5.0 )/1024.0;// Serial.print("볼트:");// Serial.print(전압); float pressure_pascal =(3.0*((float) 전압-0.475))*1000000.0; // 여기서 보정 float pressure_bar =pressure_pascal/10e5; float pressure_psi =pressure_bar*14.5038; Serial.print("압력 ="); Serial.print(압력 막대); Serial.print(" 막대 "); Serial.print("psi"); Serial.print(압력_psi); 직렬.println(); 지금 날짜 시간; 지금 =RTC.now(); // 지연 시간 가져오기((LOG_INTERVAL -1) - (millis() % LOG_INTERVAL)); // SD 카드 판독 사이에 원하는 시간만큼 지연 int H =now.hour(); // 지금 시간을 가져와 h라는 정수에 저장합니다. int M =now.minute(); // 지금 분을 가져와 m이라는 정수에 저장합니다. int S =now.second(); // 지금 초를 가져와 s라는 정수에 저장합니다. logfile.print(now.year(), DEC); logfile.print("/"); logfile.print(now.month(), DEC); logfile.print("/"); logfile.print(now.day(), DEC); logfile.print(" "); if (H<10){ // 필요하다면 위와 같이 0을 추가합니다. logfile.print(0); } logfile.print(지금.시간(), DEC); logfile.print(":"); if (M<10){ // 필요하다면 위와 같이 0을 추가 logfile.print(0); } logfile.print(지금.분(), DEC); logfile.print(":"); if (S<10){ // 필요하다면 위와 같이 0을 추가 logfile.print(0); } logfile.print(now.second(), DEC); // logfile.print('"'); Serial.println(); Serial.print(now.year(), DEC); Serial.print("/"); Serial.print(now.month(), DEC ); Serial.print("/"); Serial.print(now.day(), DEC); Serial.print(" "); if (H<10){ // 위와 같이 필요한 경우 0을 추가합니다. Serial.print(0); } Serial.print(now.hour(), DEC); Serial.print(":"); if (M<10){ // 필요에 따라 위의 Serial과 같이 0을 추가합니다. print(0); } Serial.print(now.minute(), DEC); Serial.print(F(":")); if (S<10){ // 필요하면 위와 같이 0을 추가 Serial .print(0); } Serial.print(now.second(), DEC); Serial.println(); lcdI2C.setCursor(0,0); lcdI2C.print(pressure_bar); // 처음에 문자열을 LCD에 인쇄 라인 lcdI2C.print("bar"); lcdI2C.print(pressure_psi); lcdI2C.print("psi"); lcdI2C.setCursor(0,1); //lcdI2C.print(now.year(), DEC); // lcd에 연도를 표시하기에 충분한 문자 공간이 없습니다. // lcdI2C.print("/"); lcdI2C.print(now.day(), DEC); lcdI2C.print("/"); lcdI2C.print(now .month(), DEC); lcdI2C.print(" "); if (H<10){ // 필요한 경우 0을 추가합니다. 위와 같이 lcdI2C.print(0); } lcdI2C.print(지금.시간(), DEC); lcdI2C.print(":"); if (M<10){ // 필요하다면 위와 같이 0을 추가합니다. lcdI2C.print(0); } lcdI2C.print(지금.분(), DEC); lcdI2C.print(":"); if (S<10){ // 필요하다면 위와 같이 0을 추가합니다. lcdI2C.print(0); } lcdI2C.print(now.second(), DEC); logfile.print(", "); logfile.print(" 압력 ="); logfile.print(","); logfile.print(압력 막대); logfile.print(","); logfile.print("바 "); logfile.print(","); logfile.print(압력_psi); logfile.print(","); logfile.print("psi"); logfile.println();if((millis() - syncTime) 실시간 시계 설정C/C++
//tronixstuff에 의한 코드#include "Wire.h#define DS3231_I2C_ADDRESS 0x68// 일반 십진수를 이진 코드 십진수로 변환합니다. decToBcd(byte val){ return( (val/10*16) + (val%10) );}// 이진 코드 십진수를 일반 십진수로 변환byte bcdToDec(byte val){ return( (val/16*10) + (val%16) );}void setup(){ Wire.begin(); Serial.begin(9600); // 여기에 초기 시간 설정:// DS3231 초, 분, 시, 일, 날짜, 월, 연도 setDS3231time(00,43,14,3,14,8,18); // 여기에 필요한 시간 설정}void setDS3231time(바이트 초, 바이트 분, 바이트 시간, 바이트 dayOfWeek, bytedayOfMonth, 바이트 월, 바이트 연도){ // 시간 및 날짜 데이터를 DS3231로 설정 Wire.beginTransmission(DS3231_I2C_ADDRESS); Wire.write(0); // 다음 입력을 초에서 시작하도록 설정 레지스터 Wire.write(decToBcd(second)); // 초 설정 Wire.write(decToBcd(분)); // 분 설정 Wire.write(decToBcd(hour)); // 시간 설정 Wire.write(decToBcd(dayOfWeek)); // 요일 설정 (1=일요일, 7=토요일) Wire.write(decToBcd(dayOfMonth)); // 날짜 설정(1 ~ 31) Wire.write(decToBcd(month)); // 월 설정 Wire.write(decToBcd(year)); // 연도 설정(0~99) Wire.endTransmission();}void readDS3231time(byte *second,byte *분,byte *hour,byte *dayOfWeek,byte *dayOfMonth,byte *month,byte *year){ Wire. 시작전송(DS3231_I2C_ADDRESS); Wire.write(0); // DS3231 레지스터 포인터를 00h로 설정 Wire.endTransmission(); Wire.requestFrom(DS3231_I2C_ADDRESS, 7); // 레지스터 00h에서 시작하여 DS3231에서 7바이트의 데이터 요청 *second =bcdToDec(Wire.read() &0x7f); *분 =bcdToDec(Wire.read()); *시간 =bcdToDec(Wire.read() &0x3f); *dayOfWeek =bcdToDec(Wire.read()); *dayOfMonth =bcdToDec(Wire.read()); *월 =bcdToDec(Wire.read()); *년 =bcdToDec(Wire.read());} 무효 displayTime(){ 바이트 초, 분, 시, dayOfWeek, dayOfMonth, 월, 년; // DS3231에서 데이터 검색 readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); // 시리얼 모니터로 보냅니다. Serial.print(hour, DEC); // 표시될 때 바이트 변수를 10진수로 변환합니다. Serial.print(":"); if (분<10) { Serial.print("0"); } Serial.print(분, 12월); Serial.print(":"); if (second<10) { Serial.print("0"); } Serial.print(초, DEC); Serial.print(" "); Serial.print(dayOfMonth, DEC); Serial.print("/"); Serial.print(월, DEC); Serial.print("/"); Serial.print(연도, DEC); Serial.print(" 요일:"); switch(dayOfWeek){ 사례 1:Serial.println("일요일"); 부서지다; 사례 2:Serial.println("월요일"); 부서지다; 사례 3:Serial.println("화요일"); 부서지다; 사례 4:Serial.println("수요일"); 부서지다; 사례 5:Serial.println("목요일"); 부서지다; 사례 6:Serial.println("금요일"); 부서지다; 사례 7:Serial.println("토요일"); 부서지다; }}무효 루프(){ displayTime(); // 직렬 모니터에 실시간 시계 데이터 표시, delay(1000); // 매초}LiquidCrystal_PCF8574.h
스케치 아래에 필요한 라이브러리에 라이브러리를 포함하고 .zip을 추가한 다음 zip을 다운로드한 위치를 선택합니다.https://github.com/mathertel/LiquidCrystal_PCF8574RTClib.h
라이브러리, 실시간 시계, 먼저 zip의 압축을 풉니다. 그런 다음 나머지 zip 파일을 라이브러리에 추가합니다.https://github.com/mechasolution/RTClib.h
제조공정
구성품 및 소모품 Arduino Nano R3 × 1 PCBWay 맞춤형 PCB × 1 Espressif ESP8266 ESP-01 × 1 2채널 릴레이 모듈 × 1 LED(일반) × 2 브레드보드(일반) × 1 점퍼 와이어(일반) × 1 저항 1k 옴 × 2 저항 2.21k 옴 × 1 필요한 도구 및 기계 납땜 인두(일반)
이 Arduino Tutorial에서는 Arduino 보드와 함께 SD 카드 모듈을 사용하는 방법을 배웁니다. 또한 DS3231 실시간 클록 모듈과 함께 온도 센서의 데이터를 SD 카드에 저장하고 Excel로 가져와 차트를 만드는 데이터 로깅 예제를 만들 것입니다. 다음 비디오를 보거나 아래에 작성된 튜토리얼을 읽을 수 있습니다. 작동 방식 먼저 SD 카드 모듈을 살펴보겠습니다. 작동 전압이 3.3V인 표준 MicroSD 카드와 함께 작동합니다. 따라서 모듈에는 전압 조정기와 레벨 시프터가 있어 Arduino 보드의 5V 핀과