sensor de color prueba 1

Dependencies:   mbed

Entrega Control Auto Con Josytik y Sonidos Musicales Por Sensor de luz

Integrantes Sneider Mocada, Daniel Pardo , Harrison Duran , Steven Castro Materia : Sistemas Embebidos

Profesor : Ferney Beltran

**

Ejecución

el ejercicio consiste en desarrollar un código de programa que mediante un sensor de color TCM302 permita leer una determinada serie de colores, adicional a eso también permitirá el movimiento de dos motores nema que seran movidos no solo por los diferentes telecomandos que se enviaran si no también mediante un joystik , el código hará que un buzzer emita diferentes sonidos dependiendo de su frecuencia ,todo esto se logra debido a una tarjeta embebida llamada STM32L476 Núcleo-64 y el compilador gratuito de la pagina de MBED,por medio de la aplicación COOLTERM se enviaran los diferentes telecomandos anteriormente mencionados y nombrados en dicho código, donde se logre habilitar y des habilitar cada uno de los componentes utilizados en nuestro carro robotico

/media/uploads/stevencastro/gmhg.png

Manual del usuario

/media/uploads/stevencastro/1.png /media/uploads/stevencastro/2.png /media/uploads/stevencastro/3.png /media/uploads/stevencastro/4.png /media/uploads/stevencastro/11.png /media/uploads/stevencastro/12.png

Manual Técnico

componentes del sistema

  • Tarjeta embebida a utilizar /media/uploads/stevencastro/stm.png
  • Características
  • La placa Núcleo STM32 ofrece las siguientes características:
  • • Microcontrolador STM32 en paquete LQFP64
  • • Tres LEDs:
  • Comunicación USB (LD1), LED de usuario (LD2), LED de alimentación (LD3)
  • • Dos pulsadores: USUARIO y RESET.
  • • Dos tipos de recursos de extensión.
  • - Conectividad Arduino ™ Uno V3
  • - Cabezales de pines de extensión ST morpho para acceso completo a todas las E / S STM32
  • • Alimentación de la placa flexible:
  • - USB VBUS o fuente externa (3.3 V, 5 V, 7 - 12 V)
  • - Punto de acceso de administración de energía.
  • • Depurador y programador ST-LINK / V2-1 integrados con conector SWD
  • - Selector de modo de selección para usar el kit como un ST-LINK / V2-1 independiente
  • • Capacidad de re-enumeración USB. Tres interfaces diferentes compatibles con USB:
  • - Puerto COM virtual
  • - Almacenamiento masivo
  • - Puerto de depuración
  • • Amplia biblioteca de software libre HAL que incluye una variedad de ejemplos de software
  • BUZZER
    • Funcionaiento un buzzer funciona como un emisor de sonido que se puede graduar mediante la frecuencia que queramos generar en la programacion, se puede conectar de 2 voltios hasta 5 voltios /media/uploads/stevencastro/buzzer_osa8ET1.png
  • Sensor de color características de funcionamiento
  • El sensor es un convertidor de luz a frecuencia que lee una matriz de 8×8 fotodiodos, de tal manera que 16 fotodiodos tienen filtro azul, 16 fotodiodos tienen filtro verde, 16 fotodiodos tienen filtro rojo y 16 fotodiodos son sin filtro.
  • Funciona de 2.7V a 5.5V
  • Alta Resolución de conversión de luz a frecuencia
  • Comunicación directa con el microcontrolador
  • Características en poder bajo (funciona estando apagado) ( Power Down Feature)
  • Error de No linealidad alrededor del 0.2% a 50 KHz
  • Coeficiente de temperatura estable de 200ppm/°C
    • /media/uploads/stevencastro/sensor.png

tablas de configuración de los fotodiodos /media/uploads/stevencastro/tablas.png

Diagrama de funcionamiento /media/uploads/stevencastro/diagrama_de_funcionamiento.png **

  • SO,S1 = Salida de frecuencia
  • S2,S3= Entradas de selección tipo fotodiodo.
  • OUT: Salida de frecuencia (f0)

MOTORES A PASOS

/media/uploads/stevencastro/motor_a_paso.jpg

  • Tamaño: 42 mm x 38 mm cuadrados, sin incluir el eje (NEMA 17)
  • Peso: 285g (10 onzas)
  • Diámetro: 5 mm.
  • Pasos por revolución: 200.
  • Corriente: 1.68A por bobina.
  • Voltaje: 2.7 V.
  • Resistencia: 1.65 Ohm por bobina.
  • Torque: 3.7Kg-cm (51 onzas-in)

MODULO JOYSTIK /media/uploads/stevencastro/josystik.jpg Un joystick suele estar formado por dos potenciómetros a 90º que transforman el movimiento en X e Y del mando en una señal eléctrica proporcional a su posición y que además suele incluir un botón. Así pues, suelen tener 5 pines: X, Y, botón y 3.3V y GND.

Control Auto Con Josytick y Sonidos Musicales Por Sensor de Color

#include "mbed.h"
#include "scolor_TCS3200.h"

Librería para la descarga de la target .h, Librería usada para llamar la configuración general del sensor de color

Control Auto Con Joystick y Sonidos Musicales Por Sensor de Color

#define INITCMD 0xFF
#define DO  3500
#define RE  2500
#define MI  2000
#define FA  3000

Define la inicialización del comando como FF, y definimos la frecuencia de los tonos

Control Auto Con Josytik y Sonidos Musicales Por Sensor de Color

scolor_TCS3200  scolor(D8,D7,D6,D5,D4);

Configuración de pines digitales del sensor de color

Control Auto Con Josytik y Sonidos Musicales Por Sensor de Color

DigitalOut stepper_step(D12);
DigitalOut steppeer_dir(D13);
DigitalOut stepper_step2(D11);
DigitalOut steppeer_dir2(D10);

Configuración de las salidas digitales que controlan al motor

Control Auto Con Josytik y Sonidos Musicales Por Sensor de Color

 PwmOut mybuzzer (D15);

Configuración pin PWM de salida para hacer los sonidos con el Buzzer

Control Auto Con Josytik y Sonidos Musicales Por Sensor de Color

 Serial command(USBTX, USBRX);

Configuración de los pines de comunicación TX Y RX con el pc en serial USB

Control Auto Con Josytik y Sonidos Musicales Por Sensor de Color

 AnalogIn value_analg0 ( A0 ) ;//x
   AnalogIn value_analg1 ( A1 ) ;//y

Configuración Pines análogos para la lectura del joystick

Control Auto Con Josytik y Sonidos Musicales Por Sensor de Color

 Ticker tk1;

Declaración de nuestro Primer Tiemer para que la lectura del sensor sea constante

Control Auto Con Josytik y Sonidos Musicales Por Sensor de Color

InterruptIn button1(D2);
Timeout button1_timeout; 

Declaración de una interrupcion de entrada dada por el botón del joystick

Control Auto Con Josytik y Sonidos Musicales Por Sensor de Color

volatile bool button1_pressed = false; // Used in the main loop
volatile bool button1_enabled = true; // Used for debouncing

void button1_enabled_cb(void)
{
    button1_enabled = true;
}

le damos valor a dos variables booleanas (false o true) las cuales se encargarán de leer el estado del boton joystick la funcion botto1_enabled-cb se encargara de poner la variable botton1_enabled en verdadero eso significa que el boton esta habilitado para oprimir

Control Auto Con Josytik y Sonidos Musicales Por Sensor de Color

void button1_onpressed_cb(void)

{ 
    if (button1_enabled) { // Disabled while the button is bouncing
        button1_enabled = false;
        button1_pressed = true; // To be read by the main loop
        button1_timeout.attach(callback(button1_enabled_cb), 0.3); // Debounce time 300 ms
    }
    int idx = 0;
    if (button1_pressed) { // Etablece cuando se preciona el botn
            button1_pressed = false;
            //NVIC_SystemReset();
             printf("Button pressed %d\n", idx++);
            led1 = !led1;
        }
}

Funcion que controla el ruido al momento de usar el joystick nos dice si el boton esta siendo oprimido y en que momento se podrán volver a guardar los datos que envié en el momento de volverse a oprimir

Control Auto Con Josytik y Sonidos Musicales Por Sensor de Color

  volatile int Exit = 0 ;           
           double In [ 1 ] = {} ; 
           int8_t salida = 0 ;
           uint32_t VELOCITY = 400 ;
           int16_t recepsion [ 2 ] = {} ; 

Declaracion variables

Control Auto Con Josytik y Sonidos Musicales Por Sensor de Color

 void setup_uart ();
    void Rx_interrupt();
    void leer_datos ();
    void sensor_color ();
    void comandosrobot ( uint8_t Parametro, uint8_t Comandos );

Declaración Funciones

Control Auto Con Josytik y Sonidos Musicales Por Sensor de Color

int main() {
    setup_uart();
    button1.fall(callback(button1_onpressed_cb));
    tk1.attach (&sensor_color, 0.8 );

en nuestro cuerpo principal empezamos con la lectura de la velocidad de recepción de datos en baudios y se tendrá en cuenta el estado del boton del joystick para no interrumpir el código principal ademas de esto cada 0.38 micro segundo la función de sensar color sera llamada para que lea el color

Control Auto Con Josytik y Sonidos Musicales Por Sensor de Color

     while(1){  
        leer_datos();
        comandosrobot ( recepsion [ 1 ], recepsion [ 0 ] );
}

nuestro primer while se basara en la lectura de los comandos que enviemos por el programa cool tearm desde la función leer datos que guardara los valores en un arreglo y se evaluaran en la función comandosrobot donde se guardan las acciones de los periféricos de nuestro robot

Control Auto Con Josytik y Sonidos Musicales Por Sensor de Color

    void setup_uart()   {
    command.baud(115200);
}

función que establece la velocidad de comunicación

Control Auto Con Josytik y Sonidos Musicales Por Sensor de Color

    void leer_datos()    {
 
    while ( command.getc()!= INITCMD ) ;
    uint8_t i ;
    
    for ( i = 0 ; i < 2 ; i++){
        
        recepsion [ i ] = command.getc (); 
        
        }
}

función que lee los datos enviados por el pc mientras la inicializacion del comando se evalúa se guardan los datos en un arreglo de 3 datos los cuales se guardaran en una variable llamada recepción

Control Auto Con Josytik y Sonidos Musicales Por Sensor de Color

        void Rx_interrupt() {
    Exit = 1;
    command.attach( NULL, Serial::RxIrq );
     printf("int ");        
    return ;
 
}

Funcion Interrupccion

Control Auto Con Josytik y Sonidos Musicales Por Sensor de Color

 void sensor_color(){
        
    long     red = scolor.ReadRed();
    long     green = scolor.ReadGreen();
    long     blue = scolor.ReadBlue();
    long     clear = scolor.ReadClear();
    long freqrojo;
    long freqverde;
    long freqazul;
     long freqclear;

Funcion Inicializacion del sensor de color

Control Auto Con Josytik y Sonidos Musicales Por Sensor de Color

     freqrojo=((1.0/(2*red))*1000);
          freqverde=((1.0/(2*green))*1000);
            freqazul=((1.0/(2*blue))*1000);
             freqclear=((1.0/(2*clear))*1000);

Obtencion de Frecuencias de lectura del sensor

Control Auto Con Josytik y Sonidos Musicales Por Sensor de Color

 if ( freqrojo>=20 and  freqrojo <=31) // lee  rojo
        {
            if (freqverde >=7 and freqverde <=11 )
            {
                if ( freqazul>=10 and freqazul<=15)
                {
                    if (freqclear>=40 and freqclear <=55) 
                    {
                        
            printf("|FE 01|\n");
            mybuzzer.period_ms(200);
            mybuzzer.write(0.5);
            wait_ms(4000);
            mybuzzer.write(0);
}

Lectura Color Rojo

Control Auto Con Josytik y Sonidos Musicales Por Sensor de Color

if ( freqrojo>=10 and  freqrojo <=15)  // leer azul 
        {
            if (freqverde>=11 and freqverde <=15)
            {
                if ( freqazul>=25 and  freqazul <=31)
                {   if (freqclear >=45 and freqclear <=62){
            
            printf("|FE 02|\n"); 
            mybuzzer.period_ms(300);
            mybuzzer.write(0.5);
            wait_ms(4000);
            mybuzzer.write(0); 
            }     
        

Lectura color Azul

Control Auto Con Josytik y Sonidos Musicales Por Sensor de Color

 if ( freqrojo>=10 and freqrojo<=21) // lee verde
        {
            if (freqverde>=12 and freqverde<=33)
            {
                if ( freqazul>=12 and  freqazul<=20)
                {
                    if (freqclear>=40 and freqclear<=55 ){
            printf("|FE 03|\n");
            mybuzzer.period_ms(500);
            mybuzzer.write(0.5);
            wait_ms(4000);
            mybuzzer.write(0);
                        }

Lectura color Verde

Control Auto Con Josytik y Sonidos Musicales Por Sensor de Color

 if ( freqrojo>=55 and freqrojo<=70) // lee  amarillo
        {
            if (freqverde>=41 and freqverde<=55)
            {
                if ( freqazul>=25 and  freqazul<=31)
                {
             if (freqclear>=71 and freqclear<=170 )
             {
                        
            printf("|FE 04|\n");
            mybuzzer.period_ms(600);
            mybuzzer.write(0.5);
            wait_ms(4000);
            mybuzzer.write(0);
                     
                }

Lectura Color Amarillo

Control Auto Con Josytik y Sonidos Musicales Por Sensor de Color

 if (red <=200) 
        {
            if (green <=300)
            {
                if (blue <=200)
                {
                        
            printf("|FE 00|\n");

Error en la lectura

Control Auto Con Josytik y Sonidos Musicales Por Sensor de Color

 void comandosrobot ( uint8_t Parametro, uint8_t Comandos ){
        uint8_t i ;
        uint8_t j ;
            switch (Comandos){
            case 0 : 
                printf ("Robot sensador de color Reproductor de sonidos");
            break;

Caso 0, Inicializacion Robot

Control Auto Con Josytik y Sonidos Musicales Por Sensor de Color

case 1 :
                printf ( "sonido:1              Tiempo: %d s  \n" , Parametro ) ;
                mybuzzer.period_us ( RE ) ;
                mybuzzer.write ( 0.8 ) ;
                wait( Parametro ) ;
                mybuzzer.write ( 0 ) ;
            break; 

Caso1, Activacion sonido 1

Control Auto Con Josytik y Sonidos Musicales Por Sensor de Color

case 2 :
                printf ( "sonido:2              Tiempo: %d s  \n" , Parametro ) ;
                mybuzzer.period_us ( MI ) ;
                mybuzzer.write ( 0.8 ) ;
                wait( Parametro ) ;
                mybuzzer.write ( 0 ) ;
            break;

Caso2: Activacion sonido 2

Control Auto Con Josytik y Sonidos Musicales Por Sensor de Color

case 3 :
                printf ( "sonido:3              Tiempo: %d s  \n" , Parametro ) ;
                mybuzzer.period_us ( DO ) ;
                mybuzzer.write ( 0.8 ) ;
                wait( Parametro ) ;
                mybuzzer.write ( 0 ) ;
            break;

Caso 3,Activacion sonido 3

Control Auto Con Josytik y Sonidos Musicales Por Sensor de Color

 case 4 :
                printf ( "sonido:4              Tiempo: %d s  \n" , Parametro ) ;
                mybuzzer.period_us ( FA ) ;
                mybuzzer.write ( 0.8 ) ;
                wait( Parametro ) ;
                mybuzzer.write ( 0 ) ;
            break;

Caso 4, Activacion sonido 4

Control Auto Con Josytik y Sonidos Musicales Por Sensor de Color

case 5 : 
                
                steppeer_dir = 0;
                steppeer_dir2 = 0 ;
                wait_us ( 1 );
                for ( j = 1 ; j <= Parametro ; j++){
            
                    for ( i= 0 ; i <=  250 ; i++ ){
                 
                        stepper_step = 1 ; 
                        stepper_step2 = 1;
                        wait_us(VELOCITY);
                        stepper_step = 0;
                        stepper_step2 = 0;
                        wait_us ( VELOCITY );
            
                    } 
                }
            break ; 

Caso 5, Activacion Motores hacia adelante

Control Auto Con Josytik y Sonidos Musicales Por Sensor de Color

case 6 : 
            printf ("atras");
               steppeer_dir = 1;
                steppeer_dir2 = 1;
                wait_us ( 1 );
                for ( j = 1 ; j <= Parametro ; j++){
                    for ( i= 0 ; i <=  200; i++ ){
                 
                        stepper_step = 1  ; 
                        stepper_step2 = 1 ;
                        wait_us( VELOCITY ) ;
                        stepper_step = 0 ;
                        stepper_step2 = 0 ;
                        wait_us ( VELOCITY ) ;
            
                    } 
                
                }
                
            break ;

Caso 6, Activacion Motores hacia atras

Control Auto Con Josytik y Sonidos Musicales Por Sensor de Color

case 7 : 
            printf ("derecha");
            //steppeer_dir = 0;
            steppeer_dir2 = 0 ;
                wait_us ( 1 );
                for ( j = 1 ; j <= Parametro ; j++){
            
                    for ( i= 0 ; i <=  200 ; i++ ){
                 
                       // stepper_step = 1 ; 
                       stepper_step2 = 1;
                        wait_us(VELOCITY);
                        //stepper_step = 0;
                        stepper_step2 = 0;
                        wait_us ( VELOCITY );
            
                    } 
                }
            break ; 

Caso 7, Activacion Motores hacia la derecha

Control Auto Con Josytik y Sonidos Musicales Por Sensor de Color

case 8 : 
            printf ("izquierda");
            steppeer_dir = 0;
                //steppeer_dir2 = 0 ;
                wait_us ( 1 );
                for ( j = 1 ; j <= Parametro ; j++){
                  for ( i= 0 ; i <=  200 ; i++ ){     
                        stepper_step = 1 ; 
                  //      stepper_step2 = 1;
                        wait_us(VELOCITY);
                        stepper_step = 0;
                    //    stepper_step2 = 0;
                        wait_us ( VELOCITY );
            
                    } 
                }
                //command.attach( callback(Rx_interrupt), Serial::RxIrq );
            break ;

Caso 8, Activacion Motores hacia la izquierda

Control Auto Con Josytik y Sonidos Musicales Por Sensor de Color

    case 9 :
            switch ( Parametro ){
                case 1:
                    VELOCITY = 400 ;
                break ;
                case 2:
                    VELOCITY = 2500 ;
                break ;
                case 3:
                    VELOCITY = 5000 ;
                break ; 
                }
                break;  

Caso 9, Cambio de velocidad de los motores

Control Auto Con Josytik y Sonidos Musicales Por Sensor de Color

case 10:
            if ( Parametro == 1){ 
                Exit=0;            
                while ( !Exit ){ 
                    In [ 0 ] = value_analg0.read(); // Converts and read the analog input value (value from 0.0 to 1.0)    
                    printf(" X = %.04f \n", In[0]); 

Caso 10, Cambio de control al Joystick

Control Auto Con Josytik y Sonidos Musicales Por Sensor de Color

if ( In [ 0 ] > 0.6 ){ 
 
                        steppeer_dir = 1;
                        wait_us( 1 );
                
                        for ( i= 0 ; i <=  50 ; i++ ){
                 
                            stepper_step = 1 ; 
                            //stepper_step2 = 1 ;
                            wait_us( VELOCITY ) ;
                            stepper_step = 0 ;
                            //stepper_step2 = 0 ;
                            wait_us( VELOCITY ) ;
                        }

Control direccion Joystick hacia adelante

Control Auto Con Josytik y Sonidos Musicales Por Sensor de Color

  if ( In [ 0 ] < 0.3 ){ 
                
                        steppeer_dir2 = 1;
                        wait_us( 1 );
                        
                        for ( i= 0 ; i <=  50 ; i++ ){
                 
                            //stepper_step = 1 ; 
                            stepper_step2 = 1 ;
                            wait_us( VELOCITY ) ;
                            //stepper_step = 0 ;
                            stepper_step2 = 0 ;
                            wait_us( VELOCITY ) ;
                        

Control direccion Joystick hacia atras

Control Auto Con Josytik y Sonidos Musicales Por Sensor de Color

 In [ 1 ] = value_analg1.read(); // Converts and read the analog input value (value from 0.0 to 1.0)    
                    //printf(" Y = %.04f \n", In[0]); 
                                
                    if (In [ 1 ] > 0.6 ){
                     
                        steppeer_dir = 1 ;
                        steppeer_dir2 = 0 ;
                        wait_us( 1 );
                        
                        for ( i= 0 ; i <= 50 ; i++ ){
                 
                            stepper_step = 1 ; 
                            stepper_step2 = 1 ;
                            wait_us( VELOCITY ) ;
                            stepper_step = 0 ;
                            stepper_step2 = 0 ;
                            wait_us( VELOCITY ) ;

Control direccion Joystick hacia la derecha

Control Auto Con Josytik y Sonidos Musicales Por Sensor de Color

                                        
                    if ( In [ 1 ] < 0.3 ){
                     
                        steppeer_dir = 0 ;
                        steppeer_dir2 = 1 ;
                        wait_us( 1 );
                        
                        for ( i= 0 ; i <= 50 ; i++ ){
                         
                            stepper_step = 1 ; 
                            stepper_step2 = 1 ;
                            wait_us( VELOCITY ) ;
                            stepper_step = 0 ;
                            stepper_step2 = 0 ;
                            wait_us ( VELOCITY ) ;

Control direccion Joystick hacia la izquierda

Control Auto Con Josytik y Sonidos Musicales Por Sensor de Color

 command.attach( callback(Rx_interrupt), Serial::RxIrq );
                    wait_us ( 1 );
                    
                }
            }              
            break ;
            
Committer:
stevencastro
Date:
Thu Mar 07 21:26:34 2019 +0000
Revision:
2:1c61db0b3207
Parent:
1:334b40b47233
sensordecoloresfine

Who changed what in which revision?

UserRevisionLine numberNew contents of line
fabeltranm 0:fa6bdbdd4239 1 #include "mbed.h"
fabeltranm 0:fa6bdbdd4239 2 #include "scolor_TCS3200.h"
fabeltranm 0:fa6bdbdd4239 3
fabeltranm 0:fa6bdbdd4239 4 /* *****************************************************************************
fabeltranm 0:fa6bdbdd4239 5 Programa que solicita telemetria al sistema embebido, por medio del comando 0xFe
fabeltranm 0:fa6bdbdd4239 6 para preguntar por el color que detecta el sensor TCS3200
fabeltranm 0:fa6bdbdd4239 7
fabeltranm 0:fa6bdbdd4239 8 el sistema embebido recibe el inicio de trama FE y el número de comado: 01
fabeltranm 0:fa6bdbdd4239 9
fabeltranm 0:fa6bdbdd4239 10 | INITELE | CMD |
fabeltranm 0:fa6bdbdd4239 11 | 0xfe | 0x01 |
fabeltranm 0:fa6bdbdd4239 12
fabeltranm 0:fa6bdbdd4239 13
fabeltranm 0:fa6bdbdd4239 14 para enviar los comandos usar el programa Coolterm http://freeware.the-meiers.org/
fabeltranm 0:fa6bdbdd4239 15
fabeltranm 0:fa6bdbdd4239 16
fabeltranm 0:fa6bdbdd4239 17 @fabeltranm 2019
fabeltranm 0:fa6bdbdd4239 18 fbeltranm@ecci.edu.co
fabeltranm 0:fa6bdbdd4239 19
fabeltranm 0:fa6bdbdd4239 20 ********************************************************************************
fabeltranm 0:fa6bdbdd4239 21 datasheet https://www.mouser.com/catalog/specsheets/TCS3200-E11.pdf
fabeltranm 0:fa6bdbdd4239 22
fabeltranm 0:fa6bdbdd4239 23
fabeltranm 0:fa6bdbdd4239 24 S0 Frequency scaling
fabeltranm 0:fa6bdbdd4239 25 S1 Frequency scaling
fabeltranm 0:fa6bdbdd4239 26 S2 Photo diode selection
fabeltranm 0:fa6bdbdd4239 27 S3 Photo diode selection
fabeltranm 0:fa6bdbdd4239 28 OutFreq Frequency
fabeltranm 0:fa6bdbdd4239 29
fabeltranm 0:fa6bdbdd4239 30 -----------------------------------
fabeltranm 0:fa6bdbdd4239 31 | ____________ ____________ |
fabeltranm 0:fa6bdbdd4239 32 ----> | | | | | | ___ ___
fabeltranm 0:fa6bdbdd4239 33 Light | | Photodiode | | Current |--|---OUTPUT_FREQ | |___| |___
fabeltranm 0:fa6bdbdd4239 34 ----> | | Array |---| to | |
fabeltranm 0:fa6bdbdd4239 35 | | | | Frequency | |
fabeltranm 0:fa6bdbdd4239 36 | |____________| |____________| |
fabeltranm 0:fa6bdbdd4239 37 | ^ ^ ^ ^ |
fabeltranm 0:fa6bdbdd4239 38 -------|--|-------------|--|-------
fabeltranm 0:fa6bdbdd4239 39 | | | |
fabeltranm 0:fa6bdbdd4239 40 S2 S3 S0 S1
fabeltranm 0:fa6bdbdd4239 41
fabeltranm 0:fa6bdbdd4239 42 SO | S1 | OUTPUT FREQUENCY SCALING | | S2 | S3 | PHOTODIODE TYPE |
fabeltranm 0:fa6bdbdd4239 43 0 | 0 | power down | | 0 | 0 | Red |
fabeltranm 0:fa6bdbdd4239 44 0 | 1 | 2% | | 0 | 1 | Blue |
fabeltranm 0:fa6bdbdd4239 45 1 | 0 | 20% | | 1 | 0 | Clear (no filter) |
fabeltranm 0:fa6bdbdd4239 46 1 | 1 | 100% | | 1 | 1 | Green |
fabeltranm 0:fa6bdbdd4239 47
fabeltranm 0:fa6bdbdd4239 48 ******************************************************************************/
stevencastro 2:1c61db0b3207 49 #define INITCMD 0xFF // comando de sonido ff 01 3
stevencastro 2:1c61db0b3207 50 #define INITELE 0xFE // comando de sensor de colores fe 01
stevencastro 2:1c61db0b3207 51 #define CMD 0x01 //
fabeltranm 0:fa6bdbdd4239 52
stevencastro 2:1c61db0b3207 53 #define DO 104
stevencastro 2:1c61db0b3207 54 #define RE 153
stevencastro 2:1c61db0b3207 55 #define MI 166
stevencastro 2:1c61db0b3207 56 #define FA 184
stevencastro 2:1c61db0b3207 57 #define SO 205
fabeltranm 0:fa6bdbdd4239 58
fabeltranm 0:fa6bdbdd4239 59
fabeltranm 0:fa6bdbdd4239 60
fabeltranm 0:fa6bdbdd4239 61 Serial command(USBTX, USBRX);
fabeltranm 1:334b40b47233 62 // S0, S1, S2, S3, OUT
fabeltranm 1:334b40b47233 63 scolor_TCS3200 scolor(PA_8, PB_10, PB_4, PB_5, PB_3);
stevencastro 2:1c61db0b3207 64 PwmOut mybuzzer(PB_9);
fabeltranm 0:fa6bdbdd4239 65
fabeltranm 0:fa6bdbdd4239 66 // definición de las funciones
stevencastro 2:1c61db0b3207 67
stevencastro 2:1c61db0b3207 68 void setup_uart(); // funcion conexion pc
stevencastro 2:1c61db0b3207 69 void leer_datos(); // funcion de lectura de comandos HEX
stevencastro 2:1c61db0b3207 70 void leer_color();// recepcion de la lectura de frecuencia del sensor
stevencastro 2:1c61db0b3207 71
stevencastro 2:1c61db0b3207 72 void buzzer_on(uint8_t tono, uint8_t tiempo);
fabeltranm 0:fa6bdbdd4239 73
fabeltranm 0:fa6bdbdd4239 74 uint8_t cmd;
stevencastro 2:1c61db0b3207 75 uint8_t tono; // variable almacena la frecuencia del buzzer
stevencastro 2:1c61db0b3207 76 uint8_t tiempo; // varable almacena los tiempos del buzzer leer_datos()
fabeltranm 0:fa6bdbdd4239 77
fabeltranm 0:fa6bdbdd4239 78 int main() {
fabeltranm 0:fa6bdbdd4239 79
fabeltranm 0:fa6bdbdd4239 80 setup_uart();
fabeltranm 0:fa6bdbdd4239 81 while(1){
fabeltranm 0:fa6bdbdd4239 82 leer_datos();
fabeltranm 0:fa6bdbdd4239 83 if (cmd==CMD){}
fabeltranm 1:334b40b47233 84 leer_color();
stevencastro 2:1c61db0b3207 85 buzzer_on(tono, tiempo);
fabeltranm 0:fa6bdbdd4239 86 }
fabeltranm 0:fa6bdbdd4239 87 }
fabeltranm 0:fa6bdbdd4239 88
fabeltranm 0:fa6bdbdd4239 89
fabeltranm 0:fa6bdbdd4239 90
fabeltranm 0:fa6bdbdd4239 91 void setup_uart(){
stevencastro 2:1c61db0b3207 92
fabeltranm 0:fa6bdbdd4239 93 command.baud(115200);
stevencastro 2:1c61db0b3207 94 printf ("hola mundo sonido vicion");
stevencastro 2:1c61db0b3207 95
stevencastro 2:1c61db0b3207 96
fabeltranm 0:fa6bdbdd4239 97 }
fabeltranm 0:fa6bdbdd4239 98
fabeltranm 0:fa6bdbdd4239 99
fabeltranm 0:fa6bdbdd4239 100 void leer_datos(){
stevencastro 2:1c61db0b3207 101
fabeltranm 0:fa6bdbdd4239 102 while(command.getc()!= INITELE);
fabeltranm 0:fa6bdbdd4239 103 cmd=command.getc();
fabeltranm 1:334b40b47233 104
stevencastro 2:1c61db0b3207 105 while(command.getc()!= INITCMD);
stevencastro 2:1c61db0b3207 106 tono=command.getc();
stevencastro 2:1c61db0b3207 107 tiempo=command.getc();
stevencastro 2:1c61db0b3207 108
fabeltranm 0:fa6bdbdd4239 109
fabeltranm 0:fa6bdbdd4239 110 }
fabeltranm 0:fa6bdbdd4239 111
fabeltranm 0:fa6bdbdd4239 112
fabeltranm 0:fa6bdbdd4239 113 void leer_color(){
fabeltranm 0:fa6bdbdd4239 114
fabeltranm 1:334b40b47233 115
fabeltranm 1:334b40b47233 116
fabeltranm 0:fa6bdbdd4239 117 long red = scolor.ReadRed();
fabeltranm 0:fa6bdbdd4239 118 long green = scolor.ReadGreen();
fabeltranm 0:fa6bdbdd4239 119 long blue = scolor.ReadBlue();
fabeltranm 0:fa6bdbdd4239 120 long clear = scolor.ReadClear();
fabeltranm 0:fa6bdbdd4239 121
stevencastro 2:1c61db0b3207 122 //printf("RED: %5d GREEN: %5d BLUE: %5d CLEAR: %5d \n ", red, green, blue, clear);
stevencastro 2:1c61db0b3207 123
stevencastro 2:1c61db0b3207 124 if (red < blue && green > blue && red < 35)
stevencastro 2:1c61db0b3207 125 {
stevencastro 2:1c61db0b3207 126 printf (" Rojo");
stevencastro 2:1c61db0b3207 127 }
stevencastro 2:1c61db0b3207 128 else if (blue < red && blue < green && green < red)
stevencastro 2:1c61db0b3207 129 {
stevencastro 2:1c61db0b3207 130 printf (" Azul");
stevencastro 2:1c61db0b3207 131 }
stevencastro 2:1c61db0b3207 132 else if (red > green && blue > green )
stevencastro 2:1c61db0b3207 133 {
stevencastro 2:1c61db0b3207 134 printf(" Verde");
stevencastro 2:1c61db0b3207 135 }
stevencastro 2:1c61db0b3207 136 else{
stevencastro 2:1c61db0b3207 137 printf(" ");
stevencastro 2:1c61db0b3207 138 }
stevencastro 2:1c61db0b3207 139 }
fabeltranm 0:fa6bdbdd4239 140
stevencastro 2:1c61db0b3207 141
stevencastro 2:1c61db0b3207 142 void buzzer_on(uint8_t tono, uint8_t tiempo){
stevencastro 2:1c61db0b3207 143
stevencastro 2:1c61db0b3207 144 /* complementar el código necesario
stevencastro 2:1c61db0b3207 145 */
fabeltranm 0:fa6bdbdd4239 146
stevencastro 2:1c61db0b3207 147 mybuzzer.write(0);
stevencastro 2:1c61db0b3207 148 switch(tono){
stevencastro 2:1c61db0b3207 149 case 1: mybuzzer.period_us(DO);break;
stevencastro 2:1c61db0b3207 150 case 2: mybuzzer.period_us(RE);break;
stevencastro 2:1c61db0b3207 151 case 3: mybuzzer.period_us(MI);break;
stevencastro 2:1c61db0b3207 152 case 4: mybuzzer.period_us(FA);break;
stevencastro 2:1c61db0b3207 153 default:mybuzzer.period_us(SO); break;
stevencastro 2:1c61db0b3207 154 }
stevencastro 2:1c61db0b3207 155 mybuzzer.write(0.5);
stevencastro 2:1c61db0b3207 156
stevencastro 2:1c61db0b3207 157 wait(tiempo);
stevencastro 2:1c61db0b3207 158 mybuzzer.write(0);
stevencastro 2:1c61db0b3207 159
stevencastro 2:1c61db0b3207 160
stevencastro 2:1c61db0b3207 161 }
fabeltranm 0:fa6bdbdd4239 162
fabeltranm 0:fa6bdbdd4239 163
fabeltranm 0:fa6bdbdd4239 164