Es mostren els missatges amb l'etiqueta de comentaris Projecte. Mostrar tots els missatges
Es mostren els missatges amb l'etiqueta de comentaris Projecte. Mostrar tots els missatges

dimarts, 13 de març del 2018

Projecte: Tacòmetre (mesurador d'RPM) d'un motor DC amb sensor òptic IR reflexiu

Descripció del projecte

El projecte consisteix en el disseny, construcció i programació d'un tacòmetre, és a dir, un mesurador de les Revolucions Per Minut (RPM) d'un motor o de qualsevol element que gire.
Per la captació de la velocitat de gir, el dispositiu utilitza un sensor sense contacte, basat en un opto-switch (o sensor òptic d'infra-roig) de tipus reflexiu.
Ací teniu un vídeo del projecte en funcionament:


Maquinari

Sensor IR reflexiu

Per detectar el moviment de l'eix i comptar les revolucions utilitzarem un sensor sense contacte, del tipus opto-switch reflexiu. La constitució i funcionament d'aquests sensors consisteix en un LED d'infra-rojos (IR) que emet un feix d'aquest tipus de llum. Aquest feix d'IR al topar amb un objecte situat davant serà reflectit de tornada cap el sensor. Aquesta llum IR reflexada la captem amb un fototransistor IR, que conduirà de manera proporcional a aquesta llum reflexada.

Així, si el feix IR dona contra una superfície altament reflectant (per exemple, pintada de color blanc), el fototransistor conduirà molt; per contra, si la superfície és poc reflectant (negra), el fototransistor no conduirà.
El que farem es posar a l'eix un disc que tinga una part reflectant i altra no, per a que cada vegada que passe per davant del sensor, aquest vaja canviant d'estat:


El sensor utilitzat al nostre projecte està basat en l'opto-switch reflexiu TCRT5000, del qual podeu vore una imatge, el seu esquema intern i el circuit de connexionat a la imatge següent:


Com la R de polarització del foto-transistor l'hem posada a l'emissor, el senyal d'eixida SIGNAL serà:
  • Sobre blanc: el fototransistor conduirà i el senyal serà ALT (més a prop dels 5V quanta major reflexió) ---> 1.
  • Sobre negre: foto-transistor no condueix, senyal BAIX ---> 0.
Degut a que, com vorem més endavant a l'apartat de la programació, pel comptatge de les revolucions hem utilitzat una tècnica basada en les interrupcions, aquest senyal (que serà la que interromprà) s'ha de connectar a l'entrada digital 2 de l'Arduino, ja que aquest només admet interrupcions per aquesta entrada o per la 3.

Display de 4 dígits de 7 segments

Per mostrar les RPM mesurades i calculades, ho haguerem pogut fer simplement enviant-les pel port sèrie, però això haguera requerit que sempre per utilitzar el tacòmetre deuríem haver de disposar d'un ordinador. Per això anem a utilitzar un display.
Com a display també s'hauria pogut utilitzar un mòdul ja prefabricat com aquest, però com estem aprenent a programar i electrònica, hem utilitzat 4 displays de 7 segments per poder mostrar 4 dígits:


Més endavant, a l'apartat del programari veurem el control d'aquests displays des de l'arduino sense haver d'utilitzat 28 (7 segments * 4 displays = 28) pins digitals d'eixida que caldrien!
La interconnexió de tots els elements del sistema la podeu vore ací:


També podeu descarregar el fitxer Fritzing amb el circuit.

Xasis-Suport

Aprofitant que al centre tenim una impressora 3D de nova donació, un altre grup ens va ajudar i va dissenyar (amb TinkerCAD) un xasis on muntar tots els elements: les peces verd clar de la imatge de sota. La idea que el sensor IR anara sobre un suport movible per poder ajustar-lo a l'alçada de l'eix a medir, però no va eixir massa bé, és la peça verda fosca.


Programa

Funcionament general del programa

El programa creiem queestà bastant documentat als seus comentaris, però una visió general podria ser aquesta:
  • Primer definim una sèrie de variables, arrays i constants de les quals explicarem la funcionalitat més avall.
  • Definim les funcions treuXifra() i treuValor(), pel control del display. Les explicarem després.
  • Al setup() definim els pins de segment i els de dígit com eixides, obrim les comunicacions sèrie (per la depuració, després no s'utilitza) i definim el pin del sensor com a entrada i li definim les interrupcions per hardware.
  • El loop() el que està fent constantment és cridar a la funció treuValor() per mostrar pel display el valor de les RPM calculades.
  • Quan passen refreshRate mili-segons (com està ara definit són 2 segons), re-calculem les RPM basant-nos en el número de revolucions donades en eixos 2 segons.
  • A banda, cada revolució, quan el sensor passa de blanc a negre, l'arduino deixa tot el que estiga fent, va a la subrutina d'interrupció (ací anomenada subrutinaInater() que incrementarà en 1 la variable revs que compta les revolucions donades.

Control del display

Pel control del display sense haver d'utilitzar 28 pins d'eixida, s'utilitza una tècnica anomenada multiplexing (multiplexació) que a la figura següent es veu molt bé en què consisteix:


Com es pot observar, tots els segments del mateix nom (a, b, c... g) van interconnectats entre si i controlats per un pin d'eixida de l'Arduino. Aquestes eixides s'anomenen Pins de segment (a la imatge, són els de l'esquerra). Per altra banda els comuns dels leds de cada dígit (que en aquest cas són els ànodes, els displays utilitzats són d'ànode comú) van cadascun a un altre pin d'eixida de l'arduino, i s'anomenen pins de dígit (a la imatge són els de la part inferior).
Per tant el multiplex consisteix en que l'arduino activa (posa a HIGH) el pin de dígit del primer display (els altres pins de dígit s'han de posar a LOW!) i posa a LOW els pins de segments que s'han d'il·luminar per mostrar la xifra que corresponga a eixe dígit, després d'un temps curt (uns 5 ms) passa al següent dígit. Quan acaba el 4t dígit torna a començar pel primer. Com el temps que està encés cada dígit és tant curt i degut a la persistència de la visió, els nostres ulls sempre veuen com si estigueren les 4 xifres:


Al programa, les variables importants pel control del display són:
  • Array pinsSegments[]: Un array que conté a quins pins de l'arduino estan connectats cada segment. És a dir, el primer element de l'array pinSegment[0] ens diu a quin pin (en aques cas al D3) va el segment a; quan aquest pin es pose a LOW, s'encendrà el segment corresponent.
  • Array pinsDigits[]: Un array que conté a quin pin de l'Arduino està connectat l'ànode comú de cada dígit. El pin d'aquests que estiga HIGH diu quin és el dígit actiu.
  • Array valorSegment[][]: Aquest és un array bidimensional de 10 files amb 7 elements cada fila. És una espècie de mapa: cada fila ens diu quins segments (a~g) s'han de posar a LOW per a que aparega la xifra corresponent. La primera fila és el mapa del 0, la segona de l'1, etc...

Funció treuXifra()
Aquesta funció pren com a paràmetres quina xifra (de 0 a 9) s'ha de mostrar i per quin dígit (de 0 a 3). Activa a HIGH el pin de dígit corresponent i basant-se en el mapa de l'array valorSegment, activa a LOW els pins de segment adequats. Aquesta funció només serveix per estructurar una mica el programa, sols és cridada per la funció treuValor().
Funció treuValor()
Aquesta funció és l'encarregada de fer el multiplexing. Pren com a paràmetre quin valor s'ha de mostrar pels 4 dígits (el valor calculat de les RPM) i, ajudant-se de treuXifra() va traient cada xifra pel dígit corresponent, s'espera un temps tempsMultiplex i passa a la següent xifra.

Resta del programa

Detecció del gir
Quan el sensor passa d'estar sobre blanc (donant HIGH) a estar sobre negre (LOW), es provoca una interrupció, l'arduino deixa tot el que estiga fent i passa a la funció subrutinaInter(), que incrementa en 1 el comptatge de les revolucions donades, variable revs.
Càlcul de les RPM
Cada refreshRate mili-segons (2 segons) re-calculem les RPM i tornem a començar un altre cicle posant a zero revs.

Programa sencer

Ací podeu vore el programa sencer o si preferiu podeu veure'l a Arduino Create:


Variació

Hi ha una altra versió del programa que fa servir una variant pel còmput de les RPM: en lloc de comptar el número de revs donades en 2 segons, el que fem és comptar quant es tarda en fer una revolució, és a dir el període T.
Per més exactitud el que fem és anar sumant el temps trigat en cada revolució, comptat en micro-segons i després dividirem pel número de revolucions, és com treure una mitjana.

dimarts, 16 de desembre del 2014

Galeria fotos construcció robots curs 2014-15

Utilitzant els Àlbums Web de Picasa, he creat aquest àlbum on anirem pujant les fotos que fem durant la construcció dels quatre robots d'aquest curs.

dimarts, 25 de març del 2014

Placa seguidora solar - prova final

Ací tenim el funcionament de la placa seguidora solar. El vídeo de després dels primers 22 segons és una gravació que férem abans de fer un últim ajustament al programa, la primera part del vídeo sí té fet aquest ajustament.

dilluns, 24 de març del 2014

dimarts, 11 de febrer del 2014

Motors i entrades analògiques amb Babuino

Per aprendre com funcionen el control dels motors i les entrades analògiques a la placa i llibreria Babuino, vam fer aquesta petita prova:

  • Un potenciòmetre connectat com a divisor de tensió a una entrada analògica.
  • Un motor a una de les eixides de motor de la placa. El motor arrossegava una maqueta d'un pont feta amb K'Nex.
  • Quan el potenciòmetre estava a la posició central, el motor estava parat.
  • Al girar el potenciòmetre cap a un costat, el motor girava cap a un costat, cada vegada a més velocitat conforme giravent més el potenciòmetre.
  • Al girar el potenciòmetre al contrari, el motor girava en sentit contrari amb una velocitat també proporcional a la posició del potenciòmetre.

divendres, 7 de febrer del 2014

Seguidor solar: sensors

Els sensors de llum estan basats en LDR's, connectades en sèrie amb un resistor fix format un divisor de tensió. Així al punt entre el resistor fix i la LDR tindrem una tensió que serà proporcional a la llum incident sobre la LDR.
Sobre una placa es muntaran dos d'aquests divisors amb LDR, separats per una barrera d'ombra, la funció d'aquesta barrera és projectar una ombra sobre una de les LDR quan la llum incident no siga perpendicular a la superfície d'aquest conjunt sensor, provocant que la tensió obtinguda de la LDR del costat il·luminat siga major que la del costat ombrejat.
El circuit de cada sensor el podem vore en aquesta imatge, on s'ha simulat que una LDR estava més il·luminada que l'altra i s'han posat dos voltímetres per poder apreciar el diferent voltatge d'eixida.
En aquesta imatge podem vore com queda en realitat el conjunt sensor:


dilluns, 3 de febrer del 2014

Seguidor solar: disposició general.



Per aprendre la programació de l'Arduino i l'ús de la placa i llibreria Babuino, ens proposem la realització del següent projecte:

  • Una maqueta d'una espècie de placa solar o telescopi.
  • La part estructural estarà realitzada utilitzant les peces K'Nex.
  • La placa tindrà dos moviments de gir, controlats per dos motors de CC amb reductora: un moviment horitzontal, que anomenarem moviment Est-Oest i l'altre vertical, moviment Nord-Sud.
  • El muntatge també tindrà uns sensors de llum, realitzats amb LDR's.
  • A l'Arduino-Babuino caldrà programar un sketch per controlar els motors de manera que la placa sempre gire buscant la llum i quede orientada cap a la llum incident.
La disposició i inter-connexió dels diferents elements la podem vore a la següent imatge: