Revisión del curso en línea sobre arduino / robótica del MIPT (tercera semana)

Continuamos revisando el curso gratuito en línea Construyendo robots y otros dispositivos en Arduino. Desde semáforos hasta impresoras 3D (revisiones anteriores: semana 1 , semana 2 )


Tercera semana


Hola a todos! ¿Alguna vez te has preguntado qué podría haber en común entre Valley y la barrera?



Como mínimo, ambos son robots .


Antes de inscribirme en un curso de robótica de MIPT, imaginaba robots casi exclusivamente como


máquinas humanoides

Pero resultó que la definición de robots es mucho más amplia:


Un robot es un dispositivo automático creado según el principio de un organismo vivo, diseñado para llevar a cabo la producción y otras operaciones, que opera de acuerdo con un programa predefinido y recibe información sobre el mundo exterior a través de sensores, el robot realiza de forma independiente la producción y otras operaciones generalmente realizadas por humanos. Al mismo tiempo, el robot puede comunicarse con el operador (recibir comandos de él) y actuar de forma autónoma.

Como puede ver, la definición es mucho más amplia que mi idea estereotipada de lo que es un robot.


En la tercera semana, además de algunas características nuevas del entorno de programación, aprenderemos a trabajar con telémetros , infrarrojos y ultrasonidos , así como a interactuar con el entorno externo mediante servomotores . Lo primero es lo primero.


Lo que sucedió según el resultado de la tercera semana.

Permítame recordarle que en la segunda semana del curso examinamos la conexión de los sensores más simples: un fotorresistor y un termistor. Se organizaron de la manera más simple: cuando el entorno cambió, cambiaron su resistencia y, como resultado, pudimos medir la caída de voltaje en ellos usando el Arduino y entender que las condiciones externas cambiaron. También aprendimos cómo mostrar información usando indicadores LED y piezodinámica.


Esta semana estamos estudiando telémetros, un dispositivo que le permite determinar la distancia a un objeto u obstáculo.



El buscador de rango ultrasónico funciona según el principio de medir el tiempo entre el envío de una señal (pulso de sonido con una frecuencia de 40 kHz) y la recepción de su copia reflejada.



En el sensor infrarrojo , la señal reflejada (un haz en el espectro infrarrojo) pasa a través de la lente a una fotocélula sensible a la posición, que cambia su conductividad dependiendo del lugar donde se recibe el haz.


¿Quizás el lector esté interesado en por qué se pueden necesitar dos sensores para hacer lo mismo? Todo depende del alcance del sensor, por lo que el sensor de infrarrojos no es adecuado para medir la distancia a superficies transparentes o absorbentes de luz, ya que se basa en la luz. Por otro lado, el buscador de rango ultrasónico no es adecuado para determinar la distancia a las superficies de absorción de sonido, en particular esponjoso :) Además, los sensores infrarrojos tienen un rango más pequeño de distancias medidas (por ejemplo, 4-30, 10-80 o 80-150 cm), aunque son incluso baratos el telémetro determina distancias de 2 a 400 cm. Solo el telémetro ultrasónico resultó estar en mi set, por lo tanto, solo lo usé para experimentos.



¿Qué es un servomotor ? Este es un pequeño motor eléctrico que se combina con un potenciómetro y un circuito de control. Al aplicar una señal PWM a la entrada del servomotor, podemos establecer el ángulo por el cual debe girar y mantener esta posición. Típicamente, el ángulo de rotación máximo es de 180 grados, pero hay servomotores con ángulos de 120 a 270 grados.


Después de haber jugado lo suficiente con el servomotor y el buscador de rango ultrasónico por separado, comencé a pensar qué dispositivo ensamblar esta semana. La decisión llegó repentinamente cuando salí del estacionamiento subterráneo del centro comercial. Se organizó un sistema de salida con una barrera y un semáforo en la salida, que decidí simular.


Para construir este dispositivo, utilicé elementos del diseñador, preservados de los tiempos escolares.




Como el poder de la computadora claramente no era suficiente, la placa se reiniciaba periódicamente, por lo tanto, en la versión final, powerbank se usaba para obtener energía.



En realidad, cómo funciona nuestro modelo simplificado del sistema de rendimiento:


  1. Después de encender, se enciende el semáforo en rojo, la barrera se coloca en la posición cerrada. El sistema espera a que se presione un botón (simulación de lectura de un pase).
  2. Después de presionar el botón, se enciende la señal de tráfico verde y se abre la barrera. El sistema espera a que el telémetro esté por debajo de cierto valor (recorrido del vehículo).
  3. Después de que el vehículo cruza la señal del telémetro, la señal de tráfico roja se enciende nuevamente y la barrera se cierra. El sistema vuelve al modo de espera.

En el entorno Fritzing, el esquema es el siguiente:



Código fuente
#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"); } 

Demostración del funcionamiento del dispositivo ensamblado.



Para resumir. Esta semana aprendimos a trabajar con telémetros, así como a controlar un servoaccionamiento. Estos elementos son la base de muchos robots con ruedas o andantes, así como varios manipuladores, por lo tanto, proporcionan un gran espacio para la creatividad.


Comentarios anteriores :



Y un enlace al curso: Construyendo robots y otros dispositivos en Arduino. Del semáforo a la impresora 3D

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


All Articles