Вы находитесь на странице: 1из 17

FACULTAD DE INGENIERIA EN ELECTRICIDAD Y

COMPUTACIÓN

LABORATORIO DE ELECTRÓNICA B

REPORTE PROYECTO
Piano electrónico con mando a distancia mediante
Comunicación RF

INTEGRANTE
Víctor Alfredo Choez Guerrero
Paul Eduardo Rizzo Verdesoto

PROFESOR
ING. Luis Centeno Zambrano

PARALELO
9

FECHA
6 DE MARZO DEL 2017

TERMINO II
2016– 2017
Laboratorio de Electrónica B

Piano electrónico con mando a distancia

1. Objetivos 2
2. Especificaciones del Proyecto 2
3. Justificación 2
4. Diagrama de bloques 3
5. Lista de materiales 3
6. Descripción del algoritmo 4
7. Código del emisor 9
8. Código del receptor 31
9. Código de las notas musicales 31
10. Diseño de placa Pcb
11. Conclusiones 38
12. Recomendaciones 38

1
Laboratorio de Electrónica B

Objetivos
 Enviar datos de forma inalámbrica.
 Comunicar dos módulos entre si.
 Amplificar una señal de audio usando un amplificador de potencia Tipo B.
 Encendido de Leds mediante frecuencia de trabajo.

Especificaciones del proyecto


Crear un piano electrónico para niños, el juguete debe constar de dos partes. La
primera parte es el control remoto que el niño deberá usar para comunicarse con
el receptor que será el encargado de interpretar la señal y reproducirá un sonido
y dependiendo la tecla prendera un led.

Justificación
El propósito de este proyecto es crear un juguete para niños pequeños, que
ofrezca calidad y que sea resistente a caídas y golpes.
Para esto se propuso crear un piano electrónico, pero con la diferencia de que
será manejado por un control remoto de forma que el niño juegue con el mismo
pero el sonido sea enviado y se reproduzca en otro equipo fuera de su alcance,
esto sería para que el juguete dure más y no se dañe por golpes. Pues el control
remoto solo tendrá piezas básicas para la comunicación y será resistente a las
caídas.
En inicio se pensó establecer un enlace por infrarrojo, en el transmisor se
ajustaba la frecuencia mediante botones y se la amplificaba y se enviaba por
infrarrojo al receptor, este la filtraba reducía el ruido y la amplificaba en un
transmisor tipo B, además el receptor enviaba la señal a 7 filtros con las
frecuencias de sonidos desde Do hasta Si, dependiendo la frecuencia recibida el
filtro prendía o no un led.
Nota musical Frecuencia de Nota musical Frecuencia de
operación operación
Do 261.63 Do2 523.25
Re 293.66 Do# 277.18
Mi 329.63 Re# 311.13
Fa 349.23 Fa# 369.99
Sol 392.00 Sol# 415.30
La 440.00 La# 466.00
Si 493.88

2
Laboratorio de Electrónica B

En Protoboard y en simulaciones los filtros de primer y segundo orden con


opamp’s no eran tan selectivos su ancho de banda se distorsionaba al aumentar
su factor Q y al trabajar con una sola polarización el voltaje offset no se podía
regular y hacían que la salida tenga un voltaje aproximado a prendiendo los
leds sin necesidad de un voltaje de entrada.
Se decidió trabajar con dos módulos Arduino, uno para el transmisor y otro para
el receptor, así como cambiar el enlace infrarrojo por un enlace bluetooth, pues
el principal inconveniente del enlace infrarrojo es que debe tener línea de vista,
es decir, el niño deberá apuntar siempre al receptor para que este trabaje y
reciba las notas musicales que deben sonar.
Los módulos Arduino más la comunicación mediante Bluetooth dan ventaja con
respecto a los sonidos que puede reproducirse y al tener el módulo Bluetooth se
pudo crear como un extra una aplicación en el celular para que sirva de emisor
igual al control remoto que usa el niño para jugar.

Lista de materiales
Tipo Valor

10 Resistencias de 330Ω para Leds


16 Resistencias de 10KΩ para botoneras
Resistencia 2 Resistencias 47Ω
1 Resistencia de 1KΩ
1 Resistencia 1.5KΩ

Potenciómetro Control de volumen RV 10KΩ

7 Leds de tonos
Leds
2 Leds de encendido

TIP31C
TIP32C
Transistores
BC548
2 integrados 7805

330nF
Capacitores cerámicos 0.1nF
220pF

2 x 1000uF
Capacitores Electrolíticos
10uF

Microcontroladores 2 x PIC 16F887

Diodos 4 x 1N4007

Otros Disipadores

3
Laboratorio de Electrónica B

Cables
Osciloscopio
Fuente de Poder
Batería 9v
Protoboard
Computador
Quemador de Pics

Módulo Módulo de comunicación RF a 433MHz

Diagrama de bloques

Celular
Emisor
Android

Receptor
Amplificador
de audio

Código del emisor


#include <Keypad.h>
#include <SoftwareSerial.h>
//Aquí conectamos los pins RXD,TDX del módulo Bluetooth.
SoftwareSerial BT(4,2); //10 RX, 11 TX.

const byte ROWS = 4; //four rows


const byte COLS = 4; //four columns
//define the cymbols on the buttons of the keypads
char hexaKeys[ROWS][COLS] = {
{'a','e','i','m'},
{'b','f','j','n'},
{'c','g','k','o'},
{'d','h','l','p'}
};
byte rowPins[ROWS] = {11, 10, 9, 8}; //connect to the row pinouts of
the keypad
byte colPins[COLS] = {7, 6, 5, 3}; //connect to the column pinouts of
the keypad

//initialize an instance of class NewKeypad

4
Laboratorio de Electrónica B

Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins,


ROWS, COLS);

void setup(){
BT.begin(9600);
Serial.begin(9600);
}

void loop(){
char customKey = customKeypad.getKey();

if (customKey){
BT.write(customKey);
Serial.println(customKey);
}
}

Código del Receptor


#include <SoftwareSerial.h>
#include "imperialMarch.h"

SoftwareSerial BTserial(4,2); // Rx del bluetooth al pin 2 | Tx del


bluetooth al pin 4
#define pinParlante 9
#define anakin 10

#define DO 261.63
#define RE 293.66
#define MI 329.63
#define FA 349.23
#define SOL 392
#define LA 440
#define SI 493.88
#define DO2 523.25
#define DON 277.18
#define REN 311.13
#define MIN 329.63
#define FAN 415.30
#define SOLN 466.00
#define LAN 554.37

int pines[9] = {-1,3,5,6,7,8,11,12,13};

int duracionNota = 250;

void setup(){
BTserial.begin(9600);
pinMode(anakin, OUTPUT);
for (int i = 1; i <= 8; i++){
pinMode(pines[i], OUTPUT);
digitalWrite(pines[i],LOW);
}
}

void playTone (char noteTooth){


switch (noteTooth) {
case 'a':

5
Laboratorio de Electrónica B

tone(pinParlante,DO);

for (int i = 1; i <= 8; i++){


if (pines[i] == 3 || pines[i] == 12 || pines[i] == 13){
digitalWrite(pines[i],HIGH);
}else{
digitalWrite(pines[i],LOW);
}
}

break;
case 'b':
tone(pinParlante,RE);

for (int i = 1; i <= 8; i++){


if (pines[i] == 5 || pines[i] == 12 || pines[i] == 13){
digitalWrite(pines[i],HIGH);
}else{
digitalWrite(pines[i],LOW);
}
}

break;
case 'c':
tone(pinParlante,MI);

for (int i = 1; i <= 8; i++){


if (pines[i] == 6 || pines[i] == 12 || pines[i] == 13){
digitalWrite(pines[i],HIGH);
}else{
digitalWrite(pines[i],LOW);
}
}

break;
case 'd':
tone(pinParlante,FA);

for (int i = 1; i <= 8; i++){


if (pines[i] == 7 || pines[i] == 12 || pines[i] == 13){
digitalWrite(pines[i],HIGH);
}else{
digitalWrite(pines[i],LOW);
}
}

break;
case 'e':
tone(pinParlante,SOL);

for (int i = 1; i <= 8; i++){


if (pines[i] == 8 || pines[i] == 12 || pines[i] == 13){
digitalWrite(pines[i],HIGH);
}else{
digitalWrite(pines[i],LOW);
}
}

break;
case 'f':
tone(pinParlante,LA);

6
Laboratorio de Electrónica B

for (int i = 1; i <= 8; i++){


if (pines[i] == 3 || pines[i] == 11 || pines[i] == 13){
digitalWrite(pines[i],HIGH);
}else{
digitalWrite(pines[i],LOW);
}
}

break;
case 'g':
tone(pinParlante,SI);

for (int i = 1; i <= 8; i++){


if (pines[i] == 5 || pines[i] == 11 || pines[i] == 13){
digitalWrite(pines[i],HIGH);
}else{
digitalWrite(pines[i],LOW);
}
}

break;
case 'h':
tone(pinParlante,DO2);

for (int i = 1; i <= 8; i++){


if (pines[i] == 6 || pines[i] == 11 || pines[i] == 13){
digitalWrite(pines[i],HIGH);
}else{
digitalWrite(pines[i],LOW);
}
}

break;
case 'i':
tone(pinParlante,DON);

for (int i = 1; i <= 8; i++){


if (pines[i] == 7 || pines[i] == 11 || pines[i] == 13){
digitalWrite(pines[i],HIGH);
}else{
digitalWrite(pines[i],LOW);
}
}

break;
case 'j':
tone(pinParlante,REN);

for (int i = 1; i <= 8; i++){


if (pines[i] == 8 || pines[i] == 11 || pines[i] == 13){
digitalWrite(pines[i],HIGH);
}else{
digitalWrite(pines[i],LOW);
}
}

break;
case 'k':
tone(pinParlante,MIN);

7
Laboratorio de Electrónica B

for (int i = 1; i <= 8; i++){


if (pines[i] == 3 || pines[i] == 12 || pines[i] == 11){
digitalWrite(pines[i],HIGH);
}else{
digitalWrite(pines[i],LOW);
}
}

break;
case 'l':
tone(pinParlante,FAN);

for (int i = 1; i <= 8; i++){


if (pines[i] == 5 || pines[i] == 12 || pines[i] == 11){
digitalWrite(pines[i],HIGH);
}else{
digitalWrite(pines[i],LOW);
}
}

break;
case 'm':
tone(pinParlante,SOLN);

for (int i = 1; i <= 8; i++){


if (pines[i] == 6 || pines[i] == 12 || pines[i] == 11){
digitalWrite(pines[i],HIGH);
}else{
digitalWrite(pines[i],LOW);
}
}

break;
case 'n':
tone(pinParlante,LAN);

for (int i = 1; i <= 8; i++){


if (pines[i] == 7 || pines[i] == 12 || pines[i] == 11){
digitalWrite(pines[i],HIGH);
}else{
digitalWrite(pines[i],LOW);
}
}

break;
case 'v':
march(pinParlante);
break;
}
delay(duracionNota);
noTone(pinParlante);

for (int i = 1; i <= 8; i++){


digitalWrite(pines[i],LOW);
}

void loop(){
if (BTserial.available()){
char caracter = BTserial.read();

8
Laboratorio de Electrónica B

playTone(caracter);
}
}

Código notas musicales


#define c 261
#define d 294
#define e 329
#define f 349
#define g 391
#define gS 415
#define a 440
#define aS 455
#define b 466
#define cH 523
#define cSH 554
#define dH 587
#define dSH 622
#define eH 659
#define fH 698
#define fSH 740
#define gH 784
#define gSH 830
#define aH 880
//frequencies for the tones we're going to use
//used http://home.mit.bme.hu/~bako/tonecalc/tonecalc.htm to get these

void beep (unsigned char pinParlante, int frequencyInHertz, long


timeInMilliseconds)
{
digitalWrite(10, HIGH);
//use led to visualize the notes being played
int x;
long delayAmount = (long)(1000000/frequencyInHertz);
long loopTime = (long)((timeInMilliseconds*1000)/(delayAmount*2));
for (x=0;x<loopTime;x++)
{
digitalWrite(pinParlante,HIGH);
delayMicroseconds(delayAmount);
digitalWrite(pinParlante,LOW);
delayMicroseconds(delayAmount);
}

digitalWrite(10, LOW);
//set led back to low

delay(20);
//a little delay to make all notes sound separate
}

void march(int pinParlante)


{
//for the sheet music see:
//http://www.musicnotes.com/sheetmusic/mtd.asp?ppn=MN0016254
//this is just a translation of said sheet music to frequencies /
time in ms
//used 500 ms for a quart note

9
Laboratorio de Electrónica B

beep(pinParlante, a, 500);
beep(pinParlante, a, 500);
beep(pinParlante, a, 500);
beep(pinParlante, f, 350);
beep(pinParlante, cH, 150);

beep(pinParlante, a, 500);
beep(pinParlante, f, 350);
beep(pinParlante, cH, 150);
beep(pinParlante, a, 1000);
//first bit

beep(pinParlante, eH, 500);


beep(pinParlante, eH, 500);
beep(pinParlante, eH, 500);
beep(pinParlante, fH, 350);
beep(pinParlante, cH, 150);

beep(pinParlante, gS, 500);


beep(pinParlante, f, 350);
beep(pinParlante, cH, 150);
beep(pinParlante, a, 1000);
//second bit...

beep(pinParlante, aH, 500);


beep(pinParlante, a, 350);
beep(pinParlante, a, 150);
beep(pinParlante, aH, 500);
beep(pinParlante, gSH, 250);
beep(pinParlante, gH, 250);

beep(pinParlante, fSH, 125);


beep(pinParlante, fH, 125);
beep(pinParlante, fSH, 250);
delay(250);
beep(pinParlante, aS, 250);
beep(pinParlante, dSH, 500);
beep(pinParlante, dH, 250);
beep(pinParlante, cSH, 250);
//start of the interesting bit

beep(pinParlante, cH, 125);


beep(pinParlante, b, 125);
beep(pinParlante, cH, 250);
delay(250);
beep(pinParlante, f, 125);
beep(pinParlante, gS, 500);
beep(pinParlante, f, 375);
beep(pinParlante, a, 125);

beep(pinParlante, cH, 500);


beep(pinParlante, a, 375);
beep(pinParlante, cH, 125);
beep(pinParlante, eH, 1000);
//more interesting stuff (this doesn't quite get it right somehow)

beep(pinParlante, aH, 500);


beep(pinParlante, a, 350);
beep(pinParlante, a, 150);
beep(pinParlante, aH, 500);
beep(pinParlante, gSH, 250);

10
Laboratorio de Electrónica B

beep(pinParlante, gH, 250);

beep(pinParlante, fSH, 125);


beep(pinParlante, fH, 125);
beep(pinParlante, fSH, 250);
delay(250);
beep(pinParlante, aS, 250);
beep(pinParlante, dSH, 500);
beep(pinParlante, dH, 250);
beep(pinParlante, cSH, 250);
//repeat... repeat

beep(pinParlante, cH, 125);


beep(pinParlante, b, 125);
beep(pinParlante, cH, 250);
delay(250);
beep(pinParlante, f, 250);
beep(pinParlante, gS, 500);
beep(pinParlante, f, 375);
beep(pinParlante, cH, 125);

beep(pinParlante, a, 500);
beep(pinParlante, f, 375);
beep(pinParlante, c, 125);
beep(pinParlante, a, 1000);
//and we're done \รณ/
}

Diseño de placa PCB

11
Laboratorio de Electrónica B

Receptor

12
Laboratorio de Electrónica B

13
Laboratorio de Electrónica B

Amplificador tipo B

14
Laboratorio de Electrónica B

Captura de pantalla

15
Laboratorio de Electrónica B

Conclusiones

 Se aprendió el uso de macros y subrutinas con un propósito general.


 Assembler es un lenguaje que interactúa directamente con la
computadora, pues realizamos funciones donde se usó interrupciones
que nos permitían ingresar, mostrar caracteres, configurar pantalla, crear
archivos y modificarlos en un entorno de códigos hexadecimales.
 Los saltos condicionales y no condicionales son muy importantes pues
mediante ellos nos dirigimos a subrutinas, en caso de que una bandera
este activa; por eso es importante saber que bandera activa o no el salto
condicional que vamos a hacer. Pues el incondicional siempre al llegar a
esa línea saltara a la etiqueta.
 Las interrupciones más importantes usadas en este proyecto fueron las
de entrada y salida de caracteres por pantalla, para esto no hay solo una
interrupción.

Recomendaciones

 Al usar operadores lógicos como CMP verificar en qué condiciones y que


banderas se activan para así saber que instrucción de salto usar.
 Dentro de una macro no se puede usar otra, por lo tanto, hay que escribir
un código simple que no utilice otra macro. Pero si se puede usar los
resultados de otra.
 Siempre que se use la instrucción 09h con la interrupción INT 21h la
cadena ingresada obligatoriamente debe terminar en $, caso contrario
leerá más espacios de memoria hasta encontrar dicho carácter.
 Los saltos JBE y JAE se recomienda usarlos cuando uno quiere que se
ingrese un rango de valores pues el primero salta si es menor al valor
comparado y el segundo cuando el valor ingresado es mayor.

16

Вам также может понравиться