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

Arduino 압력 측정 및 로깅

구성품 및 소모품

Arduino UNO
× 1
Delkin 상업용 MLC SD
× 1
압력 센서 SKU237545
× 1
데이터 로거 rtc
× 1
i2c LCD
× 1
방수 투명 커버 플라스틱 전자 프로젝트 상자 158 x 90 x 60mm
× 1
HALJIA 300Pcs M3 나일론 검정 육각 나사
× 1
ELEGOO 120pcs 멀티컬러 듀폰 와이어
× 1

앱 및 온라인 서비스

Arduino IDE

이 프로젝트 정보

이 프로젝트는 기계식 압축기의 효율성을 확인하기 위해 저장소에 내장된 공기 압력을 기록하고 싶었던 결과였습니다.

George Kontaxis의 도움

https://www.youtube.com/watch?v=AB7zgnfkEi4&feature=youtu.be

날짜와 압력을 막대 및 PSI로 표시하는 디스플레이

아두이노 압력계. 3 압력 읽기

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

코드

<울>
  • LCD 실시간 시계 및 데이터 로깅 기능이 있는 SKU237545 압력 센서
  • 실시간 시계 설정
  • LCD 실시간 시계 및 데이터 로깅 기능이 있는 SKU237545 압력 센서C/C++
    //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_PCF8574
    RTClib.h
    라이브러리, 실시간 시계, 먼저 zip의 압축을 풉니다. 그런 다음 나머지 zip 파일을 라이브러리에 추가합니다.https://github.com/mechasolution/RTClib.h

    회로도

    A5에서 SCL로
    A4에서 SDA로
    VCC에 5볼트
    GND에서 GND로 A1에 대한 노란색 선
    GND에 검은 선
    5볼트에 빨간선 PC에 연결하여 올바른 성능 확인

    제조공정

    1. Arduino 디지털 주사위
    2. Arduino 게임 컨트롤러
    3. LCD 애니메이션 및 게임
    4. 스마트 신발(자동 끈 및 전기 생성)
    5. Nextion 디스플레이의 BME280 온도, 습도 및 압력
    6. arduino를 사용한 소나 및 IDE 처리 시 표시
    7. 픽셀 체이서 게임
    8. 로터리 인코더가 있는 DIY 간단한 측정 휠
    9. 볼트와 Arduino를 사용하여 LED 밝기 제어
    10. 공압 안전 부품 및 적용 위치