Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Gato Pavlovs

Componentes e suprimentos

Arduino MKR IoT Bundle
× 1

Aplicativos e serviços online

Telegrama

Sobre este projeto


Observação:este tutorial pode estar desatualizado, vá aqui para uma versão mais atual.



Se você já tentou treinar um gato, sabe como é difícil. Os gatos são seus próprios mestres, mas agora você tem a chance de permitir que os gatos façam suas licitações usando este dispositivo habilitado para IoT.





Bem-vindo ao Experimento do Gato de Pavlov!


Neste projeto, você aprenderá como ensinar seu gato quando é (e não é) hora do jantar usando nada além dos componentes do pacote MKR IoT e um pouco de papelão.

E todos nós sabemos que os gatos já adoram caixas de papelão!

Cada vez que o gato ouve uma determinada melodia, ele recebe comida. Um sensor de luz detecta a presença de um gato. Outra melodia não faz nada. Veja como isso vai funcionar?

Você poderá monitorar a progressão do seu gato ao longo do tempo e definir a taxa de distribuição de comida em seu telefone. Depois de atingir estatísticas satisfatórias, é hora de redirecionar o sensor para um wearable. Seu gato deve a partir de então segui-lo se você fizer aquele som de bipe.

Isenção de responsabilidade:nenhum gato foi ferido no desenvolvimento deste experimento. Além disso, não há garantia de que o gato comerá a comida, mas você entendeu, certo?





Em poucas palavras


Você poderá construir seu próprio dispensador de alimentos seguindo estas instruções simples passo a passo. O dispensador é basicamente um pouco de papelão e um servo motor com um pouco da magia Arduino adicionada.

Usando um serviço de mensagens chamado Telegram, você pode definir a quantidade de comida a ser distribuída e acionar as melodias tocadas com a campainha.

Um sensor de luz é usado para detectar se o gato reagiu à melodia e chegou à comida.

Dica profissional: Você pode hospedar uma página da web no MKR1000 e exibir os dados coletados em uma tabela prática.





Componentes

  • Servo motor
  • Fototransistor
  • resistor de 220 ohms
  • Buzzer





Metas de aprendizagem


Neste experimento, você aprenderá como:
  • Gerenciar bots de telegrama com um teclado personalizado
  • Configure e gerencie a funcionalidade do servidor web a partir do próprio MKR1000. #ProTip

Dicas profissionais são etapas úteis, mas não estritamente necessárias, que adicionam uma camada de complexidade ao projeto.





Quer saber mais?


Este tutorial é parte de uma série de experimentos que o familiarizam com o MKR1000 e a IoT. Todos os experimentos podem ser construídos usando os componentes contidos no MKR IoT Bundle.
  • Travesseiro Eu te amo
  • Caixa de quebra-cabeça
  • Gato de Pavlov
  • O Nerd
  • Comunicador de planta





Telegram e Arduino


Telegram é um aplicativo de mensagens popular para dispositivos móveis e desktops. Além de nos permitir conversar com nossos amigos, também nos permite criar bots de bate-papo úteis e poderosos!

A biblioteca TelegramBot para Arduino nos oferece uma maneira fácil de implementar a lógica por trás do chat-bot.

Para aprender a criar um bot e gerenciar as funcionalidades básicas, dê uma olhada no tutorial I Love You Pillow.





Crie seu teclado personalizado


O Telegram nos permite criar um teclado personalizado para respostas rápidas. Isso significa que quando você fala com um bot, uma certa seleção de botões será exibida em vez do teclado padrão. Você pode personalizar facilmente esses botões e melhorar a experiência do usuário no seu dispositivo.

Nosso teclado personalizado tem a seguinte aparência:

Usaremos a primeira linha de botões para tocar a melodia e dispensar comida, enquanto a segunda linha de botões será usada para definir a velocidade do servo motor e, portanto, a quantidade de comida a ser dispensada.

Para criar um teclado personalizado, primeiro precisamos declará-lo:
  TelegramKeyboard keyboard_one;  

Em seguida, defina as linhas:
  const char * row_one [] ={MusicAndFood, MusicNoFood}; const char * row_two [] ={OnePortion, TwoPortion, ThreePortion};  

E, finalmente, atribua as linhas ao teclado:
  keyboard_one.addRow (row_one, 2); // atribuir uma linha a um ou mais teclados keyboard_one.addRow (row_two, 3); // segundo argumento é o comprimento da linha  

Lembre-se de que um emoji deve ser enviado em UNICODE. Por exemplo, para enviar um emoji de coração, usaremos: \ U00002764

Você pode ver a lista completa de códigos de emoji Unicode aqui. Isso significa que, para definir nossos botões, usaremos o seguinte:
  const char * MusicAndFood ="\ U0001F3B6 + \ U0001F36A"; // Nota + Cookie const char * MusicNoFood ="\ U0001F3B6 NO \ U0001F36A"; // Nota NÃO Cookie const char * OnePortion ="\ U0001F408"; // CAT const char * TwoPortion ="\ U0001F408 \ U0001F408"; // 2 CATS const char * ThreePortion ="\ U0001F408 \ U0001F408 \ U0001F408"; // 3 CATS  





Aqui está o esboço completo:

  #include  #include  #include  const char * ssid =SECRET_SSID; // SSID (nome) da sua rede const char * password =SECRET_PSWD; // sua senha de rede const char BotToken [] =SECRET_BOT_TOKEN; Cliente WiFiSSLClient; Bot TelegramBot (BotToken, cliente); TelegramKeyboard keyboard_one; String OldChatId =""; void setup () {Serial.begin (115200); atraso (3000); // tentativa de conexão à rede Wifi:Serial.print ("Connecting Wifi:"); Serial.println (ssid); while (WiFi.begin (ssid, senha)! =WL_CONNECTED) {Serial.print ("."); atraso (500); } Serial.println (""); Serial.println ("WiFi conectado"); // escolha o emoji que você gosta de usar UNICODE // aqui está a lista https://unicode.org/emoji/charts/full-emoji-list.html const char * MusicAndFood ="\ U0001F3B6 + \ U0001F36A"; // Nota + Cookie const char * MusicNoFood ="\ U0001F3B6 NO \ U0001F36A"; // Nota NÃO Cookie const char * OnePortion ="\ U0001F408"; // CAT const char * TwoPortion ="\ U0001F408 \ U0001F408"; // 2 CATS const char * ThreePortion ="\ U0001F408 \ U0001F408 \ U0001F408"; // 3 CATS // define sua const char * row_one [] ={MusicAndFood, MusicNoFood}; const char * row_two [] ={OnePortion, TwoPortion, ThreePortion}; keyboard_one.addRow (row_one, 2); // atribuir uma linha a um ou mais teclados keyboard_one.addRow (row_two, 3); // segundo argumento é o comprimento da linha bot.begin (); } void loop () {mensagem m =bot.getUpdates (); // Lê novas mensagens if (m.chat_id! =0) {// Verifica se há alguma atualização OldChatId =m.chat_id; Serial.println (m.text); bot.sendMessage (m.chat_id, "Olá!", keyboard_one); } atraso (1000); }  

Infelizmente, a forma como o bot envia os emojis não é a mesma usada para recebê-los. Usar o exemplo EchoBot é uma maneira fácil de ver como os bots recebem emoji.

Por exemplo, o emoji que usaremos é recebido assim:
  ud83cudfb6 // Melody ud83cudf6a // Cookieud83dudc08 // Gato  





Detecte o gato!


Para detectar a presença do gato usaremos um fototransistor, que é capaz de medir a intensidade da luz e portanto se alguém passou perto dele.

Observe que usamos um resistor de 220 ohms.

Para ler os valores do sensor, precisaremos apenas de um analogRead (A6).

Como estamos interessados ​​em detectar a presença do gato apenas após a melodia, e apenas por um determinado período de tempo, podemos usar a seguinte lógica:
  temporizador longo sem sinal; bool startDetecting =true; limite interno =200; // configuração do valor arbitrário do valor evoid () {timer =millis () Serial.begin (9600);} void loop () {if (startDetecting) {int value =analogRead (A6); if (valor  120000) {Serial.println ("nenhum gato detectado nos últimos dois minutos"); startDetecting =false; }}}  

Observe que usamos o millis () função para definir um cronômetro . Millis () nos dá o tempo em milissegundos desde que a placa estava instalada e funcionando. Podemos usá-lo para definir temporizadores e acionar eventos após um certo período de tempo.

Também usamos um limite para determinar se o gato foi detectado. Esse limite é arbitrário, você pode defini-lo de acordo com a sua condição de luz.





Toque a música


Para tocar a música, usaremos a campainha e o tone () função.

Usaremos uma versão ligeiramente modificada do exemplo padrão toneMelody. Você pode encontrá-lo no menu suspenso:
  examples> digital> toneMelody.  





Adicione o servo motor


O servo é usado para abrir a caixa e entregar comida.

Observe que usamos uma variável int PortionAmount =1; para definir a quantidade de tempo que o servo deve permanecer girado 90 graus. Poderemos alterar seu valor através do Telegram.

Anexe o servo ao pino 7 e carregue este esboço para vê-lo funcionando.
  #include  Servo meu servo; // cria um objeto servo para controlar um servo int pos =0; // variável para armazenar a posição do servo int PortionAmount =1; // Define a quantidade padrão de comida para 1 porção void setup () {myservo.attach (7); // anexa o servo no pino 6 ao objeto servo} void loop () {moveServo (); atraso (2000); } void moveServo () {Serial.println ("servo móvel"); for (pos =0; pos <=90; pos + =1) {// vai de 0 graus a 90 graus myservo.write (pos); // diz ao servo para ir para a posição na variável 'pos' delay (15); // espera 15ms para que o servo alcance a posição} delay (PortionAmount * 300); // mantenha a caixa aberta por um intervalo de tempo com base na quantidade de comida que você deseja entregar (pos =90; pos> =0; pos - =1) {// vai de 90 graus a 0 graus myservo.write ( pos); / dizer ao servo para ir para a posição no atraso 'pos' variável (15); // espera 15ms para o servo atingir a posição}}  





#ProTip:Adicionar um servidor web


Uma das funcionalidades mais poderosas do MKR1000 é o Modo de Ponto de Acesso.

Isso nos permite hospedar uma página da web no MKR1000 que podemos acessar usando o endereço IP da placa e estando conectados à mesma rede .

Usaremos esta ferramenta para imprimir os dados coletados pelo dispensador de alimentos.

Esta etapa requer conhecimento básico de HTML e CSS (ou muita confiança no esboço de exemplo. Você pode verificar o exemplo de servidor web básico em:
 > exemplo> WiFi101> AP_SimpleWebServer  

Iremos acionar o modo de ponto de acesso enviando uma palavra específica ao nosso Telegram Bot, que responderá com o link para acessar a página da web. Em seguida, o cliente do telegrama será desconectado e o servidor da web será iniciado.
  else if (m.text =="Server") {IPAddress ip =WiFi.localIP (); web_server_mode =true; String message ="Para ver a página da web vá para http://" + IpToString (ip); bot.sendMessage (m.chat_id, mensagem, keyboard_one); telegram_client.stop (); atraso (1000); server.begin (); // inicia o servidor da web na porta 80}  

A página da web inclui um botão que desligará o modo do servidor da web e voltará como um cliente de telegrama:
  if (currentLine.endsWith ("GET / BACKBUTTON")) {// se o botão for pressionado web_server_mode =false; client.stop (); atraso (1000); bot.begin (); bot.sendMessage (OldChatId, "Voltar online!", keyboard_one); }  

Cada vez que a detecção de gato termina, uma nova célula da tabela é adicionada com os dados recolhidos:se foi entregue comida, se o gato apareceu em dois minutos e quanto tempo demorou a chegar ao dispensador.
  AddTableCell (food / noFood, Yes / No, TimeValue);  

Em seguida, o String contendo todas as células da tabela é atualizado e integrado no resto do html principal.
  table_cells + =cell; // adicionar nova célula html =html_1 + table_cells + html_2; // adiciona células ao html principal  

Verifique o exemplo final do Pro para ver como integrar todas essas novas funcionalidades!

Dica: se você quiser que seus dados sobrevivam a uma reinicialização da placa, dê uma olhada na biblioteca Flash Storage ou verifique o projeto Nerd!

Código

Esboço completo
#ProTips esboço completo

Peças personalizadas e gabinetes

Papelão de 2 mm pavlovcase_ShVm1OJRIF.dxf

Esquemas


Processo de manufatura

  1. Vegetais Congelados
  2. Jantar na TV
  3. Scanner CAT
  4. Maca de gato
  5. Alimentos liofilizados
  6. Alimentos para animais de estimação
  7. Seu guia para Shop.Cat.Com
  8. Introdução ao My.Cat.com
  9. Máquinas automáticas de venda de alimentos - Versatilidade do produto
  10. Comida ficou mais rápida