Telemetro laser a infrarossi. Robot Sensi: Sensore di distanza IR Sharp GP2Y0A21YK Specifiche del sensore di distanza IR Sharp

Un telemetro laser a infrarossi emette energia in una gamma invisibile all'occhio umano. È un dispositivo laser di Classe 1 regolamentato dalla Food and Drug Administration statunitense, 21 CFR 1040.10-11. Il marchio di conformità FDA del laser è affisso sull'alloggiamento del sistema CMS Wireless. Questa marcatura indica anche il modello, il numero di serie e la data di produzione.

La Classe 1 comprende i laser che, in normali condizioni operative, non possono causare danni all'uomo. In un'installazione normale, una persona può guardare nel raggio laser senza occhiali o con i normali occhiali (non guardare nel raggio laser mentre il sistema è acceso: una precauzione standard).

Il laser rimane nello stato eccitato finché nel software del controller si continuano a selezionare i comandi LASER TEST o START SURVEY. Quando il laser è nello stato eccitato, le distanze e altri dati vengono visualizzati sullo schermo del controller.

Il LED rosso sul pannello di controllo, situato nella scatola del controller, è costantemente acceso quando il sistema è acceso, indipendentemente dal fatto che il laser sia alimentato o meno.

La testina di scansione laser include un telemetro laser e un'unità di acquisizione (Figura 7.2, Figura 7.3).

Figura 7.2 - Testa di scansione

Figura 7.3 - Aspetto della testa di scansione laser

Figura 7.4 - Installazione del VIP in condizioni interrate

Figura 7.5 - Installazione di aste e pali in condizioni sotterranee

Figura 7.6 - Inserimento dello scanner in una cavità in condizioni sotterranee

Tabella 33 – Specifiche

Testa di scansione laser
Campo di misurazione target con riflessione del 20%. 350 m.
Campo di misura rispetto alla parete bianca 650 m
Intervallo dell'angolo di rotazione 0 - 360º
Intervallo dell'angolo di inclinazione 0 – 145º
Precisione della misurazione lineare -+2 cm nell'intervallo di temperatura operativa
Risoluzione 1 cm
Precisione della misurazione angolare -+ 0,3º
Velocità di rotazione massima 21º/s
Lunghezza d'onda 905 nm (nel campo degli infrarossi), 635 nm (nel campo ottico).
Deflessione del raggio laser 5 milioni
Numero massimo di conteggi 100.000 (per ripresa)
Struttura di supporto
Materiali Plastica rinforzata con fibra di carbonio, giunti in polietilene ad alta densità, fascette in acciaio inossidabile.
Lunghezza asta 2-9 metri, regolabile
Numero di sezioni del braccio 5 conici da 2 m ciascuno
Lunghezza dei supporti dell'albero (2 pezzi) 2-5 metri, regolabile
Numero di estensioni del montante 5 (varie lunghezze)
Alimentazione (batterie esterne)
Voltaggio Nominalmente 24 V
Capacità 7,2 Ah, nominale 24 V
Consumo di energia 2,5 A, nominale 24 V
Condizioni esterne
Temperatura di lavoro Telemetro (da - 10º a +50º), puntatore (da 0º a 40º)
Temperatura di conservazione Da –20 a +50º
Umidità dell'aria Da 0 a 95%, senza condensa
Dimensioni
Alimentazione (mm) 270 * 247 * 175
Peso (kg 8.3
Albero (mm) 2290*230*250
Sezione del braccio (mm) 1930*200*250
Peso (kg 44.5
Sicurezza degli occhi
Puntatore 2° grado
Telemetro 1 classe
Dispositivo di inserimento verticale (VIP)
Componenti 25 aste in alluminio (circa 1,5 metri ciascuna)
1 adattatore per testina di scansione
2 sistemi di molle di centraggio
1 cavo di collegamento, circa 41 metri

Il rilevamento CMS viene utilizzato nei casi in cui l'accesso umano è pericoloso e il controllo visivo è impossibile. Il rilievo fornisce una posizione assolutamente accurata dei vuoti legata ad un sistema di coordinate, che a sua volta rende possibile progettare in modo razionale, accurato e corretto l'ulteriore utilizzo o estinzione di questi vuoti.

Il telemetro a infrarossi consente di determinare la distanza dagli oggetti. Questo è il modello GP2Y0A021 di Sharp. Il sensore determina la distanza tramite il raggio di luce riflesso nello spettro infrarosso. Il telemetro può essere utilizzato per evitare ostacoli e spostarsi sul terreno.

L'uscita è un segnale analogico, con un livello di tensione che dipende dalla distanza dal bersaglio nella direzione specificata.

Il sensore è collegato all'elettronica di controllo tramite 3 fili. Quando ci si connette ad Arduino sarà estremamente comodo utilizzare Troyka Shield. Nel kit è compreso un cavo per il collegamento.

Attenzione! La piedinatura di alimentazione per questo sensore può variare. Prima di accendere il modulo, familiarizzare con le funzionalità di collegamento dei moduli DFRobot.

Per installare in modo affidabile il telemetro ovunque, è disponibile un supporto speciale.

Caratteristiche

  • Tensione di alimentazione: 4,5–5,5 V
  • Consumo di corrente: 30–40 mA
  • Intervallo di distanza: 10–80 cm

Restrizioni

Poiché il dispositivo funziona utilizzando la luce, il sensore non è adatto per determinare la distanza da oggetti che assorbono la luce. Il telemetro non percepirà nemmeno una superficie trasparente, come plastica o plexiglass. Per determinare le distanze in tale ambiente è adatto un telemetro a ultrasuoni URM37 o HC-SR04.

Questo telemetro a infrarossi ha davanti a sé una piccola zona morta: 10 cm.Se hai bisogno di visualizzare ostacoli a distanze più brevi e la distanza estrema non è così importante, considera un telemetro per distanze di 4-30 cm sulla stessa linea. Se il tuo dispositivo ha bisogno di vedere più lontano, presta attenzione a un telemetro per distanze di 20-150 cm. Puoi ottenere una maggiore flessibilità combinando sensori con portate diverse.

Il sensore di distanza a infrarossi Sharp GP2Y0A è una scelta popolare per una varietà di progetti basati su Arduino che richiedono una misurazione accurata della distanza.

I sensori Sharp utilizzano un diodo emettitore di luce (LED) a infrarossi (IR) con una lente che emette uno stretto raggio di luce. Il raggio riflesso dall'oggetto viene diretto attraverso un'altra lente verso una fotocellula sensibile alla posizione (Position-Sensitive Detector, PSD). La sua conduttività dipende dalla posizione del raggio incidente sul PSD. La conduttività viene convertita in tensione e, ad esempio, digitalizzandola con un convertitore analogico-digitale in un microcontrollore, è possibile calcolare la distanza.

L'uscita del sensore di distanza a infrarossi Sharp è inversamente proporzionale: all'aumentare della distanza, il suo valore diminuisce lentamente. Visualizzazione del grafico della relazione tra distanza e tensione.

I sensori, a seconda del tipo, hanno limiti di misurazione entro i quali la loro uscita può essere considerata affidabile. La misurazione della distanza reale massima è limitata da due fattori: la riduzione dell'intensità della luce riflessa e l'incapacità del PSD di rilevare cambiamenti minori nella posizione del raggio immagine. In generale, il grafico tra distanza e tensione non è lineare, ma entro distanze accettabili, il grafico dell'inverso della tensione di uscita e della distanza si avvicina abbastanza alla linearità che è abbastanza facile usarlo per ottenere una formula per convertire la tensione in distanza . Per trovare una formula del genere, è necessario inserire i punti di questo grafico in un programma per l'elaborazione dei dati tabulari e creare un nuovo grafico da essi. In un programma di elaborazione dati tabulari, è possibile calcolare automaticamente una linea di tendenza basata sui punti del grafico. Ad esempio, per il sensore GP2Y0A021YK0F:


Specifiche del telemetro a infrarossi Sharp

Voltaggio operativo: 4,5 - 5,5 V; Consumo massimo di corrente: 40 mA (tipico - 30 mA); Tipo di segnale di uscita: analogico; Tensione differenziale maggiore del campo di riconoscimento della distanza: 2,0 V; Tempo di risposta: 38 ± 10 ms Campo operativo: sensore GP2Y0A41SK0F: 4 - 30 cm; Sensore GP2Y0A021YK0F: 10 cm - 80 cm; Sensore GP2Y0A02YK0F: 20 cm - 150 cm;

Esempio di utilizzo

Creiamo un esempio di conteggio dei visitatori del negozio. Semplifichiamo il problema supponendo che l'ingresso avvenga attraverso una porta stretta, e che ci siano porte diverse per l'entrata e l'uscita. All'ingresso posizioniamo un telemetro a infrarossi Sharp GP2Y0A21YK0F (20-150 cm) in modo che al passaggio di una persona le letture abbiano un valore di 10 - 50 cm, in assenza di persone 80 cm Quando viene rilevato un visitatore aumentiamo il contatore dei visitatori. Visualizziamo i dati sul display grafico del Nokia 5110. Per visualizzare le informazioni dai sensori, utilizzeremo il display LCD del Nokia 5110. Si tratta di un display grafico monocromatico con una risoluzione di 84x48 pixel. Il display del Nokia 5110 viene fornito su una scheda abbinata a un controller PCD8544 e un connettore pin. Il consumo energetico del display consente di alimentarlo dall'uscita +3,3 V della scheda Arduino.

Per il progetto avremo bisogno delle seguenti parti:
Scheda ArduinoUno
Mezza tagliere
sensore di distanza a infrarossi Sharp GP2Y0A21YK0F
Display del Nokia 5110
fili di collegamento
Montiamo il circuito mostrato in figura.

Lanciamo l'IDE di Arduino. Creiamo un nuovo schizzo e aggiungiamo il seguente contenuto: // Sensore di distanza a infrarossi // sito web // collegamento di librerie per lavorare con il display Nokia #include #include // Nokia 5110 // pin 3 - Uscita orologio seriale (SCLK) // pin 4 - Uscita dati seriale (DIN) // pin 5 - Selezione dati/comandi (D/C) // pin 6 - Selezione chip LCD (CS) // pin 7 - Reset LCD (RST) Adafruit_PCD8544 display = Adafruit_PCD8544 (3, 4, 5, 6, 7); // pin analogico per collegare l'uscita del sensore Vo const int IRpin = A0; // variabili int valore1; // per memorizzare valore analogico visitatori di lunga data senza segno; // tempo di viaggio int count_visitors=0; // variabile conteggio visitatori void setup() ( // avvia la porta seriale Serial.begin(9600); Serial.println("start"); // inizializza il display display.begin(); // imposta il contrasto dello sfondo di lo schermo display.setContrast (60); display.clearDisplay(); // cancella lo schermo display.setTextSize(1); // dimensione del carattere display.setTextColor(BLACK); // colore // schermata iniziale display.setCursor(5 ,15); display.print ("Visitatori: 0"); display.display(); delay(2000); ) void loop() ( // ottiene il valore livellato e lo converte nel valore di tensione1=irRead(); if (value1>50) // corregge il passaggio ( timevisitors=millis(); while(irRead()>50) ; if(millis()-timevisitors>300) // > tempo di viaggio minimo ( Serial.println("passage! !!"); count_visitors=count_visitors+1 ; // aumenta il contatore // output sul monitor della porta seriale Serial.print("count_visitors="); Serial.println(count_visitors); // output sul display display.clearDisplay (); display.setCursor(5,15); display .print("Visitatori: "); display.print(count_visitors); display.display(); ) ) ritardo(200); ) // Media di più valori per livellare int irRead() ( int averaging = 0; // variabile per sommare i dati // Ricezione di 5 valori per (int i=0; i<5; i++) { value1 = analogRead(IRpin); // значение сенсора переводим в напряжение float volts = analogRead(IRpin)*0.0048828125; // и в расстояние в см int distance=32*pow(volts,-1.10); averaging = averaging + distance; delay(55); // Ожидание 55 ms перед каждым чтением } value1 = averaging / 5; // усреднить значения return(value1); } Работать с сенсорами SHARP очень просто - достаточно подключить к нему питание и завести вывод Vo на аналоговый вход Arduino. Значение получаемой функции analogRead представляет собой целое число от 0 до 1023. Таким образом, чтобы узнать напряжение на выходе сенсора, необходимо значение на аналоговом входе Arduino умножить на 0,0048828125 (5 В / 1024). Расстояние вычисляем по формуле distance=volts*0.0001831-0.003097. При чтении данных, при каждой итерации цикла, иногда приходят разные значения сигнала при одном и том же расстоянии. Датчик передает сигнал на аналоговый порт с некоторой амплитудой и иногда в момент считывания данных значение оказывалось отличным от нормального, потому что итерация приходится на провал. Для сглаживания значений, получаемых с дальномера используем функцию irRead(). Датчик обнаруживает попадание объекта в дверной проем. Далее ожидаем окончания прохода. Если это время больше минимального времени прохода (отсечение взмаха руки, пролет предмета и пр.) инкрементируем счетчик посетителей и выводим данные в последовательный порт и на дисплей. Для работы с дисплеем Nokia 5110 нам понадобятся Arduino библиотеки Adafruit_GFX и Adafruit_PCD8544.

Domande frequenti Domande frequenti

1. Sul display non viene visualizzata alcuna informazione
  • Verificare che tutti i cavi siano collegati correttamente, secondo lo schema in Figura 5.
2. Il sensore di distanza non funziona
  • Controllare il collegamento del modulo Sharp;
  • Controllare il rilevamento del sensore nel monitor della porta seriale.

In questo articolo esamineremo la connessione e il funzionamento del sensore di distanza IR SHARP GP2Y0A02YK0F.
A differenza dello stesso, questo sensore ha un campo di misurazione molto più modesto, ma ha comunque una serie di utili proprietà distintive. Ad esempio, questo sensore consente di misurare la distanza anche attraverso superfici trasparenti (perdendo però la precisione delle letture, ma comunque).

Collegamento del sensore:

GND a uno qualsiasi dei pin GND --- Arduino

FUORI a uno qualsiasi degli ingressi analogici di Arduino (negli esempi è collegato ad A0)

VCC a +5 volt su arduino

Principali caratteristiche tecniche:

Campo di misurazione della distanza: da 20 a 150 cm

Uscita analogica

Dimensioni: 29,5x13x21,6 mm

Consumo di corrente: 33 mA

Tensione di alimentazione: da 4,5 a 5,5 V

Deve essere decompresso e aggiunto alla cartella "librerie" nella cartella IDE di Arduino. Non dimenticare di riavviare l'ambiente se l'IDE era aperto quando lo hai aggiunto.

Cosa ha di speciale questa libreria e perché se ne consiglia l'uso? La risposta è semplice e risiede nel principio del suo funzionamento. Per misurare la distanza si utilizzano numerose misurazioni, dalle quali si scartano quelle errate, molto diverse da quelle vicine. Secondo gli autori, il 12% di tutte le letture contribuisce per il 42% all'errore sul valore della distanza finale, se le misurazioni errate non vengono scartate.

Passiamo al codice del programma - un esempio di funzionamento con un sensore (l'esempio è adatto anche per il sensore GP2Y0A21Y; nel codice dovrai modificare il valore del modello in 1080):

Codice d'esempio

#includere #define ir A0 //pin a cui è collegato il sensore. Decisamente analogico!#definire modello 20150 //modello del sensore. 1080 per GP2Y0A21Y, 20150 per GP2Y0A02Y SharpIR SharpIR (ir, modello); vuoto impostare () { Seriale.begin(9600); ) vuoto ciclo continuo() ( ritardo (2000); unsigned long pepe1=millis (); // segna l'ora prima dell'inizio delle misurazioni int dis=SharpIR .distance(); // ottiene la distanza dal sensore Seriale.print("Distanza media: "); // visualizza la distanza dal monitor della porta Seriale.println(dis); unsigned long pepe2=millis()-pepe1; // conta il tempo impiegato nella misurazione Seriale.print("Tempo impiegato (ms): "); // e visualizzarlo Seriale.println(pepe2); )

Telemetri

In questo tutorial daremo uno sguardo più da vicino ai telemetri.

Telemetro ad ultrasuoniHC-SR04

Oggi (2016) su AliExpress non costa più di 1 dollaro.

Il sensore ha 4 uscite:

  • Vcc – Questo pin fornisce alimentazione a 5 V.
  • Trig – È necessario applicarne uno logico a questo pin per 10 μs in modo che il telemetro emetta un'onda ultrasonica.
  • Eco – Dopo il ritorno dell'onda ultrasonica, a questo contatto verrà applicata un'onda logica per un tempo proporzionale alla distanza dall'oggetto
  • Gnd – Questo pin si collega a terra.

Telemetro a ultrasuoni: funziona secondo il principio del “pipistrello”. Emette un'onda ultrasonica e conta il tempo necessario affinché l'onda ritorni. Conoscendo la velocità del suono e il tempo impiegato dall'onda per ritornare, puoi calcolare la distanza dall'oggetto.

Utilizzando questo telemetro, assembleremo un piccolo sensore di parcheggio, che può essere ingrandito e assemblato in un dispositivo già pronto per parcheggiare un'auto. Ti mostrerò anche come utilizzare il telemetro per controllare i tuoi dispositivi.

Telemetro

Costruiamo un semplice diagramma per capire come funziona il telemetro.

Codice

#define ECHO 13 #define TRIG 12 void setup() ( pinMode(ECHO, INPUT); // ECHO deve essere impostato su uno logico pinMode(TRIG, OUTPUT); // Da TRIG leggeremo il valore della distanza Serial.begin (9600) ; //Stabilisci una connessione alla porta seriale ) void loop() ( //Invialo a TRIG HIGH e immediatamente LOW digitalWrite(TRIG, HIGH); digitalWrite(TRIG, LOW); //Leggi la lunghezza del segnale in entrata in microsecondi int dist = pulsaIn( ECHO, HIGH) / 54; // Divide per 54 per convertire le letture in cm Serial.println(dist); // Emette le letture del telemetro in Serial delay(300); // Noi attendere un po' in modo che l'occhio abbia il tempo di distinguere le letture)

Spiegazioni

impulsoIn(ECO,ALTO);- Utilizzando questa funzione, abbiamo contato il tempo per il quale il pin ECHO è impostato su HIGH. Questa volta viene conteggiato in microsecondi.

In generale, pulsaIn(); può essere scritto così:

pulsaIn(pin, valore, timeout);

Spillo– Pin su cui verrà calcolato il tempo.

Senso– Livello del segnale atteso al quale verrà effettuato il conteggio. ALTO o BASSO.

Tempo scaduto– tempo in microsecondi durante il quale è previsto l'arrivo del segnale. Allo scadere del timeout, il valore restituito dalla funzione verrà impostato su zero.

Quindi, abbiamo capito il principio di funzionamento del telemetro. È ora di realizzare sensori di parcheggio per macchinine.

Parktronic

Lo schema del sensore di parcheggio è simile al seguente:

#define ECHO 3 // Ricevere un segnale dal telemetro #define TRIG 2 // Fornire un segnale al telemetro #define COUNT 5 // Numero di LED #define BUZZ 6 // Pin per il cicalino #define FIRST 9 // Primo pin dei LED #define dist_setup 1 //Fattore di accordatura #define frequenza 5000 void setup() ( for(int i = 0; i< COUNT; ++i) //Обозначаем светодиоды как выход... { pinMode(i+FIRST, OUTPUT); } pinMode(ECHO, INPUT); //...ECHO как вход... pinMode(TRIG, OUTPUT); //...TRIG как выход... pinMode(BUZZ, OUTPUT); //...пищалку как выход Serial.begin(9600); //Установим соединение с Serial } void loop() { digitalWrite(TRIG, HIGH); //Подаем команду на дальномер digitalWrite(TRIG, LOW); int dist = pulseIn(ECHO, HIGH) / 54; //Измеряем расстояние до объекта dist = constrain(dist, 2, 60); //Полученные значения загоняем в диапазон от 2 до 60 //Сравниваем полученные показания и включаем нужный режим if (dist < 10) { all_led_on(); } else if (dist < 20 * dist_setup) { four_led_on(); } else if (dist < 30 * dist_setup) { three_led_on(); } else if(dist < 40 * dist_setup) { two_led_on(); } else if(dist < 50 * dist_setup) { one_led_on(); } else { for(int i = 0; i < COUNT; ++i) { digitalWrite(i+FIRST, LOW); } noTone(BUZZ); } } // Описание режимов void one_led_on() { digitalWrite(9, LOW); digitalWrite(10, LOW); digitalWrite(11, LOW); digitalWrite(12, LOW); digitalWrite(13, HIGH); tone (BUZZ, frequency, 1000); delay(1000); } void two_led_on() { digitalWrite(9, LOW); digitalWrite(10, LOW); digitalWrite(11, LOW); digitalWrite(12, HIGH); digitalWrite(13, HIGH); tone(BUZZ, frequency, 700); delay(700); } void three_led_on() { digitalWrite(9, LOW); digitalWrite(10, LOW); digitalWrite(11, HIGH); digitalWrite(12, HIGH); digitalWrite(13, HIGH); tone(BUZZ, frequency, 400); delay(400); } void four_led_on() { digitalWrite(9, LOW); digitalWrite(10, HIGH); digitalWrite(11, HIGH); digitalWrite(12, HIGH); digitalWrite(13, HIGH); tone(BUZZ, frequency, 200); delay(200); } void all_led_on() { for(int i = 0; i < COUNT; ++i) { digitalWrite(i+FIRST, HIGH); } tone(BUZZ, frequency, 5000); delay(5000); }

Spiegazioni

Parktronic è dotato di LED e indicazione sonora. Quando un oggetto si avvicina entro le distanze specificate, si sentono segnali acustici più frequenti e si accendono più LED.

dist_ impostare – si tratta di un coefficiente con il quale è possibile regolare la distanza prima che si attivino i sensori di parcheggio.

Per me è uguale a uno. Se è necessario ridurre la distanza, è necessario ridurre il coefficiente, ma sarà sotto forma di 0.xxx. Per fare ciò viene introdotta una variabile di tipo float.

È anche possibile modificare la frequenza del cigolio. Per fare ciò è necessario modificare il valore frequenza . Ma dovresti ricordare che l'emettitore piezoelettrico emette un segnale acustico terribile. Estremamente. E mi sembra che ti scoraggerà rapidamente dall'utilizzarlo per più di 5 minuti.

Un'alternativa è abbassare la frequenza a 20 Hz o collegare, ad esempio, un normale altoparlante da 8 ohm.

Parola d'ordine

Ora proviamo a creare un codice segreto che accenda i LED. E se includi un servomotore con una serratura nel circuito, puoi creare una serratura per una porta o un cassetto con una password.

Presta attenzione al diagramma.

Codice

//Pin del primo telemetro #define TRIG1 12 #define ECHO1 13 //Pin del secondo telemetro #define TRIG2 10 #define ECHO2 11 //LED #define FIRST 3 #define COUNT 5 //Pulsante di reset #define RESET 2 / /Variabili password int chiave1; chiave intera2; chiave intera3; void setup() ( //Designazione dei LED come uscita for(int i = 0; i< COUNT; i++) { pinMode(i+FIRST, OUTPUT); } //Обозначение пинов на дальномерах pinMode(TRIG1, OUTPUT); pinMode(ECHO1, INPUT); pinMode(TRIG2, OUTPUT); pinMode(ECHO2, INPUT); pinMode(RESET, INPUT_PULLUP); } void loop() { //Подача сигнала на дальномеры digitalWrite(TRIG2, HIGH); digitalWrite(TRIG2, LOW); int dist2 = pulseIn(ECHO2, HIGH,3000) / 54; digitalWrite(TRIG1, HIGH); digitalWrite(TRIG1, LOW); int dist1 = pulseIn(ECHO1, HIGH) / 54; //Дополнительная индикация "ввода" символов if(dist1 < 10 && dist2 < 10) { digitalWrite(5, HIGH); delay(100); } if(dist2 >20 && dist2< 25) { digitalWrite(4, HIGH); delay(100); } if(dist1 >20 && dist1< 25) { digitalWrite(6, HIGH); delay(100); } //Код пароля + индикация "ввода" символов if(dist2 >10 && dist2<15) { key1 = 1; digitalWrite(3, HIGH); delay(100); } if(dist1 >10 && dist1< 15) { digitalWrite(7, HIGH); delay(100); key1 = 0; } if(dist1 >20 && dist1< 25 && key1 == 1) { key2 = 1; } else if(dist2 >20 && dist2<25 || key1 == 0) { key1 = 0; key2 = 0; } if(dist1 < 10 && dist2 < 10 && key2 == 1) { key3 = 1; } if(key3 == 1) { for(int i = 0; i < COUNT; i++) { digitalWrite(i + FIRST, HIGH); } } if(key3 == 0) { for(int i = 0; i < COUNT; i++) { digitalWrite(i + FIRST, LOW); } } //Сброс пароля boolean res = digitalRead(RESET); if(res == 0) { key1 = 0; key2 = 0; key3 = 0; } }

Spiegazioni

Per accendere tutti e cinque i LED è necessario conoscere la sequenza delle azioni da eseguire. Ecco un compito per te: "Nonostante le spiegazioni di seguito, determina quale sequenza di azioni deve essere eseguita affinché tutti e cinque i LED si accendano"

Questo è un compito fattibile se hai letto la prima parte del corso e hai capito come funziona la funzione Se().

Fatto? Se sì, ben fatto, altrimenti quasi ben fatto.

Ci sono tre “caratteri di input” in totale: da 0 a 10, da 10 a 15 e da 20 a 25.

Lo stato da 0 a 10 si attiva se si avvicinano entrambe le mani a una distanza compresa tra 0 e 10 cm su entrambi i telemetri. In tal caso il LED giallo si accenderà.

Gli stati da 10 a 15 si accenderanno quando avvicini la mano al telemetro destro o sinistro ad una distanza compresa tra 10 e 15 cm. Il LED più a sinistra per la mano sinistra e il LED più a destra per la mano destra ti diranno che questa azione è stata completato.

Lo stato da 20 a 25 si accende nel momento in cui la distanza tra la mano e uno dei telemetri è compresa tra 20 e 25 cm, di questo verrete informati dal secondo LED da sinistra e dal secondo da destra per il mano sinistra e destra, rispettivamente.

Vale la pena notare che la sequenza deve essere seguita rigorosamente.

  • Porta la mano DESTRA a una distanza compresa tra 10 e 15.
  • Dopo che il LED più a destra si è acceso, porta la mano SINISTRA a una distanza compresa tra 20 e 25. Tutto questo viene fatto senza modificare la posizione della mano destra.
  • Dopo che viene visualizzato il secondo LED da sinistra, spostare la mano SINISTRA verso sinistra in modo che il LED più a sinistra non si accenda, altrimenti sarà necessario inserire prima il codice. Avvicina la mano DESTRA ad una distanza da 0 a 10, e avvicina la mano SINISTRA alla stessa distanza, senza toccare la distanza da 10 a 15
  • I LED dovrebbero essere accesi e non rispondere alle tue azioni.
  • Premere il pulsante RESET per reimpostare la password. I LED dovrebbero spegnersi.

Ogni mossa sbagliata reimposta la password e deve essere inserita nuovamente. Potrebbe non funzionare la prima volta, ma dopo alcuni minuti di allenamento sono sicuro che tutto funzionerà e i LED si accenderanno.

Dopo che sei riuscito ad accendere tutti i LED, puoi metterti alla prova e modificare il codice in modo che la sequenza sia diversa, a tua discrezione. Puoi creare più "simboli" oppure lasciare gli stessi, ma creare ciascun simbolo utilizzando due telemetri. Questo sarà un compito che dovrai decidere da solo.

Telemetro a infrarossiAffilato

Con questi telemetri tutto è ancora più semplice. Devono essere collegati come tutti i sensori analogici. Ed è possibile anche senza resistenza da 10 kOhm. Se per qualche motivo non sai come farlo, questo è descritto nel mio articolo su.

Theremin

Esiste uno strumento musicale come il theremin. E ora assembleremo una somiglianza di questo strumento.

Codice

// Designa il telemetro, il pulsante e il cicalino #define RFIND A5 #define BUT 9 #define BUZ 8 // Variabili booleane per il pulsante bool sound_on = false; bool but_up = vero; void setup() ( pinMode(RFIND, INPUT); pinMode(BUZ, OUTPUT); pinMode(BUT,INPUT_PULLUP); ) void loop() ( //Codice per accendere e spegnere il theremin bool but_now = digitalRead(BUT); if( but_up && !but_now) ( delay(10); bool but_now = digitalRead(BUT); if(!but_now) ( sound_on = !sound_on; ) ) but_up = but_now; //Codice per theremin if(sound_on == 1) ( int val, freq; val = analogRead(RFIND); //Puoi giocare con i valori di constrain e map come preferisci val = constrain(val, 100, 400); freq = map(val, 100, 400 , 1000, 2500); tono(BUZ, frequenza, 20); ) )

Spiegazioni

Se si preme il pulsante si sentirà un segnale dal segnalatore acustico o dall'altoparlante, a seconda di cosa è stato collegato, che varierà in base alla distanza del telemetro dalla propria mano.

Il pulsante serve per fermare o avviare il nostro “Theremin”

Linea di fondo

Oggi abbiamo esaminato più da vicino i telemetri e condotto diversi piccoli esperimenti, due dei quali possono essere utilizzati nella vita reale. I sensori di parcheggio ti aiuteranno a parcheggiare e il Code Lock può essere migliorato in modo tale che quando inserisci la password corretta, il servomotore apre, ad esempio, la serratura della porta della tua stanza.

Elenco dei radioelementi

Designazione Tipo Denominazione Quantità NotaNegozioIl mio blocco note
Schema 1
Scheda Arduino

ArduinoUno

1 Al blocco note
Tagliere per il paneMetà breadboard1 Al blocco note
Fili di collegamento"Papà-papà"4 Al blocco note
TelemetroHC-SR042 Al blocco note
Schema 2
Scheda Arduino

ArduinoUno

1 Al blocco note
TelemetroHC-SR041 Al blocco note
Fili di collegamento"Papà-papà"15 Al blocco note
Tagliere per il paneMetà breadboard1 Al blocco note
Emettitore piezoelettrico 1 Al blocco note
Resistore

220 Ohm

1 Al blocco note
Diodo ad emissione luminosa

AL102B

2 Al blocco note
Diodo ad emissione luminosa

AL307V

1 Al blocco note
Diodo ad emissione luminosa

AL307D

2 Al blocco note
Schema 3
Scheda Arduino

ArduinoUno

1 Al blocco note
TelemetroHC-SR042 Al blocco note
Resistore

220 Ohm

5
Caricamento...Caricamento...