【전자 공작】 사람이라면 3 일이 걸리는 평가를 자동화하여 3 시간 만에 끝낸 이야기
(다른 회사에서도 비슷한 사례는 있을 것 같지만, 꼭 없어지길 바란다)
왜 이렇게 됐어
「토일일 나오는(휴일 출근한다)밖에 없는가」라는 상사의 한마디로 시작되었다.
진행하고 있던 상품의 개발 과정에서 문제가 발각되어 긴급하고 추가평가를 해야 했다.
이때 금요일 오후 3시에 평가 결과를 다음 주 월요일 오후 1시 회의까지 보고할 필요가 있었다.
(어째서, 이런 단납기 뭐야!!...라고는 말할 수 없고···)
발생한 문제
문제란, 상품 중의 어떤 부품에 대한 내구성의 확인이 새고 있었던 것.
(실제와는 다르지만) LED와 같이 전류를 흘리면 상태가 바뀌는 부품에 대해, 동작의 ON/OFF를 1만회 실시해도 상품 자체의 동작에 이상이 없는 것을 나타낼 필요가 있었다 하지만 왠지 새고 있었다. . .
(왜, 여기까지 아무도 눈치채지 못했는가. 라는 문제는 있지만, 일단 두어 둔다)
이것에 대해···?
이 문제에 대해 상사도 초조했기 때문이라고 생각하지만, 안정화 전원 (Amazon)을 이용해 수동으로 ON/OFF를 반복해 실시할 수밖에 없다는 제안이 올랐다.
이때, 나는 무표정이었다(라고 생각한다)가, 마음속에서는↓의 느낌이었음에 틀림없다.
「1만회 ON/OFF한다=안정화 전원의 스위치를 2만회 누른다」이며, 평가하는 부품수도 1개가 아니고, 최저라도 10개는 확인해야 했기 때문에, 총 20만 시간 조작이 필요합니다.
스위치 ON 동작이 1초/회에서도, 20만초(약 56시간) 필요하고, 기본 업무 시간이 8시간이므로 공수로서는 7인일 필요하므로, 월요일에 보고하기 위해서는 3~ 네 명이라도 소중한 휴일에 출근해야 한다.
나도 이 시험에 휘말릴 것 같았기 때문에, 자연스럽게 제안해 보았다.
「그것, 아마 자동화할 수 있어요」・・・라고.
했던 일
문제란, 상품 중의 어떤 부품에 대한 내구성의 확인이 새고 있었던 것.
(실제와는 다르지만) LED와 같이 전류를 흘리면 상태가 바뀌는 부품에 대해, 동작의 ON/OFF를 1만회 실시해도 상품 자체의 동작에 이상이 없는 것을 나타낼 필요가 있었다 하지만 왠지 새고 있었다. . .
(왜, 여기까지 아무도 눈치채지 못했는가. 라는 문제는 있지만, 일단 두어 둔다)
이것에 대해···?
이 문제에 대해 상사도 초조했기 때문이라고 생각하지만, 안정화 전원 (Amazon)을 이용해 수동으로 ON/OFF를 반복해 실시할 수밖에 없다는 제안이 올랐다.
이때, 나는 무표정이었다(라고 생각한다)가, 마음속에서는↓의 느낌이었음에 틀림없다.
「1만회 ON/OFF한다=안정화 전원의 스위치를 2만회 누른다」이며, 평가하는 부품수도 1개가 아니고, 최저라도 10개는 확인해야 했기 때문에, 총 20만 시간 조작이 필요합니다.
스위치 ON 동작이 1초/회에서도, 20만초(약 56시간) 필요하고, 기본 업무 시간이 8시간이므로 공수로서는 7인일 필요하므로, 월요일에 보고하기 위해서는 3~ 네 명이라도 소중한 휴일에 출근해야 한다.
나도 이 시험에 휘말릴 것 같았기 때문에, 자연스럽게 제안해 보았다.
「그것, 아마 자동화할 수 있어요」・・・라고.
했던 일
소요된 시간:
- 준비 : 1시간 정도
- 시험: 3시간 미만
오후 8시 정도에 결과를 보고하고 다음 주 월요일 아침에 결과를 정리했다.
스케치
매우 간단하기 때문에 생략하려고 생각했지만, 만약을 위해 게재.
(이 코드에 1만회 ON/OFF하면, 동작 종료해 LINE에 통지가 오는 명령을 추가했다)
[추기]
LINE 통지부에 대해서도 기재.
자신의 메모로서・・・.
#include <WiFi.h>
#include <WiFiMulti.h>
#include <ssl_client.h>
#include <WiFiClientSecure.h>
#include <HTTPClient.h>
#include <Wire.h>
const char* ssid = "xxx";
const char* password = "xxx";
int relay = 21;
int count = 0;
void send_line(String message) {
const char* host = "notify-api.line.me";
const char* token = "DJzodtuk2lEUlm5UuFPqsztwH3YKw3RP9d58BYMuXjX";
WiFiClientSecure client;
Serial.println("Try");
//LineのAPIサーバに接続
if (!client.connect(host, 443)) {
Serial.println("Connection failed");
return;
}
Serial.println("Connected");
//リクエストを送信
String query = String("message=") + message;
String request = String("") +
"POST /api/notify HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"Authorization: Bearer " + token + "\r\n" +
"Content-Length: " + String(query.length()) + "\r\n" +
"Content-Type: application/x-www-form-urlencoded\r\n\r\n" +
query + "\r\n";
client.print(request);
//受信終了まで待つ
while (client.connected()) {
String line = client.readStringUntil('\n');
Serial.println(line);
if (line == "\r") {
break;
}
}
String line = client.readStringUntil('\n');
Serial.println(line);
}
void wifiConnect(void) {
Serial.println("\nwifiConnect");
WiFi.disconnect();
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password); // Wi-Fi接続
while (WiFi.status() != WL_CONNECTED) { // Wi-Fi 接続待ち
delay(100);
Serial.printf(".");
}
Serial.println("\nwifi connect ok");
}
void wifiConnect(void) {
Serial.println("\nwifiConnect");
WiFi.disconnect();
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password); // Wi-Fi接続
while (WiFi.status() != WL_CONNECTED) { // Wi-Fi 接続待ち
delay(100);
Serial.printf(".");
}
Serial.println("\nwifi connect ok");
}
void setup() {
Serial.begin(115200);
pinMode(relay, OUTPUT);
// put your setup code here, to run once:
wifiConnect();
}
void loop() {
digitalWrite(relay, HIGH);
delay(1000);
digitalWrite(relay, LOW);
delay(1000);
count += 1;
if (count == 10000){
// LINEに送る
send_line("Complete!!");
}
}
알다시피
#include <WiFi.h>
#include <WiFiMulti.h>
#include <ssl_client.h>
#include <WiFiClientSecure.h>
#include <HTTPClient.h>
#include <Wire.h>
const char* ssid = "xxx";
const char* password = "xxx";
int relay = 21;
int count = 0;
void send_line(String message) {
const char* host = "notify-api.line.me";
const char* token = "DJzodtuk2lEUlm5UuFPqsztwH3YKw3RP9d58BYMuXjX";
WiFiClientSecure client;
Serial.println("Try");
//LineのAPIサーバに接続
if (!client.connect(host, 443)) {
Serial.println("Connection failed");
return;
}
Serial.println("Connected");
//リクエストを送信
String query = String("message=") + message;
String request = String("") +
"POST /api/notify HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"Authorization: Bearer " + token + "\r\n" +
"Content-Length: " + String(query.length()) + "\r\n" +
"Content-Type: application/x-www-form-urlencoded\r\n\r\n" +
query + "\r\n";
client.print(request);
//受信終了まで待つ
while (client.connected()) {
String line = client.readStringUntil('\n');
Serial.println(line);
if (line == "\r") {
break;
}
}
String line = client.readStringUntil('\n');
Serial.println(line);
}
void wifiConnect(void) {
Serial.println("\nwifiConnect");
WiFi.disconnect();
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password); // Wi-Fi接続
while (WiFi.status() != WL_CONNECTED) { // Wi-Fi 接続待ち
delay(100);
Serial.printf(".");
}
Serial.println("\nwifi connect ok");
}
void wifiConnect(void) {
Serial.println("\nwifiConnect");
WiFi.disconnect();
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password); // Wi-Fi接続
while (WiFi.status() != WL_CONNECTED) { // Wi-Fi 接続待ち
delay(100);
Serial.printf(".");
}
Serial.println("\nwifi connect ok");
}
void setup() {
Serial.begin(115200);
pinMode(relay, OUTPUT);
// put your setup code here, to run once:
wifiConnect();
}
void loop() {
digitalWrite(relay, HIGH);
delay(1000);
digitalWrite(relay, LOW);
delay(1000);
count += 1;
if (count == 10000){
// LINEに送る
send_line("Complete!!");
}
}
취미만으로 사용하고 있던 Arduino를 일로 사용하는 날이 올 것이라고는 생각하지 않았지만, 덕분에 제 휴일은 지켜졌다.
Reference
이 문제에 관하여(【전자 공작】 사람이라면 3 일이 걸리는 평가를 자동화하여 3 시간 만에 끝낸 이야기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Storm1yuki/items/6a6dc0081ce6e1833cfc텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)