Arquivos para arduino

“Listening Temperature” with TinyML

10 10-03:00 fevereiro 10-03:00 2022 — Deixe um comentário

Can we “hear” a difference between pouring hot and cold water? Amazing proof-of-concept by a quick real deployment using Edge Impulse Studio

"Listening Temperature" with TinyML

Introduction

A few months ago, my dear friend Dr. Marco Zennaro from ICTP, Italy, asked me if I heard that we humans could distinguish between hot and cold water only by listening to it. At principle, I thought that I was the one who did not listen to him well! 😉 But when he send me this paper: Why can you hear a difference between pouring hot and cold water? In an investigation of temperature dependence in psychoacoustics, I realized that Dr. Marco was pretty serious about it!

The first thing that called my attention reading the paper was the mention of this youtube video (please, watch the video and try it yourself before going on with the reading). Uaw! I could easily differentiate between the two different temperatures, only by the sound of water splashing in the cup (could you?) But why did this happen? The video mentioned that the change in the water splashing changes the sound that it makes because of various complex fluid dynamic reasons’. Not much explanation on this. Others say “that the viscosity changed with the temperature” or that it must be something with hot liquid tending to be more “bubbling.” Anyway, according to the paper’s researches, all of this is only speculation.

Besides the scientific investigation on it (what should be very interesting), the question that comes to us was: Is this ability of “listening temperatures” something replicable using Artificial Neural Networks? We did not know, but let’s try to create a simple experience using TinyML (Machine Learning applied to embedded devices).

Uaw! I could easily differentiate between the two different temperatures, only by the sound of water splashing in the cup (could you?) But why did this happen? The video mentioned that the change in the water splashing changes the sound that it makes because of various complex fluid dynamic reasons. Not much explanation on this. Others say that the viscosity changed with the temperature or that it must be something with hot liquid tending to be more bubbling. Anyway, according to the paper’s researches, all of this is only speculation.

Besides the scientific investigation on it (what should be very interesting), the question that comes to us was: Is this ability of listening temperatures something replicable using Artificial Neural Networks? We did not know, but let’s try to create a simple experience using TinyML (Machine Learning applied to embedded devices) and find the answer!

The Experiment

image.png

First, this is a simple proof-of-concept, so let us reduce the variables. Two similar glasses were used (same with the plastic recipient where the water was collected). The water temperatures were very different, with a 50oC range between them. (11oC and 61oC).

Each sample was around the time that the glass took to be filled (3 to 5 seconds).

Note that we were interested in capturing the sound of the water only during the pouring process.

The sound was captured by the same digital microphone (sampling frequency: 16KHz. Bit Depth: 16 Bits) and stored as.wav files in 3 different folders:

  • Cold Water sound (“Cool”)
  • Hot Water sound (“Hot”)
  • No water sound (“Noise”).

The Cold Water label should be better defined as “cold” instead of “cool”, but once this is not a scientific paper, was cool leave it as ”cool” 😉

With the dataset captured, we uploaded it to Edge Impulse Studio, where the data were preprocessed, the Neural Network (NN) model was trained, tested, and deployed to an MCU for real physical test (an iPhone was also used for live classification).

Continue lendo…

Nosso objetivo neste tutorial será basicamente coletar informações de uma unidade local, enviando-as à internet. Um usuário em qualquer parte do planeta, olhando estas informações, tomará decisões enviando comandos remotos à atuadores, os quais também estarão nesta unidade local. Qualquer sensor ou atuador poderia ser utilizado.

IoT

Este tutorial foi escrito a partir do que desenvolvi previamente envolvendo o ArduFarmBot e de meu projeto final apresentado para o curso: “Objetos inteligentes conectados”, promovido pelo CodeIOT, um projeto da Samsung em parceria com o Laboratório de Sistemas Integráveis Tecnológico.

A maioria de meu trabalho no campo do IoT utiliza o NodeMCU (ESP826612-E) e mais recentemente, o ESP32. Mas, acredito importante não esquecer de meus primeiros passos, onde começei a aprender IoT, usando-se de um simples Arduino UNO e do velho e bom ESP8266-01.

Decidi então, retornar a essa dupla, agora com um pouquinho mais de experiência e explorar novamente esses ótimos dispositivos, conectando-os à nuvem, usando-se do  ThingSpeak.com como nosso “Web Service”.

Também exploraremos como controlar coisas remotamente desde qualquer lugar no mundo, utilizando-se de um aplicativo Android desenvolvido a partir do MIT AppInventor.

Project Concept

O “Centro do nosso projeto IoT” será o ThingSpeak.com. A unidade local (UNO / ESP-01) será a encarregada de capturar tanto os dados dos sensores quanto o status dos atuadores, enviando-os à Internet, ou seja, “escrevendo” em um canal específico do para o status da unidade local no ThingSpeak.com. A unidade local também receberá dados da internet, “lendo” canais específicos para os atuadores no ThingSpeak.com.

Um aplicativo Android também estará “lendo” esses dados de status guardados no ThingSpeak.com (Status Channel), exibindo-os para o usuário. Da mesma forma, o usuário, com base nesta informação de status, poderá enviar comandos para os atuadores, escrevendo commandos nos canais específicos para os atuadores no ThingSpeak.com (veja o diagrama de blocos acima para entender melhor o fluxo de dados).

O diagrama de blocos mostrado na próxima etapa nos dará uma visão geral do projeto final, onde como exemplo controlaremos a irrigação e o calor de uma plantação.

Continue lendo…

Electronic Playground With Arduino and Scratch 2

Este é o meu quarto tutorial procurando integrar o aprendizado da eletrônica com a linguagem SCRATCH e o primeiro que publico em português.

Anteriormente, já havia publicado, tanto no site do Instructables.com, quanto no Hackster.io:

  1. Physical Computing – Scratch 2.0 for Raspberry Pi
  2. Physical Computing – Scratch for Raspberry Pi   (Scratch V.1.4)
  3. Physical Computing – Scratch for Arduino   (S4A / Scratch V1.4)

Neste novo tutorial, desenvolveremos novos projetos e idéias integrando o Scratch 2.0 com o Arduino, verdadeiros “campeões” quando se fala sobre o ensino de eletrônica e programacão para crianças, educadores e iniciantes.

Existem poucas iniciativas disponíveis na web abrangendo Scratch 2 para Arduinos, sendo mais conhecidas as que foram desenvolvidas com foco em kits suportados oficialmente pelo site do Scratch, tais como Lego WeDo, PicoBoard, ou o alternativo editor mBlock , etc.

Como uma opção pessoal e para não ficar amarrado a nenhum fabricante ou solução proprietária, escrevi este tutorial com base no “s2aio“, uma extensão de hardware gratuita e aberta, criada por MrYsLab,  para ser utilizada com o o editor offline do Scratch 2.0.

Obrigado, Alan Yorinks, criador do MrYsLab por esta grande iniciativa!

Legal! Neste tutorial, aprenderemos como utilizar o Scratch 2.0 na programação de um ARDUINO de maneira a que possamos interagir com o mundo físico!

Em suma, aprenderemos como:

  • Ler entradas digitais tais como botões e sensores de movimento
  • Ler sensores analógicos como LDR (para medir luz) e temperatura
  • Gerar saídas digitais, ligando e desligando LEDs
  • Atuar em dispositivos analógicos controlando, por exemplo, o brilho de um LED usando-se de técnicas de modulação de pulso (PWM)
  • Gerar tons musicais utilizando-se de uma campainha (buzzer)
  • Controlar um servo motor
  • Medir distâncias com um sensor de ultra-som (como os morcegos)
  • Construir um “Playground eletrônico virtual” para interagir com dispositivos reais
  • Misturar animação com dispositivos do mundo real
  • Construir um radar

O diagrama acima mostra todos os sensores e atuadores conectados ao nosso Arduino. Mas não se preocupe, iremos passo a passo em cada componente.

Neste vídeo você poderá ver um radar de verdade desenvolvido a partir do Scratch 2 e do Arduino. Desenvolveremos este projeto juntos ao longo deste tutorial:

Continue lendo…

A Linguagem Scratch e o mundo físico

26 26-03:00 julho 26-03:00 2017 — Deixe um comentário

Uma linguagem de programação fantastica para iniciantes no mundo da informática, principalmente crianças, é o SCRATCH!

Mas o que é o Scratch?

Vejamos o que diz o Wikipedia:

Por não exigir o conhecimento prévio de outras linguagens de programação, ele é ideal para pessoas que estão começando a programar e foi desenvolvida para ajudar pessoas acima de 8 anos no aprendizado de conceitos matemáticos e computacionais. Com ele é possível criar histórias animadas, jogos e outros programas interativos.

E também controlar o mundo físico, juntamente com o Raspberry Pi e o Arduino!

Criado tendo em vista as experiências do Media Lab com a linguagem LOGO desenvolvida por Papert, o Scratch visa ir além dessa linguagem em três aspectos: fazer a linguagem mais suscetiva à manipulação, mais social e mais significante. Assim a forma como os blocos podem ser manipulados lhe confere uma possibilidade de aprendizagem auto-gerida através da prática de manipulação e teste dos projetos. A plataforma online permite que usuário interajam entre si, critiquem e aprendam com os projetos dos outros (remixing). Além disso, o Scratch permite a personalização através da incorporação de imagens e sons externos, bem como a possibilidade de desenhar e gravar som dentro da ferramenta. Continue lendo…

Deteção de cores com o Arduino

1 01-03:00 maio 01-03:00 2017 — Deixe um comentário

Neste tutorial, exploraremos como ler cores usando um Arduino e sensores como o TCS 3200. A idéia será detectar a cor de um objeto, exibindo-a em um LCD. Este tutorial é a primeira parte de um projeto maior, um braço robótico que decide que operação executar a partir da cor de uma peça.

O diagrama de blocos abaixo mostra os principais componentes:

Color Detector Block DiagramO vídeo abaixo mostra como ficará o projeto final:

Continue lendo…

ArduFarmBot, o livro!

13 13-03:00 março 13-03:00 2017 — Deixe um comentário

Acaba de sair do forno o primeiro livro da série “Tutoriais MJRoBot”, o “ArduFarmBot: Automatizando uma horta de tomates com a ajuda da Internet das Coisas – IoT”.

O livro pode ser adquirido nas lojas do Kindle na Amazon:

book amazon

Por favor divulguem o livro e se gostaram, deixem um comentário na página da: Amazon.com.br

Caso encontrem erros ou tenham sugestões, por favor usem a area de mensagens aqui no blog, que procurarei corrigir nas próximas edições.

O livro usa o controlador eletrônico “ArduFarmBot” como base para o aprendizado de como se trabalhar tanto em HW quanto em SW, com: a) Displays do tipo LCD e OLED; b) LEDs e botões; c) Acionamento de bombas e lâmpadas via relés e d) Leitura de sensores tais como: DHT22 (temperatura e umidade relativa do ar), DS18B20 (temperatura do solo), YL69 (umidade do solo) e LDR (luminosidade).

Todas as principais etapas dos projetos são detalhadamente documentadas através de textos explicativos, diagramas de blocos, fotos coloridas de alta resolução, diagramas elétricos utilizando-se do aplicativo “Fritzing”, códigos completos armazenados no “GitHub” e vídeos do “YouTube”.

No livro, são desenvolvidas duas versões do controlador eletrônico “ArduFarmBot”, que a partir da captura de dados provenientes de uma horta de tomates, tais como temperatura do ar e solo, umidade relativa do ar, umidade do solo e luminosidade, decidem autonomamente a quantidade certa (e quando) uma plantação deve receber calor e água. O ArduFarmBot também permite a intervenção manual, tanto em forma local quanto remota via Internet, a fim de controlar o acionamento de uma bomba de água e de uma lâmpada elétrica, esta última para ser usada na geração de calor para as plantas.

O livro está dividido em 3 partes.

Na primeira parte, a partir do “Arduino Nano” de desenvolve uma versão tanto manual operada por botões, quanto automática do “ArduFarmBot”.

book1

Na segunda parte, se aprofunda no projeto da automação e introduz a operação remota através da criação de uma página na internet. O “ESP8266-01” é utilizado para a conexão “Wifi”, enviando dados para o serviço especializado em IoT, “ThingSpeak.com“.

book2

Na terceira parte, uma segunda versão do “ArduFarmBot” é desenvolvida, introduzindo o “NodeMCU ESP8266-12E”, um poderoso e versátil dispositivo para projetos em IoT, que substitui de forma integrada tanto o “Arduino Nano” quanto o “ESP8266-01”, utilizados nas partes anteriores do livro. Nesta última, se explora também uma nova plataforma de serviços do universo IoT, o “Blynk”.

book4

Espero que gostem! E se preparem para o Tutoriais MJRoBot 2: “Brincando com robôs”.

Não deixem de visitar e seguir minha página: MJRoBot.org no Facebook

Saludos desde el sur del mundo!

Nos vemos em meu próximo post!

Obrigado e um abração,

Marcelo

 

Este post é uma continuação do ArduFarmBot: Controlando um tomateiro com a ajuda de um Arduino e Internet das coisas (IoT)

Na primeira parte do projeto, criamos uma estação local de controle e captura de informações, tais como temperatura, umidade relativa do ar, luminosidade e umidade do solo. Com base nesses dados, o ArduFarmBot decidia automaticamente a quantidade certa (e quando) o tomateiro deveria receber calor e água. A estação local de controle desenvolvida na Parte 1, também permitia a intervenção manual de um operador a fim de controlar tanto a bomba de água quanto a lâmpada elétrica. Nesta  segunda parte, implementaremos uma abordagem “IoT” onde a”intervenção manual” também poderá ser feita remotamente via Internet. O diagrama de blocos mostra como faremos isso:

ardufarmbot_gal_block_diagram

Note-se que os dados capturados serão enviados a um “serviço de armazenamento na nuvem” (no nosso caso Thinkspeak.com). Além disso, um website dedicado, o “Remote Control Page” mostrado no diagrama,  irá monitorar e exibir esses dados em tempo quase real. Esta página também permitirá a ativação remota da bomba e  da lâmpada.

 

Continue lendo…

Como um dos vencedores do concurso “Robotics 2016” do Instructables, recebi como prêmio da empresa iRobot, um robô aspirador Roomba Create2. Neste post, vou contar um pouco de minhas primeiras aventuras com o garoto!

Continue lendo...

A eletrônica embarcada utilizada em meu projeto “Mars Rover tupiniquin”, participou do INTERNET OF THINGS CONTEST 2016 do INSTRUCTABLES.COM , onde logrou-se ser um dos finalistas da competição. O projeto foi um dos ganhadores na categoria “Runner up”, o que me deixou muito contente, pois a competição contou com projetos estupendos!

 

O vídeo abaixo mostra o RPi capturando dados de humidade e temperatura enviando-os para o site thingspeak.com

 

A lista completa dos projetos pode ser encontrada no site:

http://www.instructables.com/contest/iot2016/entries/

IMG_4153

Não deixe de visitar e seguir minha página: MJRoBot.org no Facebook

Obrigado e um abraço

Marcelo

Neste projeto, vamos desarmar um carrinho de controle remoto, substituindo sua eletrônica por um microprocessador Arduino controlado por dispositivo Android.

Continue lendo...