Um robô se constitui de quatro componentes principais: os motores para dar movimento, a mecânica para a sua estrutura, sensores para fazê-lo reagir ao ambiente, e o programa para relacionar e gerenciar estes componentes e assim criar a funcionalidade desejada.
Os sensores são importantes quando se pretende dar um certo nível de autonomia ao robô. Veremos agora como utilizá-los.
Introdução aos sensores
Um sensor serve para medir uma variável física (velocidade, ângulo, temperatura, etc.). Existe uma diversidade de sensores, alguns passivos, outros ativos (precisam de alimentação elétrica). Neste tutorial, veremos o caso de um sensor de luminosidade, mas o nosso exemplo pode ser aplicado a outros tipos de sensores.
Este tutorial se aplica para sensores:
Passivos:
- fotorresistores (sensores de luminosidade)
- sensores de vibração
- botões de pressão
Ativos:
- sensores infravermelhos
- sensores de ultrassom
Esquema de ligação
Os sensores podem ter diferentes montagens, sobretudo em função do número de ligações necessárias. Em geral, eles têm dois ou mais pinos de conexão (câmera). O sensor é ligado ao Vin/GND e a um ou mais canais analógicos da placa Arduino. Para criar o terceiro canal no caso de sensores passivos, é preciso adicionar uma resistência para ler a tensão nos seus terminais.
Código básico para leitura dos valores
Dependendo do tipo de sensor, ele pode devolver dois tipos de informação sob a forma de tensão elétrica: um estado (alto ou baixo) ou um valor discreto.
Para ler um estado, a função utilizada é digitalRead(). Ela devolve um estado alto (HIGH) ou baixo (LOW), que reflete a tensão aplicada no terminal digital do Arduino (números 0,1,2,etc.).
/*Read digital state*/ // Constants #define DELAY 500 // Delay between two measurements in ms // Parameters const int sensorPin = 2; // Pin connected to sensor //Variables int sensorState; // state from the sensor void setup(void) { Serial.begin(9600); pinMode(sensorPin,INPUT); } void loop(void) { sensorState = digitalRead(sensorPin); if (sensorState == HIGH) { Serial.print(F("Sensor state is HIGH ")); } else { Serial.print(F("Sensor state is LOW ")); } delay(DELAY); }
Para ler um valor discreto, a função a se utilizar é a analogRead(). Ela devolve um valor entre 0 e 1023, reflitindo a tensão lida no terminal analógico do Arduino (números A0,A1,A2,etc.).
/*Read analog signal*/ // Constants #define DELAY 500 // Delay between two measurements in ms // Parameters const int sensorPin = A0; // Pin connected to sensor //Variables int sensorVal; // Analog value from the sensor void setup(void) { Serial.begin(9600); } void loop(void) { sensorVal = analogRead(sensorPin); Serial.print(F("Sensor reading = ")); Serial.println(sensorVal); // the analog reading delay(DELAY); }
Aplicação
- Medição de temperatura e umidade com o sensor DHT11
- Medição de temperatura com o sensor LM35
- Detecção de obstáculos com o sensor HC-SR04
- Medição de luminosidade com fotorresistência
Retrouvez nos tutoriels et d’autres exemples dans notre générateur automatique de code
La Programmerie