- Materials necessaris:
- Esquema de connexions:
- Com funciona realment el mòdul HC-SR04:
- Mesura de la distància entre dos sensors d'ultrasons (HC-SR04):
- Programa per al sensor de transmissor:
- Programa per al sensor del receptor:
- Treball:
- Idea improvisada: calibració del sensor mitjançant una distància coneguda:
El sensor d’ultrasons (HC-SR04) s’utilitza habitualment per trobar la distància d’un objecte des d’un punt concret. Ha estat bastant fàcil fer-ho amb l'Arduino i el codi també és bastant senzill. Però en aquest article provarem alguna cosa diferent amb aquests populars sensors HC-SR04. Intentarem calcular la distància entre dos sensors d'ultrasons, és a dir, farem que un sensor actuï com a transmissor i l'altre sensor com a receptor. En fer-ho, podem fer un seguiment de la ubicació d’un transmissor mitjançant molts receptors d’ultrasons, aquest seguiment s’anomena triangulació i es pot utilitzar per acoblar automàticament els seguidors d’equipatges dels robots i altres aplicacions similars. Trobar la distància entre dos sensors dels EUA pot semblar una tasca bastant senzilla, però he tingut pocs reptes que es discuteixen en aquest projecte.
La tècnica comentada en aquest article no és prou precisa i pot ser que no sigui útil en cap sistema real sense modificacions. Durant el temps d’aquesta documentació, no vaig trobar ningú que obtingués resultats tan propers com els meus, de manera que acabo de compartir les meves opinions sobre com vaig aconseguir que funcionés perquè les persones que ho intenten no hagin de reinventar la roda.
Materials necessaris:
- Arduino (2Nos): qualsevol model
- Mòdul HCSR04 (2Nos)
Esquema de connexions:
Tot i que farem que un sensor dels EUA (ultrasònic) funcioni com a transmissor i l’altre com a receptor, és obligatori connectar els quatre pins dels sensors amb l’Arduino. Per què ho hauríem de fer? Més endavant es parlarà d’això més endavant, però de moment el diagrama del circuit serà el següent

Com podeu veure, el diagrama de circuits tant del transmissor com del receptor són idèntics. Comproveu també: Interfície del sensor ultrasònic Arduino
Com funciona realment el mòdul HC-SR04:
Abans de continuar, entenem com funciona el sensor HC-SR04. El següent diagrama de temps ens ajudarà a entendre el funcionament.

El sensor té dos pins Trigger i Echo que s’utilitzen per mesurar la distància tal com es mostra al diagrama de temps. Primer per iniciar la mesura, hauríem d’enviar una ona ultrasònica des del transmissor; això es pot fer configurant el pin de disparador a 10uS. Tan aviat com es faci això, el pin del transmissor enviarà 8 esclats sonors d'ones dels EUA. Aquesta ona dels Estats Units impactarà contra un objecte que rebotarà i serà rebuda pel receptor.
Aquí el diagrama de temps mostra que una vegada que el receptor rebi l'ona farà que el pin Echo pugi durant una durada de temps que sigui igual al temps que ha trigat l'ona a viatjar des del sensor dels Estats Units i tornar al sensor. Aquest diagrama de temps no sembla ser cert.
Vaig cobrir la part Tx (transmissor) del sensor i vaig comprovar si el pols Echo augmentava, i sí, augmenta. Això significa que el pols Echo no espera que l'ona dels EUA (ultrasònica) la rebi. Una vegada que transmet l’ona dels EUA, puja i es manté elevada fins que l’ona torni. Per tant, el diagrama de temps correcte hauria de ser semblant al que es mostra a continuació (Disculpeu les meves escasses habilitats d’escriptura)

Feu que el vostre HC-SR04 funcioni només com a transmissor:
És pràcticament senzill fer que un HC-SR04 funcioni només com a transmissor. Tal com es mostra al diagrama de temps, heu de declarar el pin Trigger com a pin de sortida i fer que es mantingui elevat durant 10 microsegons. D’aquesta manera s’iniciarà l’esclat d’ona ultrasònica. Per tant, sempre que vulguem transmetre l’ona, només hem de controlar el pin d’activació del sensor del transmissor, per al qual es dóna el codi a continuació.
Fer que el vostre HC-SR04 funcioni només com a receptor:
Com es mostra al diagrama de temps, no podem controlar la pujada del pin Echo, ja que està relacionat amb el pin activador. Per tant, no hi ha manera de fer que l’HC-SR04 només funcioni com a receptor. Però podem utilitzar un hack, només cobrint la part del transmissor del sensor amb cinta adhesiva (com es mostra a la imatge següent) o el tap, l’ona dels EUA no pot escapar fora de la carcassa del transmissor i el pin Echo no es veurà afectat per aquesta ona dels EUA.

Ara per fer que el passador de ressò sigui més alt, només haurem d’estirar aquest pas de disparador maniquí durant 10 microsegons. Un cop aquest sensor del receptor obtingui l’ona dels EUA transmesa pel sensor del transmissor, el pin de ressò baixarà.
Mesura de la distància entre dos sensors d'ultrasons (HC-SR04):
Fins ara hem entès com fer que un sensor funcioni com a transmissor i l’altre sensor funcioni com a receptor. Ara, hem de transmetre l'ona ultrasònica des del sensor del transmissor i rebre-la amb el sensor del receptor i comprovar el temps que triga l'ona a viatjar del transmissor al receptor. Sona fàcil, no? Però, malauradament, tenim un problema aquí i això no funcionarà.
El mòdul transmissor i el mòdul receptor estan molt separats i quan el mòdul receptor rep l’ona dels EUA des del mòdul transmissor no sabrà quan el transmissor ha enviat aquesta ona en concret. Sense conèixer l'hora d'inici no podem calcular el temps pres i, per tant, la distància. Per resoldre aquest problema, s'ha de fer que el pols de ressò del mòdul receptor augmenti exactament quan el mòdul transmissor ha transmès l'ona dels EUA. Dit d’una altra manera, el mòdul transmissor i el mòdul receptor s’han d’activar al mateix temps. Això es pot aconseguir mitjançant el següent mètode.

Al diagrama anterior, Tx representa el sensor del transmissor i Rx representa el sensor del receptor. Com es mostra, el sensor del transmissor farà que transmeti ones nord-americanes amb un retard periòdic conegut, això és tot el que ha de fer.
Al sensor del receptor, d’alguna manera hem de fer que el pin del disparador pugi exactament durant el moment en què el pin del transmissor puja. Per tant, inicialment fem que l’activador dels receptors es posi a l’atzar, que es mantindrà elevat fins que el punxó de ressò baixi. Aquest pin de ressò baixarà només quan rebi una ona dels EUA del transmissor. Així que tan aviat com baixi, podem suposar que el sensor del transmissor s’acaba de disparar. Ara, amb aquesta suposició tan bon punt el ressò disminueixi, podem esperar el retard conegut i després activar el disparador dels receptors. Això sincronitzaria parcialment el disparador tant del transmissor com del receptor i, per tant, podeu llegir la durada del pols de ressò immediat mitjançant pulseIn () i calcular la distància.
Programa per al sensor de transmissor:
El programa complet del mòdul transmissor es troba a la part inferior de la pàgina. No fa altra cosa que activar el sensor del transmissor periòdicament.
digitalWrite (trigPin, HIGH); delayMicroseconds (10); digitalWrite (trigPin, LOW);
Per activar un sensor hem de fer que el gatet es mantingui elevat durant 10uS. El codi per fer el mateix es mostra a la part superior
Programa per al sensor del receptor:
Al sensor del receptor, hem de tapar l’ull del transmissor del sensor per fer-lo fals, tal com s’ha comentat anteriorment. Ara podem utilitzar la tècnica esmentada per mesurar la distància entre dos sensors. El programa complet es dóna a la part inferior d’aquesta pàgina. A continuació s’expliquen poques línies importants
Trigger_US (); while (digitalRead (echoPin) == HIGH); delayMicroseconds (10); Trigger_US (); durada = pulseIn (echoPin, HIGH);
Inicialment activem el sensor dels EUA mitjançant la funció Trigger_US () i després esperem fins que el pin de ressò es mantingui elevat mitjançant un bucle while. Un cop es redueixi, esperem una durada predeterminada, aquesta durada hauria de situar-se entre els 10 i els 30 microsegons que es pot determinar mitjançant proves i errors (o podeu utilitzar la idea improvisada que es mostra a continuació). Després d'aquest retard, torneu a activar els EUA mitjançant la mateixa funció i, a continuació, utilitzeu la funció pulseIn () per calcular la durada de l'ona.
Ara amb les mateixes fórmules antigues podem calcular la distància que es mostra a continuació
distància = durada * 0,034;
Treball:
Feu les connexions tal com s’explica al programa. Cobriu la part Tx del sensor del receptor tal com es mostra a la imatge. A continuació, pengeu el codi del transmissor i el codi del receptor que es donen a continuació al transmissor i al receptor Arduino respectivament. Obriu el monitor sèrie del mòdul receptor i haureu de notar la distància entre dos mòduls que es mostren tal com es mostra al vídeo següent.
Nota: aquest mètode és només una ideologia i pot ser que no sigui precís ni satisfactori. Tot i això, podeu provar la idea improvisada següent per obtenir millors resultats.

Idea improvisada: calibració del sensor mitjançant una distància coneguda:
El mètode que fins ara s’explica de forma estranya sembla ser satisfactori, però va ser suficient per al meu projecte. Tanmateix, també voldria compartir els inconvenients d’aquest mètode i una manera de superar-los. Un dels principals inconvenients d’aquest mètode és que suposem que el pin Echo del receptor cau immediatament després que el sensor del transmissor hagi transmès l’ona dels EUA, cosa que no és cert, ja que l’ona trigarà un cert temps a viatjar del transmissor al receptor. Per tant, el disparador del transmissor i el disparador del receptor no estaran perfectament sincronitzats.
Per superar-ho, podem calibrar el sensor utilitzant inicialment una distància de coneixement. Si es coneix la distància, sabrem el temps que ha trigat l’ona nord-americana a arribar al receptor des del transmissor. Conservem aquest temps com a Del (D) com es mostra a continuació.

Ara sabrem exactament després de quant de temps hauríem de posar el pin del gatell del receptor en alt per sincronitzar-se amb el disparador del transmissor. Aquesta durada es pot calcular mitjançant Retard conegut (t) - Del (D). No he pogut provar aquesta idea a causa de les limitacions de temps, de manera que no estic segur de la precisió que funcionaria. Per tant, si proveu, feu-me saber els resultats a través de la secció de comentaris.
