Revisão do curso on-line sobre arduino / robótica do MIPT (terceira semana)

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


máquinas humanóides

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:


  1. 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).
  2. 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).
  3. 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("Initialize gate"); gate.attach(GATE_PIN); gate.write(CLOSE); //     Serial.println("Setup pins"); 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"); 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("Distance is :" + String(distance)); return distance; } // ,    bool waitCar() { while (getDistance() > SENSOR_THR) { delay(10); } while (getDistance() <= SENSOR_THR) { delay(10); } } void loop() { Serial.println("Wait button"); while (digitalRead(BUTTON_PIN)) { delay(10); } Serial.println("Light green"); light(GREEN); Serial.println("Open gate"); gateSet(OPEN); Serial.println("Wait for car"); waitCar(); Serial.println("Light red"); light(RED); Serial.println("Close gate"); gateSet(CLOSE); Serial.println("End loop"); } 

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

Source: https://habr.com/ru/post/pt403841/


All Articles