Pular para o conteúdo principal

Grove Ultrasonic Sensor (SMS812)

Introdução

O Grove Ultrasonic Sensor (SMS812) é um sensor de medição de distância em miniatura e ultrabaixo consumo de energia. O Grove Ultrasonic Sensor (SMS812) é baseado no princípio de tempo de voo (ToF) ultrassônico e é projetado com acústica, eletrônica e algoritmos relacionados. A medição de distância de alta precisão é alcançada através da diferença de energia dos sinais de eco ultrassônico na superfície de diferentes materiais, e ele fornece informações de distância em nível de milímetro e o valor de intensidade de energia de eco, e também pode fornecer bits de sinalização para distinguir materiais macios e duros. Além disso, pode ser usado em robôs de limpeza para identificar materiais do piso e medir distâncias dentro de um determinado alcance. Ele possui tamanho reduzido e é fácil de instalar.

Aplicações

  • O robô de limpeza reconhece os materiais macios e duros no chão
  • Robô de serviço doméstico ou aspirador robô para obter informações sobre o piso
  • Detecção de nível de impressora 3D

Características

  • Precisão de medição em nível de milímetro, ótima estabilidade de medição
  • Reconhece materiais macios e duros e fornece informações de E/S
  • Distância de detecção de até 20–50 mm e área cega pequena
  • Suporte a Arduino

Visão geral de hardware

  1. A estrutura deste sensor é cilíndrica e feita por moldagem por injeção de plástico.
  2. As dimensões na figura acima estão em milímetros.

Esta interface é um conector tipo plugue PH1.0-4P. E a definição dos pinos é a seguinte:

PinTypeDescriptionDefaultsData stream
GNDPower supplyNegativo0V
TxSaídaSaída da porta serial do sistemaRadar para periféricos
RxEntradaEntrada da porta serial do sistemaPeriféricos para radar
VCCPower supplyPositivo3.3V

Primeiros Passos

Preparação de hardware

Esta rotina apresentará o uso deste radar ultrassônico usando o XIAO SAMD21 como controle principal. Para facilitar a fiação, também usaremos a placa de expansão Grove. Você pode escolher uma de acordo com suas necessidades reais.

XIAO SAMD21Grove Base para XIAOGrove Ultrasonic Sensor (SMS812)

Em seguida, conecte o radar ultrassônico à interface UART do XIAO.

Visão geral da biblioteca Arduino

dica

Se esta é a sua primeira vez usando Arduino, recomendamos fortemente que você consulte Getting Started with Arduino ou veja o simples tutorial abaixo:

O botão abaixo levará você diretamente à nossa biblioteca de programas Arduino para o Grove Ultrasonic Sensor (SMS812).


Função

Antes de começarmos a desenvolver um sketch, vamos analisar as funções disponíveis da biblioteca.

  • void setIOMode() —— Esta função é usada para configurar o radar no modo IO, que é usado principalmente para detectar o material-alvo.

  • void setUARTMode() —— Esta função é usada para configurar o radar no modo UART; no modo UART o radar irá reportar ativamente informações de distância e material.

  • void setUARTREQMode() —— Esta função é usada para configurar o radar no modo UART REQ, no qual as informações de distância e material só podem ser consultadas enviando um comando de consulta.

  • void checkUARTREQ(int delaytime = 0, bool showSwitch = true) —— Esta função é usada no modo UART REQ para consultar o material detectado e a distância.

    Parâmetros de entrada

    • delaytime: O valor padrão é 0. Este parâmetro controla o tempo em milissegundos para o envio do comando de consulta.
    • showSwitch: O padrão é ligado. Este parâmetro controla se o quadro de dados original é impresso.
  • bool getFrame(bool showSwitch = true) —— Esta função é usada para obter o quadro de dados original.

    Parâmetros de entrada

    • showSwitch: O padrão é ligado. Este parâmetro controla se o quadro de dados original é impresso.
  • bool parseDatagram(bool showSwitch = false) —— Esta função é usada para analisar o quadro de dados original.

    Parâmetros de entrada

    • showSwitch: O padrão é desligado. Este parâmetro controla se o quadro de dados original é impresso.

Instalação

Como você já baixou a biblioteca em formato zip, abra o seu Arduino IDE, clique em Sketch > Include Library > Add .ZIP Library. Escolha o arquivo zip que você acabou de baixar e, se a biblioteca for instalada corretamente, você verá Library added to your libraries na janela de notificações. Isso significa que a biblioteca foi instalada com sucesso.

Exemplo com XIAO

Passo 1. Você precisa instalar o software Arduino.

Passo 2. Inicie o aplicativo Arduino.

Passo 3. Selecione o modelo da sua placa de desenvolvimento e adicione-o ao Arduino IDE.

  • Se você quiser usar Seeeduino V4.2 para as rotinas posteriores, consulte este tutorial para concluir a adição.

  • Se você quiser usar XIAO SAMD21(Seeeduino XIAO) para as rotinas posteriores, consulte este tutorial para concluir a adição.

  • Se você quiser usar XIAO RP2040 para as rotinas posteriores, consulte este tutorial para concluir a adição.

  • Se você quiser usar XIAO nRF52840 para as rotinas posteriores, consulte este tutorial para concluir a adição.

  • Se você quiser usar XIAO ESP32C3 para as rotinas posteriores, consulte este tutorial para concluir a adição.

  • Se você quiser usar XIAO ESP32S3 para as rotinas posteriores, consulte este tutorial para concluir a adição.

cuidado

Para XIAO nRF52840, selecione Seeed nRF52 mbed-enabled Boards, caso contrário, um erro pode ser reportado ao executar programas.

Passo 4. Instale a biblioteca de código Arduino.

Demo 1: Uso do Modo IO

Este exemplo irá guiá-lo pelo processo de impressão dos bits de sinalização para distinguir materiais macios e duros. Aqui está o código de referência para Arduino:

#include "sms812.h"

const int radarPin = A7;

//#include <SoftwareSerial.h>
// Choose any two pins that can be used with SoftwareSerial to RX & TX
//#define RX_Pin A6
//#define TX_Pin A7

//SoftwareSerial mySerial = SoftwareSerial(RX_Pin, TX_Pin);

// we'll be using software serial
//SMS812_Sensor radar = SMS812_Sensor(&mySerial);

// can also try hardware serial with
SMS812_Sensor radar = SMS812_Sensor(&Serial1);

void setup() {
// put your setup code here, to run once:
Serial.begin(115200);

Serial1.begin(115200);
// mySerial.begin(115200);

pinMode(radarPin, INPUT);

while(!Serial); //When the serial port is opened, the program starts to execute.
Serial.println("Ready");

radar.setIOMode();
}

void loop() {
// put your main code here, to run repeatedly:
int value = analogRead(radarPin); // Read level status of D7 pin
Serial.println(value);
delay(500);
}

Depois de ativar o modo IO, você deve saber que, se o sensor US5 reconhecer o material macio, seu pino TX enviará os bits de sinalização 0x01 para a placa, caso contrário, o material duro é 0x00, então você deve definir o radarPin como A0 (que conecta ao pino TX do sensor) ou o pino que suporta entradas analógicas.

O valor alto acima de 1000 significa reconhecimento de material duro, e o valor abaixo de 20 significa reconhecimento de material macio ou ar.

Então, quando você mover o sensor em frente, verá a saída serial como abaixo:

Demo 2: Uso do Modo UART

Para o modo UART, o radar gera medições a uma taxa de 100 Hz. O formato do telegrama de dados é mostrado na tabela abaixo.

Quadro de cabeçalhoQuadro de comandoQuadro de comprimento de dadosQuadro de dadosQuadro de checksum
0xAA 0xAA0xFD0x04--CS

Os bits de dados ocupam 4 Byte. O primeiro 1 Byte é o bit de sinalização de material, 0 significa material duro e 1 significa material macio. Para materiais macios, será impossível medir a distância. Em seguida, há o valor de distância, que ocupa 2 Byte em milímetros. O último 1 Byte é o valor de intensidade, indicando a força do sinal ultrassônico recebido.

Bit de sinalização de materialValor de distânciaIntensidade
1 Byte2 Byte1 Byte

Neste exemplo, usaremos as funções da biblioteca para analisar os quadros de dados recebidos e imprimir todos os dados de características reportados pelo Sensor ativo via porta serial.

A porta serial de hardware na placa XIAO SAMD21 é o pino de interface UART A6 e A7. Você também pode usar quaisquer dois pinos como serial por software.

#include "sms812.h"

//#include <SoftwareSerial.h>
// Choose any two pins that can be used with SoftwareSerial to RX & TX
//#define RX_Pin A2
//#define TX_Pin A3

//SoftwareSerial mySerial = SoftwareSerial(RX_Pin, TX_Pin);

// we'll be using software serial
//SMS812_Sensor radar = SMS812_Sensor(&mySerial);

// can also try hardware serial with
SMS812_Sensor radar = SMS812_Sensor(&Serial1);

void setup() {
// put your setup code here, to run once:
Serial.begin(115200);

Serial1.begin(115200);
// mySerial.begin(115200);

while(!Serial); //When the serial port is opened, the program starts to execute.
Serial.println("Ready");

radar.setUARTMode();
}

void loop() {
// put your main code here, to run repeatedly:

// Prints only the acquired raw data frames
// radar.getFrame();
// delay(1); //Add time delay to avoid program jam

// Parses the contents of the data frame. If the function parseDatagram is given a true argument, the raw data frame display is enabled.
if(radar.parseDatagram(true)){
if(radar.material == 0x00){
Serial.println("No blankets detected.");
Serial.print("The measured distance is: ");
Serial.print(radar.distance);
Serial.println(" mm");
Serial.print("The ultrasonic signal strength is: ");
Serial.println(radar.strength);
}
}
delay(1); //Add time delay to avoid program jam
}

Depois de fazer o upload do código para a placa, mova o sensor em frente ao material duro (material macio não irá gerar os dados analisados), você poderá ver os dados analisados abaixo:

Demo 3: Uso do Modo UART REQ

Neste exemplo, definimos o parâmetro delaytime para 1000, o que significa que fazemos uma pesquisa de 1 segundo para enviar uma consulta de comando. E o sensor retornará o resultado de medição pela mensagem bruta, cujo comprimento é de 9 bytes.

#include "sms812.h"

//#include <SoftwareSerial.h>
// Choose any two pins that can be used with SoftwareSerial to RX & TX
//#define RX_Pin A2
//#define TX_Pin A3

//SoftwareSerial mySerial = SoftwareSerial(RX_Pin, TX_Pin);

// we'll be using software serial
//SMS812_Sensor radar = SMS812_Sensor(&mySerial);

// can also try hardware serial with
SMS812_Sensor radar = SMS812_Sensor(&Serial1);

void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial1.begin(115200);
pinMode(A7, INPUT);

// mySerial.begin(115200);

while(!Serial); //When the serial port is opened, the program starts to execute.

Serial.println("Ready");

radar.setUARTREQMode();
}

void loop() {
// put your main code here, to run repeatedly:
radar.checkUARTREQ(1000, true); // Check radar information every second. And turn on raw data frame display.

// Parses the contents of the data frame. If the function parseDatagram is given a true argument, the raw data frame display is enabled.
if(radar.material == 0x00){
Serial.println("No blankets detected.");
Serial.print("The measured distance is: ");
Serial.print(radar.distance);
Serial.println(" mm");
Serial.print("The ultrasonic signal strength is: ");
Serial.println(radar.strength);
}
}

Recursos

Suporte Técnico & Discussão de Produto

Obrigado por escolher nossos produtos! Estamos aqui para fornecer diferentes tipos de suporte para garantir que sua experiência com nossos produtos seja a mais tranquila possível. Oferecemos vários canais de comunicação para atender a diferentes preferências e necessidades.

Loading Comments...