Continuamos a revisar o curso on-line gratuito Construindo robôs e outros dispositivos no Arduino. Dos semáforos às impressoras 3D (análises anteriores: semana 1 , semana 2 )
Terceira semana
Olá pessoal! Você já se perguntou o que poderia haver em comum entre Valley e a barreira?

No mínimo, ambos são robôs .
Antes de me matricular em um curso de robótica do MIPT, imaginei robôs quase exclusivamente como
Mas aconteceu que a definição de robôs é muito mais ampla:
Um robô é um dispositivo automático criado com base no princípio de um organismo vivo, projetado para realizar a produção e outras operações, que opera de acordo com um programa predefinido e recebe informações sobre o mundo exterior de sensores; o robô realiza independentemente a produção e outras operações normalmente executadas por seres humanos. Ao mesmo tempo, o robô pode se comunicar com o operador (receber comandos dele) e agir de forma autônoma.
Como você pode ver, a definição é muito mais ampla do que minha ideia estereotipada do que é um robô.
Na terceira semana, além de alguns novos recursos do ambiente de programação, aprenderemos a trabalhar com rangefinders , infravermelho e ultrassom , além de interagir com o ambiente externo usando servomotores . Primeiras coisas primeiro.
O que aconteceu de acordo com o resultado da terceira semana Deixe-me lembrá-lo que, na segunda semana do curso, examinamos a conexão dos sensores mais simples - um fotorresistor e um termistor. Eles foram organizados da maneira mais simples - quando o ambiente mudou, eles mudaram sua resistência e, como resultado, pudemos medir a queda de tensão usando o Arduino e entender que as condições externas mudaram. Também aprendemos a exibir informações usando indicadores LED e piezodinâmica.
Nesta semana, estamos estudando telémetros - um dispositivo que permite determinar a distância a um objeto ou obstáculo.

O telêmetro ultrassônico trabalha com o princípio de medir o tempo entre o envio de um sinal (pulso sonoro com uma frequência de 40 kHz) e o recebimento da cópia refletida.

No sensor infravermelho , o sinal refletido (um feixe no espectro infravermelho) passa pela lente para uma célula fotoelétrica sensível à posição, que altera sua condutividade, dependendo do local onde o feixe é recebido.
Talvez o leitor esteja interessado em saber por que dois sensores podem ser necessários para fazer a mesma coisa? Tudo depende do escopo do sensor, portanto, o sensor infravermelho não é adequado para medir a distância de superfícies transparentes ou de absorção de luz, pois é baseado na luz. Por outro lado, o telêmetro ultrassônico não é adequado para determinar a distância das superfícies que absorvem o som, principalmente as fofas :) Além disso, os sensores infravermelhos têm uma faixa menor de distâncias medidas (por exemplo, 4-30, 10-80 ou 80-150 cm), além de baratas. o telêmetro determina distâncias de 2 a 400 cm. Somente o telêmetro ultrassônico estava no meu aparelho, portanto, usei-o apenas para experimentos.

O que é um servo motor ? Este é um pequeno motor elétrico combinado com um potenciômetro e um circuito de controle. Ao aplicar um sinal PWM na entrada do servomotor, podemos definir o ângulo pelo qual ele deve girar e manter essa posição. Normalmente, o ângulo máximo de rotação é de 180 graus, mas existem servomotores com ângulos de 120 a 270 graus.
Tendo tocado o suficiente com o servomotor e o telêmetro ultrassônico separadamente, comecei a pensar em qual dispositivo montar esta semana. A decisão veio de repente quando saí do estacionamento subterrâneo do shopping. Um sistema de saída com barreira e semáforo foi organizado na saída, que eu decidi simular.
Para construir este dispositivo, usei elementos do designer, preservados dos tempos de escola.


Como a energia do computador claramente não era suficiente, a placa era reiniciada periodicamente; portanto, na versão final, o powerbank era usado como fonte de energia.

Na verdade, como nosso modelo simplificado do sistema de produtividade funciona:
- Depois de ligar, o semáforo vermelho acende, a barreira está na posição fechada. O sistema espera que um botão seja pressionado (simulação da leitura de um passe).
- Depois de pressionar o botão, o sinal de trânsito verde acende e a barreira se abre. O sistema espera que o telêmetro esteja abaixo de um determinado valor (deslocamento do veículo).
- Depois que o veículo cruza o sinal do telêmetro, o sinal de trânsito vermelho acende novamente e a barreira fecha. O sistema entra no modo de espera novamente.
No ambiente Fritzing, o esquema é o seguinte:

Código fonte#include <Servo.h> // #define GATE_PIN 3 #define RED_PIN 4 #define GREEN_PIN 5 #define BUTTON_PIN 6 #define SENSOR_TRIG 11 #define SENSOR_ECHO 12 // #define GREEN 1 #define RED 0 #define CLOSE 1 #define OPEN 0 // , #define GATE_OPEN 180 #define GATE_CLOSE 90 // , #define SENSOR_THR 15 Servo gate; void setup() { Serial.begin(9600); // Serial.println(); gate.attach(GATE_PIN); gate.write(CLOSE); // Serial.println(); pinMode(GREEN_PIN, OUTPUT); pinMode(RED_PIN, OUTPUT); pinMode(BUTTON_PIN, INPUT_PULLUP); pinMode(SENSOR_TRIG, OUTPUT); pinMode(SENSOR_ECHO, INPUT); Serial.println(); light(RED); } // - void gateSet(int state) { if (state == CLOSE) { for (int i = GATE_OPEN; i >= GATE_CLOSE; i--) { gate.write(i); delay(15); } } else { for (int i = GATE_CLOSE; i <= GATE_OPEN; i++) { gate.write(i); delay(15); } } } // void light(int col) { if (col == RED) { digitalWrite(GREEN_PIN, LOW); digitalWrite(RED_PIN, HIGH); } else { digitalWrite(GREEN_PIN, HIGH); digitalWrite(RED_PIN, LOW); } } // / int getDistance() { digitalWrite(SENSOR_TRIG, HIGH); digitalWrite(SENSOR_TRIG, LOW); int distance = pulseIn(SENSOR_ECHO, HIGH) / 54; Serial.println( + String(distance)); return distance; } // , bool waitCar() { while (getDistance() > SENSOR_THR) { delay(10); } while (getDistance() <= SENSOR_THR) { delay(10); } } void loop() { Serial.println(); while (digitalRead(BUTTON_PIN)) { delay(10); } Serial.println(); light(GREEN); Serial.println(); gateSet(OPEN); Serial.println(); waitCar(); Serial.println(); light(RED); Serial.println(); gateSet(CLOSE); Serial.println(); }
Demonstração do funcionamento do dispositivo montado
Para resumir. Nesta semana, aprendemos a trabalhar com rangefinders, além de controlar um servoconversor. Esses elementos são a base de muitos robôs de rodas ou de passeio, além de vários manipuladores, portanto, fornecem um grande espaço para a criatividade.
Comentários anteriores :
E um link para o curso: Construindo robôs e outros dispositivos no Arduino. Do semáforo à impressora 3D