Nous continuons à examiner le cours en ligne gratuit Construire des robots et d'autres appareils sur Arduino. Des feux de circulation aux imprimantes 3D (avis précédents: semaine 1 , semaine 2 )
Troisième semaine
Bonjour à tous! Vous êtes-vous déjà demandé ce qui pouvait être commun entre Valley et la barrière?

Au minimum, ce sont tous les deux des robots .
Avant de m'inscrire à un cours de robotique du MIPT, j'imaginais les robots presque exclusivement
Mais il s'est avéré que la définition des robots est beaucoup plus large:
Un robot est un appareil automatique créé sur le principe d'un organisme vivant, conçu pour effectuer la production et d'autres opérations, qui fonctionne selon un programme prédéfini et reçoit des informations sur le monde extérieur à partir de capteurs, le robot effectue indépendamment la production et d'autres opérations généralement effectuées par l'homme. Dans le même temps, le robot peut à la fois communiquer avec l'opérateur (en recevoir des commandes) et agir de manière autonome.
Comme vous pouvez le voir, la définition est beaucoup plus large que mon idée stéréotypée de ce qu'est un robot.
Au cours de la troisième semaine, en plus de certaines nouvelles fonctionnalités de l'environnement de programmation, nous apprendrons à travailler avec les télémètres , l' infrarouge et les ultrasons , ainsi qu'à interagir avec l'environnement extérieur à l'aide de servomoteurs . Tout d'abord.
Que s'est-il passé selon le résultat de la troisième semaine Permettez-moi de vous rappeler qu'au cours de la deuxième semaine de cours, nous avons examiné la connexion des capteurs les plus simples - une photorésistance et une thermistance. Ils ont été disposés de la manière la plus simple - lorsque l'environnement a changé, ils ont changé leur résistance et, en conséquence, nous avons pu mesurer la chute de tension sur eux en utilisant l'Arduino et comprendre que les conditions externes ont changé. Nous avons également appris à afficher des informations à l'aide d'indicateurs LED et de la piézodynamique.
Cette semaine, nous étudions les télémètres - un appareil qui vous permet de déterminer la distance d'un objet ou d'un obstacle.

Le télémètre à ultrasons fonctionne sur le principe de la mesure du temps entre l'envoi d'un signal (impulsion sonore d'une fréquence de 40 kHz) et la réception de sa copie réfléchie.

Dans le capteur infrarouge , le signal réfléchi (un faisceau dans le spectre infrarouge) passe à travers l'objectif vers une cellule photoélectrique sensible à la position, qui change sa conductivité en fonction de l'endroit où le faisceau est reçu.
Peut-être que le lecteur sera intéressé par la raison pour laquelle deux capteurs peuvent être nécessaires pour faire la même chose? Tout dépend de la portée du capteur, de sorte que le capteur infrarouge ne convient pas pour mesurer la distance à des surfaces absorbant la lumière ou transparentes, car il est basé sur la lumière. D'un autre côté, le télémètre à ultrasons ne convient pas pour déterminer la distance par rapport aux surfaces absorbant le son, en particulier moelleuses :) De plus, les capteurs infrarouges ont une plus petite plage de distances mesurées (par exemple, 4-30, 10-80 ou 80-150 cm), même s'ils sont bon marché le télémètre détermine des distances de 2 à 400 cm. Seul le télémètre à ultrasons s'est avéré être dans mon appareil, donc je ne l'ai utilisé que pour des expériences.

Qu'est-ce qu'un servomoteur ? Il s'agit d'un petit moteur électrique qui est combiné avec un potentiomètre et un circuit de commande. En appliquant un signal PWM à l'entrée du servomoteur, nous pouvons définir l'angle selon lequel il doit tourner et maintenir cette position. En règle générale, l'angle de rotation maximal est de 180 degrés, mais il existe des servomoteurs avec des angles de 120 à 270 degrés.
Ayant suffisamment joué avec le servomoteur et le télémètre à ultrasons séparément, j'ai commencé à penser quel appareil assembler cette semaine. La décision est venue soudainement lorsque je suis sorti du parking souterrain du centre commercial. Un système de sortie avec une barrière et un feu de circulation a été organisé à la sortie, que j'ai décidé de simuler.
Pour construire cet appareil, j'ai utilisé des éléments du concepteur, préservés de l'école.


Étant donné que l'alimentation de l'ordinateur n'était clairement pas suffisante, la carte a été périodiquement redémarrée, par conséquent, dans la version finale, une batterie externe a été utilisée pour l'alimentation.

En fait, comment fonctionne notre modèle simplifié du système de débit:
- Après l'allumage, le feu rouge s'allume, la barrière est mise en position fermée. Le système attend l'appui sur un bouton (simulation de la lecture d'une passe).
- Après avoir appuyé sur le bouton, le feu vert s'allume et la barrière s'ouvre. Le système attend que le télémètre soit inférieur à une certaine valeur (déplacement du véhicule).
- Après que le véhicule a franchi le signal du télémètre, le feu rouge s'allume à nouveau et la barrière se ferme. Le système passe à nouveau en mode veille.
Dans l'environnement Fritzing, le schéma est le suivant:

Code source#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(); }
Démonstration du fonctionnement du dispositif assemblé
Pour résumer. Cette semaine, nous avons appris à travailler avec des télémètres, ainsi qu'à contrôler un servo variateur. Ces éléments sont à la base de nombreux robots à roues ou à pied, ainsi que de nombreux manipulateurs, offrant donc un large espace de créativité.
Avis précédents :
Et un lien vers le cours: Construire des robots et autres appareils sur Arduino. Du feu de circulation à l'imprimante 3D