Introducere:

Ceea ce pune roboții diferit de mașinile de bază este capacitatea lor de a simți și de a răspunde fenomenelor din lumea fizică. Pentru a face acest lucru, ei folosesc senzori. Un senzor funcționează prin transformarea ieșirii fizice din lume într-un semnal care poate fi înțeles de către un microcontroler. Deoarece toți senzorii măsoară într-o oarecare măsură proprietățile din lumea fizică, iar roboții pot acționa pentru a afecta lumea fizică, se creează o buclă de feedback. Este abilitatea robotului de a avea un rol activ și "intențional" în mediul său, care-l diferențiază de majoritatea celorlalte mașini.

1. Deși nu există o regulă fixă ​​cu privire la tipul de senzor pe care trebuie să îl aibă un robot, putem trece peste câțiva dintre ei pe care roboții îi folosesc în mod obișnuit.

Unul dintre cei mai populari este telemetrul cu ultrasunete. Acest senzor trimite un "ping" ultrasonic foarte direcțional și calculează timpul necesar pentru ca sunetul să ajungă la obiect și să se întoarcă la senzor. Acest senzor este bun pentru detectarea prezenței obiectelor aflate între 1" și 120" (12') distanță. Este bun pentru a detecta obstacolele care nu se mișcă, dar nu este bun pentru a detecta mișcarea.

Pentru a simți dacă oamenii dintr-un spațiu se mișcă, ar trebui să utilizați un senzor de mișcare IR (InfraRoșu). Acest senzor are un unghi de vizualizare predefinit, care diferă între modele, ceea ce înseamnă în principiu că are un câmp în fața senzorului, încât acesta poate detecta mișcarea în interiorul acestuia. Acest câmp tinde să crească în lățime mai departe de senzor. Nu vă spune cât de departe sunt oamenii, dar este foarte bun pentru identificarea dacă oamenii sunt prezenți si se mișcă.

Există totuși un senzor IR care este bun pentru detectarea distanței. Acest senzor funcționează în același mod ca și senzorul PING, dar în loc să măsoare sunetul care reflectă înapoi, măsoară lumina IR. Aceste senzori variază foarte mult în ceea ce privește distanțele pe care le măsoară, deci este important să verificați o foaie de date a senzorului pentru a vă asigura care este intervalul pe care îl căutați înainte de a cumpăra unul. Acestea tind să fie foarte precise în măsurătorile lor, dar ele sunt, de asemenea, în mod obișnuit ușor mai scumpe decât senzorii cu ultrasunete.

Dacă doriți ca robotul dvs. să măsoare cantitatea de lumină vizibilă într-un spațiu, puteți utiliza o fotocelulă. În afară de măsurarea luminii, o fotocelula și unele LED-uri pot fi transformate într-un senzor de culoare brută. Acest lucru se datorează faptului că unele culori reflectă lumina mai bine decât altele. Astfel, acest senzor poate fi utilizat pentru a identifica și urma o linie neagră trasată pe pământ. Pentru un exemplu de construire a unui astfel de senzor, verificați robotul meu de teleprezență. Dezavantajul pentru utilizarea unui senzor în acest scop este faptul că este afectat de lumina ambientală.

De asemenea, puteți folosi robotul pentru a măsura sunetul. Acest senzor este în mare parte doar un microfon pre-amplificat. Acest senzor este cel mai ușor de a interfața cu el dacă măsurați doar volumul sunetului. Ascultarea pentru comenzi sau frecvențe este foarte dificilă pentru Arduino, deoarece de obicei necesită prea multă putere de procesare pentru a face ceva prea avansat. Cu toate acestea, este posibil pentru coderii mai avansați să realizeze. De obicei, dacă doriți să faceți o prelucrare audio avansată, ați folosi un shield sau un modul pentru a asculta frecvențe sau comenzi vocale. Un exemplu de acest lucru, din nou, poate fi găsit în robotul meu de teleprezență.

Un întrerupător de coliziune a robotului este de obicei doar un comutator cu pârghie cu un fel de braț de extindere atașat la pârghie. Acest lucru creează un mare avantaj mecanic și oferă comutatorului un declanșator sensibil. Va alerta Arduino imediat după ce va fi atins. De asemenea, se realizează versiuni comerciale ale acestora pentru a fi folosite ca întrerupătoare mecanice de siguranță. Acestea sunt bune pentru roboți cu adevărat mari, cum ar fi comutatorul de protecție din cauciuc utilizat în brațul meu robotizat.

2. Odată ce ați selectat un senzor, nu există un singur mod standard pentru ca senzorii să comunice informații unui microcontroler. Fiecare senzor trebuie să fie interfațat într-o manieră adecvată. Din fericire, majoritatea senzorilor trimit date într-o manieră previzibilă fie ca o rezistență, tensiune analogică, tensiune digitală sau semnal de date.

Un senzor analogic produce un semnal care este constant și aproximativ proporțional cu ceea ce se măsoară. Cu alte cuvinte, acesta emite un semnal de tensiune neîntrerupt sau produce o cantitate variabilă de rezistență în circuit. Ca regulă generală, acești senzori tind să nu fie la fel de exacți ca senzorii digitali, dar tind să fie mai ieftini și mai robusti. Pentru multe aplicații robotizate care nu sunt de precizie, un senzor analog este mai mult decât potrivit.

Mulți senzori analogici sunt rezistivi, ceea ce înseamnă că au o cantitate fluctuantă de rezistență - bazată pe ceea ce măsoară. Exemple de astfel de senzori sunt: celulă foto, FSR (rezistor sensibil la forță) sau senzor de îndoire. Acești senzori pot fi citiți de o intrare analogică a microcontrolor utilizând un divizor de tensiune. Acești senzori tind să fie pasivi, ceea ce înseamnă că vor funcționa și vor produce o citire chiar și fără o tensiune de intrare. Altfel, puteți citi rezistența acestora cu un multimetru, chiar dacă nu face parte dintr-un circuit alimentat.

Pentru a testa acest senzor în acțiune, trageți un rezistor de 10K în serie cu o fotocelulă. Conectați joncțiunea lor la pinul A0 pe Arduino. Conectați terminalul rezistenței rămas la masă și pinul fotocelulei rămas la 5V. După finalizarea cablării, deschideți software-ul Arduino și încărcați fișierul File > Exemple > 01.Basics > AnalogReadSerial. În cele din urmă, pentru a o vedea în acțiune, deschideți Serial Monitor.

Anumiți senzori analogi, cum ar fi senzorii de temperatură, foto-tranzistoarele și telemetrele IR, sunt bazați pe tensiune și vor produce un semnal între 0V și 5V. Acest lucru poate fi citit direct de un pin analog al lui Arduino. Acești senzori sunt de obicei activi, ceea ce înseamnă că fără o tensiune de intrare nu vor fi alimentați sau nu fac nimic. Acestea sunt în mod obișnuit interfațate folosind Arduino în exact aceeași manieră ca și senzorii rezistivi. Totuși, este important să rețineți că acestea produc un curent, spre deosebire de schimbarea rezistenței pentru acele cazuri rare în care interfețele se abat de la ele.

Un senzor digital are o ieșire de tensiune discretă, adică semnalul este pornit sau oprit. În termeni de electronică acest lucru înseamnă că semnalul este fie high, fie low, sau 1 sau 0. Semnalul digital poate fi la fel de simplu ca pornit și oprit sau poate comuta ON și OFF suficient de rapid pentru a comunica folosind un protocol de date binar (1 sau 0).

Arduino, la rândul său, este capabil să interpreteze aceste impulsuri și să înțeleagă ce este comunicat. Este un pic cam ca cineva care comunică cu codul Arduino în morse prin atingerea unui comutator conectat la un pin de intrare. Excepția, în acest caz, se întâmplă într-adevăr - într-adevăr - într-adevăr - rapid.

Probabil, senzorul digital cel mai de bază este un comutator. Acesta furnizează un semnal care este ON sau OFF în funcție de faptul că este apăsat sau nu. În circumstanțe normale, aceasta implică acțiunea umană. Totuși, puteți folosi comutatoarele ca comutatoare de coliziune pe roboți, astfel încât atunci când robotul intră în ceva, el avertizează creierul său de la microcontroler să nu mai conducă în această direcție. Acest tip de senzor ar fi considerat pasiv și este rar în măsura în care se deplasează senzorii digitali.

Un senzor digital mai tipic care produce o ieșire de bază high sau low este un senzor IR de mișcare. Este capabil să simtă mișcarea prin receptarea undelor termice umane. Acest tip de senzor vă spune doar dacă există o mișcare umană sau nu.

Pentru a-l încerca, conectați pinul 5V la 5V pe Arduino, masa la masa, și pinul DIG la pinul digital 2 de pe Arduino așa cum este prezentat în imagine. Apoi, deschideți software-ul Arduino și încărcați fișierul File > Exemple > 01.Basics > DigitialReadSerial. În cele din urmă, scoateți senzorul departe de dvs. (pentru a evita declanșarea acestuia în mod constant) și deschideți monitorul serial.

În cele din urmă, există senzori avansați, cum ar fi senzorii rangefinder cu ultrasunete și accelerometrele care comunică cu Arduino folosind un protocol personalizat complex sau un semnal binar de date (cum ar fi serial). Acești senzori sunt module specializate (mai multe despre acestea în următoarea lecție), care au propriile lor IC sau microcontrolere preconfigurate pentru a oferi citiri exacte ale senzorilor unui alt dispozitiv.

Adesea, acești senzori vor necesita citirea foii de date pentru a înțelege cum să interfațezi cu ei. De exemplu, senzorul PING, un senzor ultrasonic omniprezent, produs de Parallax, are un pin care este utilizat atât ca intrare, cât și ca ieșire. Trebuie trimis un impuls de 5V de la microcontroler și apoi același pin trebuie să fie configurat ca o intrare digitală și monitorizat pentru semnalul de întoarcere. Totuși, dacă nu v-aș fi spus și nu ați citit documentația, ați avea o mulțime de probleme în a vă imagina acest lucru.

Dacă aveți un senzor PING, conectați-l pe placa de testare și legați pinii lui la Arduino după cum urmează:

Ping 5V la Arduino 5V
Ping Ground la Arduino Ground
Ping Signal la pinul digital 4 Arduino

Odată ce firele sunt conectate, încărcați următorul cod și deschideți Serial Monitor:

/* Ping))) Sensor

This sketch reads a PING))) ultrasonic rangefinder and returns the distance to the closest object in range. To do this, it sends a pulse to the sensor to initiate a reading, then listens for a pulse to return. The length of the returning pulse is proportional to the distance of the object from the sensor.

The circuit:
* +V connection of the PING))) attached to +5V
* GND connection of the PING))) attached to ground
* SIG connection of the PING))) attached to digital pin 7

http://www.arduino.cc/en/Tutorial/Ping

created 3 Nov 2008
by David A. Mellis
modified 30 Aug 2011
by Tom Igoe
modified again 02 Apr 2016
by Randy Sarafan

This example code is in the public domain.

*/

// this constant won't change. It's the pin number

// of the sensor's output:

const int pingPin = 4;

void setup() {
// initialize serial communication:

Serial.begin(9600);
}

void loop() {

// establish variables for duration of the ping,

// and the distance result in inches and centimeters:

long duration, inches, cm;

// The PING))) is triggered by a HIGH pulse of 2 or more microseconds.

// Give a short LOW pulse beforehand to ensure a clean HIGH pulse:

pinMode(pingPin, OUTPUT);
digitalWrite(pingPin, LOW);
delayMicroseconds(2);
digitalWrite(pingPin, HIGH);
delayMicroseconds(5);
digitalWrite(pingPin, LOW);

// The same pin is used to read the signal from the PING))): a HIGH

// pulse whose duration is the time (in microseconds) from the sending

// of the ping to the reception of its echo off of an object.

pinMode(pingPin, INPUT);
duration = pulseIn(pingPin, HIGH);

// convert the time into a distance

inches = microsecondsToInches(duration);
cm = microsecondsToCentimeters(duration);

Serial.print(inches);
Serial.print("in, ");
Serial.print(cm);
Serial.print("cm");
Serial.println();

delay(100);
}

long microsecondsToInches(long microseconds) {
// According to Parallax's datasheet for the PING))), there are

// 73.746 microseconds per inch (i.e. sound travels at 1130 feet per

// second). This gives the distance travelled by the ping, outbound

// and return, so we divide by 2 to get the distance of the obstacle.

// See: http://www.parallax.com/dl/docs/prod/acc/28015-PING-v1.3.pdf

return microseconds / 74 / 2;
}

long microsecondsToCentimeters(long microseconds) {
// The speed of sound is 340 m/s or 29 microseconds per centimeter.

// The ping travels out and back, so to find the distance of the

// object we take half of the distance travelled.

return microseconds / 29 / 2;
}

Senzorii pe care i-am abordat în această lecție nu sunt, în nici un caz, singurii senzori pe care îi puteți folosi vreodată. Există mai mulți senzori în această lume pe care îi puteți utiliza. Alte lucruri pe care ați putea dori să le simțiți includ accelerația (accelerometru), culoarea, gazele naturale, câmpurile electromagnetice (efectul Hall), orientarea în spațiu (giroscop), atingerea umană (capacitiv), puterea semnalului wireless, vremea și presiunea aerului (pentru a numi câțiva). Șansele sunt dacă există ceva acolo pe care doriți să îl simțiți, există un instrument acolo pentru a o face.

Pentru un index comprehensiv al senzorilor existenți, verificați sensor list.