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

파블로프 고양이

구성품 및 소모품

Arduino MKR IoT 번들
× 1

앱 및 온라인 서비스

전보

이 프로젝트 정보

참고:이 튜토리얼은 오래되었을 수 있습니다. 여기 최신 버전의 경우

고양이를 훈련시켜 본 적이 있다면 그것이 얼마나 힘든지 알 것입니다. 고양이는 자신의 주인이지만 이제 이 IoT 지원 장치를 사용하여 고양이에게 명령을 내릴 수 있는 기회가 생겼습니다.

Pavlov의 고양이 실험에 오신 것을 환영합니다!

이 프로젝트에서는 MKR IoT 번들의 구성 요소와 카드보드만 사용하여 고양이에게 저녁 식사 시간과 저녁 시간이 아닐 때 가르치는 방법을 배웁니다.

그리고 우리 모두는 고양이가 이미 판지 상자를 좋아한다는 것을 알고 있습니다!

고양이는 특정 멜로디를 들을 때마다 먹이를 받습니다. 광 센서가 고양이의 존재를 감지합니다. 다른 멜로디는 아무것도 하지 않습니다. 이것이 어떻게 작동하는지 보시겠습니까?

시간이 지남에 따라 고양이의 진행 상황을 모니터링하고 휴대폰에서 음식 분배 속도를 설정할 수 있습니다. 만족스러운 통계에 도달했다면 이제 센서를 웨어러블로 바꿔야 할 때입니다. 삐 소리가 나면 고양이가 당신을 따라야 합니다.

면책 조항:이 실험의 개발 과정에서 다친 고양이는 없습니다. 또한 고양이가 음식을 먹는다는 보장은 없지만 사진은 알겠죠?

간단히 말해서

이 간단한 단계별 지침에 따라 자신만의 식품 디스펜서를 만들 수 있습니다. 디스펜서는 기본적으로 몇 가지 Arduino 마법이 추가된 약간의 판지와 서보 모터입니다.

텔레그램이라는 메시징 서비스를 사용하여 분배할 음식의 양을 설정하고 부저와 함께 연주되는 멜로디를 트리거할 수 있습니다.

고양이가 멜로디에 반응하여 음식에 도달했는지 감지하기 위해 광 센서가 사용됩니다.

전문가 팁: MKR1000에서 웹페이지를 호스팅하고 수집된 데이터를 편리한 테이블에 표시할 수 있습니다.

구성 요소

<울>
  • 서보 모터
  • <울>
  • 포토트랜지스터
  • <울>
  • 220옴 저항기
  • <울>
  • 부저
  • 학습 목표

    이 실험에서 다음 방법을 배우게 됩니다.

    <울>
  • 맞춤형 키보드로 텔레그램 봇 관리
  • <울>
  • MKR1000 자체에서 웹 서버 기능을 설정하고 관리합니다. #프로팁
  • 프로 팁 유용하지만 프로젝트에 복잡성을 추가하는 꼭 필요한 단계는 아닙니다.

    더 알고 싶으십니까?

    이 자습서는 MKR1000 및 IoT에 익숙해지는 일련의 실험 중 일부입니다. 모든 실험은 MKR IoT 번들에 포함된 구성 요소를 사용하여 구축할 수 있습니다.

    <울>
  • 사랑해요 베개
  • <울>
  • 퍼즐 상자
  • <울>
  • 파블로프의 고양이
  • <울>
  • 너드
  • <울>
  • 식물 커뮤니케이터
  • 전보 및 Arduino

    Telegram은 모바일과 데스크톱 모두에서 널리 사용되는 메시징 앱입니다. 친구들과 채팅할 수 있을 뿐만 아니라 편리하고 강력한 챗봇을 만들 수도 있습니다!

    Arduino용 TelegramBot 라이브러리는 챗봇 뒤에 있는 로직을 쉽게 구현할 수 있는 방법을 제공합니다.

    봇을 만들고 기본 기능을 관리하는 방법을 배우려면 I Love You Pillow 튜토리얼을 살펴보세요.

    나만의 키보드 만들기

    Telegram을 사용하면 빠른 응답을 위한 맞춤형 키보드를 만들 수 있습니다. 이는 봇과 대화할 때 기본 키보드 대신 특정 버튼 선택이 표시됨을 의미합니다. 이러한 버튼을 쉽게 사용자 정의하고 기기의 사용자 경험을 개선할 수 있습니다.

    사용자 정의 키보드는 다음과 같습니다.

    첫 번째 줄의 버튼은 멜로디를 연주하고 음식을 분배하는 데 사용하고 두 번째 줄의 버튼은 서보 모터의 속도와 분배할 음식의 양을 설정하는 데 사용됩니다.

    맞춤형 키보드를 만들려면 먼저 선언해야 합니다.

    TelegramKeyboard keyboard_one;  

    행을 정의합니다.

     const char* row_one[] ={MusicAndFood, MusicNoFood}; const char* row_two[] ={OnePortion, TwoPortion, ThreePortion};  

    마지막으로 키보드에 행을 할당합니다.

    <사전><코드>keyboard_one.addRow(row_one, 2); // 하나 이상의 키보드에 행 할당 keyboard_one.addRow(row_two, 3); // 두 번째 인수는 행의 길이입니다.

    이모티콘은 유니코드를 사용하여 보내야 함을 기억하십시오. 예를 들어 하트 이모티콘을 보내려면 \U00002764를 사용합니다.

    여기에서 유니코드 이모티콘 코드의 전체 목록을 볼 수 있습니다. 이는 버튼을 정의하기 위해 다음을 사용한다는 의미입니다.

     const char* MusicAndFood ="\U0001F3B6 + \U0001F36A"; // 참고 + 쿠키 const char* MusicNoFood ="\U0001F3B6 NO \U0001F36A"; // 쿠키 없음 주의 const char* OnePortion ="\U0001F408"; // CAT const char* TwoPortion ="\U0001F408 \U0001F408"; // 2 CATS const char* ThreePortion ="\U0001F408 \U0001F408 \U0001F408"; // 3 고양이  

    전체 스케치는 다음과 같습니다.

    #include  #include  #include  const char* ssid =SECRET_SSID; // 네트워크 SSID(이름) const char* 암호 =SECRET_PSWD; // 네트워크 비밀번호 const char BotToken[] =SECRET_BOT_TOKEN; WiFiSSL클라이언트 클라이언트; TelegramBot 봇(BotToken, 클라이언트); TelegramKeyboard keyboard_one; 문자열 OldChatId =""; 무효 설정() { Serial.begin(115200); 지연(3000); // Wifi 네트워크 연결 시도:Serial.print("Connecting Wifi:"); Serial.println(ssid); 동안 (WiFi.begin(ssid, 암호) !=WL_CONNECTED) { Serial.print("."); 지연(500); } 직렬.println(""); Serial.println("와이파이 연결됨"); // UNICODE를 사용하여 원하는 이모티콘을 선택합니다. // 목록은 다음과 같습니다. https://unicode.org/emoji/charts/full-emoji-list.html const char* MusicAndFood ="\U0001F3B6 + \U0001F36A"; // 참고 + 쿠키 const char* MusicNoFood ="\U0001F3B6 NO \U0001F36A"; // 쿠키 없음 주의 const char* OnePortion ="\U0001F408"; // CAT const char* TwoPortion ="\U0001F408 \U0001F408"; // 2 CATS const char* ThreePortion ="\U0001F408 \U0001F408 \U0001F408"; // 3 CATS // 행 정의 const char* row_one[] ={MusicAndFood, MusicNoFood}; const char* row_two[] ={OnePortion, TwoPortion, ThreePortion}; keyboard_one.addRow(row_one, 2); // 하나 이상의 키보드에 행 할당 keyboard_one.addRow(row_two, 3); // 두 번째 인수는 행의 길이입니다. bot.begin(); } 무효 루프() { 메시지 m =bot.getUpdates(); // 새 메시지 읽기 if ( m.chat_id !=0 ) { // 업데이트가 있는지 확인 OldChatId =m.chat_id; Serial.println(m.text); bot.sendMessage(m.chat_id, "안녕하세요!", keyboard_one); } 지연(1000); }  

    안타깝게도 봇이 이모티콘을 보내는 방식은 이모티콘을 받는 데 사용되는 방식과 다릅니다. EchoBot 예제를 사용하면 봇이 이모티콘을 받는 방식을 쉽게 확인할 수 있습니다.

    예를 들어 우리가 사용할 이모티콘은 다음과 같이 수신됩니다.

    ud83cudfb6 // 멜로디 ud83cudf6a // Cookieud83dudc08 // 고양이 

    고양이를 감지하세요!

    고양이의 존재를 감지하기 위해 우리는 빛의 강도를 측정할 수 있는 광 트랜지스터를 사용할 것입니다.

    220옴 저항을 사용했습니다.

    센서에서 값을 읽으려면 analogRead(A6)만 필요합니다.

    우리는 멜로디 다음에 고양이 존재를 감지하는 데 관심이 있기 때문에 일정 시간 동안 다음 논리를 사용할 수 있습니다.

    부호 없는 긴 타이머, bool startDetecting =true, int 임계값=200; // 임의 값 무효 setup(){timer=millis()Serial.begin(9600);} 무효 루프(){if(startDetecting) { int 값 =analogRead(A6); if (값 <임계값) { Serial.println("고양이가 감지되었습니다!"); 시작 감지 =거짓; } else if (millis() - 타이머> 120000) { Serial.println("지난 2분 동안 고양이가 감지되지 않았습니다."); 시작 감지 =거짓; } } } 

    참고 밀리() 타이머를 설정하는 기능 . 밀리() 보드가 가동되고 실행된 이후의 시간을 밀리초 단위로 알려줍니다. 일정 시간이 지나면 타이머를 설정하고 이벤트를 트리거하는 데 사용할 수 있습니다.

    또한 임계값을 사용합니다. 고양이가 감지되었는지 확인합니다. 임계값은 임의적이므로 조명 상태에 따라 설정할 수 있습니다.

    노래 재생

    노래를 재생하려면 부저와 tone() 을 사용합니다. 기능.

    우리는 표준 예시 toneMelody를 약간 수정한 버전을 사용할 것입니다. 드롭다운 메뉴에서 찾을 수 있습니다.

    예시> 디지털> toneMelody. 

    서보 모터 추가

    서보는 상자를 열고 음식을 배달하는 데 사용됩니다.

    int PortionAmount =1; 변수를 사용합니다. 서보가 90도 회전된 상태를 유지해야 하는 시간을 설정합니다. 텔레그램을 통해 가치를 변경할 수 있습니다.

    서보를 핀 7에 연결하고 이 스케치를 업로드하여 작동하는지 확인하세요.

    #include  서보 마이서보; // 서보를 제어하기 위한 서보 객체 생성 int pos =0; // 서보 위치를 저장할 변수 int PortionAmount =1; // 음식의 기본 양을 1인분으로 설정 void setup() { myservo.attach(7); // 6번 핀의 서보를 서보 객체에 연결합니다. } void loop() { moveServo(); 지연(2000); } 무효 moveServo() { Serial.println("움직이는 서보"); for (pos =0; pos <=90; pos +=1) { // 0도에서 90도로 이동합니다. myservo.write(pos); // 서보에 변수 'pos'의 위치로 이동하도록 지시합니다. delay(15); // 서보가 위치에 도달할 때까지 15ms를 기다림 } delay(PortionAmount * 300); // 배달하려는 음식의 양을 기준으로 일정 시간 동안 상자를 열어 둡니다. (pos =90; pos>=0; pos -=1) { // 90도에서 0도로 이동합니다. myservo.write( 포스); / 서보에 변수 'pos' delay(15)의 위치로 이동하도록 지시합니다. // 서보가 위치에 도달할 때까지 15ms 기다림 } }  

    #ProTip:웹 서버 추가

    MKR1000의 가장 강력한 기능 중 하나는 액세스 포인트 모드입니다.

    보드 IP 주소를 사용하고 동일한 네트워크에 연결하여 액세스할 수 있는 MKR1000에서 웹 페이지를 호스팅할 수 있습니다. .

    이 도구를 사용하여 식품 디스펜서에서 수집한 데이터를 인쇄할 것입니다.

    이 단계에서는 HTML 및 CSS에 대한 기본 지식이 필요합니다. (또는 예제 스케치에 대한 많은 신뢰. 기본 웹 서버 예제는 다음에서 확인할 수 있습니다.

    > 예시> WiFi101> AP_SimpleWebServer 

    특정 단어를 전송하여 액세스 포인트 모드를 트리거합니다. Telegram Bot에 웹 페이지에 연결하는 링크와 함께 응답합니다. 그러면 텔레그램 클라이언트의 연결이 끊어지고 웹 서버가 시작됩니다.

    else if(m.text =="서버"){ IPAddress ip =WiFi.localIP(); web_server_mode=참; String message ="웹페이지를 보려면 http://로 이동"+IpToString(ip); bot.sendMessage(m.chat_id, 메시지, keyboard_one); telegram_client.stop(); 지연(1000); server.begin(); // 포트 80에서 웹 서버 시작 }  

    웹 페이지에는 웹 서버 모드를 끄고 텔레그램 클라이언트로 돌아갈 수 있는 버튼이 있습니다.

    if (currentLine.endsWith("GET /BACKBUTTON")) { // 버튼이 눌린 경우 web_server_mode=false; client.stop(); 지연(1000); bot.begin(); bot.sendMessage(OldChatId, "백 온라인!", keyboard_one); }  

    고양이 감지가 종료될 때마다 테이블의 새 셀이 추가됩니다. 수집된 데이터와 함께:음식이 배달되었는지, 고양이가 2분 이내에 나타났는지, 디스펜서에 도달하는 데 얼마나 걸렸는지.

    AddTableCell(음식/음식 없음, 예/아니요, TimeValue);  

    그런 다음 모든 테이블 셀을 포함하는 문자열이 업데이트되고 기본 HTML의 나머지 부분에 통합됩니다.

    <사전><코드> table_cells+=cell; // 새 셀 추가 html =html_1 + table_cells + html_2; // 메인 html에 셀 추가

    이 모든 새로운 기능을 통합하는 방법을 보려면 마지막 Pro 예제를 확인하십시오!

    도움말: 보드 재설정 후에도 데이터가 유지되기를 원한다면 Flash Storage 라이브러리를 살펴보거나 Nerd 프로젝트를 확인하십시오!

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

    코드

    전체 스케치
    #ProTips 전체 스케치

    맞춤형 부품 및 인클로저

    2mm 판지 pavlovcase_ShVm1OJRIF.dxf

    회로도


    제조공정

    1. 냉동 야채
    2. TV 만찬
    3. CAT 스캐너
    4. 고양이 쓰레기
    5. 동결 건조 식품
    6. 애완동물 사료
    7. Shop.Cat.Com 가이드
    8. My.Cat.com 시작하기
    9. 자동 식품 자판기 – 제품의 다양성
    10. 음식이 더 빨라졌습니다