PSOC 5 interactuando con el sensor PIR

0

Estoy intentando conectar el PSOC5 LP097 con el sensor PIR para activar el motor paso a paso para mi sistema de comedero para mascotas. Además, cada vez que el sensor PIR detecta un movimiento, trato de enviar un correo usando PySerial.

El problema al que me estoy enfrentando actualmente es que la salida del sensor PIR siempre es alta cuando intento leerlo a través del software. Intenté conectar un LED a la salida del sensor PIR y se activa solo cuando hay un movimiento en frente del sensor. Sin embargo, no entiendo por qué el software lo lee como HIGH siempre y sigue activando el motor paso a paso

Debajo está mi código:

#define MaxCountForTurns 300 //count for 2 rotations of the motor

int main(void)
{
CyGlobalIntEnable; /* Enable global interrupts. */


uint16 onCount = 0x00;
uint16 offCount = 0x00;
uint8 gateClose = 0x00;
uint8 motorON = 0x00;
uint8 pirValue = 0x00;


UART_Start(); 

for(;;)
{
    if (gateClose == 0x00) {
        pirValue |=  pirInput_Read();           
    }

    if ((pirValue & 0x01) && (motorON == 0)) {
        motorON = 0x01;
        UART_PutString("Pet movement detected : Motor will be turned ON\n");
        CyDelay(10); 
    }
    if(motorON) {
        onCount++;
        Control_Reg_Write(0x0c);
        CyDelay(10);          
        Control_Reg_Write(0x06);
        CyDelay(10);           
        Control_Reg_Write(0x03);
        CyDelay(10);          
        Control_Reg_Write(0x09);
        CyDelay(10);            
     }   

        if (gateClose) {
            offCount++;
            Control_Reg_Write(0x09);
            CyDelay(10);          
            Control_Reg_Write(0x03);
            CyDelay(10);           
            Control_Reg_Write(0x06);
            CyDelay(10);          
            Control_Reg_Write(0x0c);
            CyDelay(10);                
        }

        // turns in fwd direction
        if(onCount > MaxCountForTurns) {
            motorON = 0x00;
            onCount = 0x00;
            pirValue = 0x00;
            CyDelay(50);
            gateClose = 0x01;
        }

        // turns in reverse direction
        if(offCount > MaxCountForTurns) {                
            gateClose &= 0x00;
        }
    }        
}

El código de Python para enviar el correo:

    import time
    import serial
    import smtplib
    TO = '[email protected]'
    GMAIL_USER = '[email protected]'
    GMAIL_PASS = 'psoc_pir_pet_feeder'
    SUBJECT = 'Pet Feeder System Alert!!'
    TEXT = 'PIR sensor detected pet movement, Motor will be turned ON'
    ser = serial.Serial('COM2', 9600)
    def send_email():
        print("Sending Email")
        smtpserver = smtplib.SMTP("smtp.gmail.com",587)
        smtpserver.ehlo()
        smtpserver.starttls()
        smtpserver.ehlo
        smtpserver.login(GMAIL_USER, GMAIL_PASS)
        header = 'To:' + TO + '\n' + 'From: ' + GMAIL_USER
        header = header + '\n' + 'Subject:' + SUBJECT + '\n'
        print header
        msg = header + '\n' + TEXT + ' \n\n'
        smtpserver.sendmail(GMAIL_USER, TO, msg)
        smtpserver.close()

    while True:
        message = ser.readline()
        print(message)
        if message[0] == 'P' :
            send_email()
        time.sleep(0.5)

He intentado hacer el mismo proyecto con arduino UNO y funcionó perfectamente. Sin embargo aquí veo las siguientes observaciones:

  1. El motor gira en dirección fwd una vez e invierte la dirección una vez.

  2. Más adelante, el motor sigue girando en la dirección de fwd.

  3. en PySerial: Pet movement detected : Motor will be turned ON el mensaje se muestra continuamente. El correo no se está enviando a la identificación del correo electrónico.

Me doy cuenta de que la lectura PIR que intento hacer no es correcta. Sin embargo, no me doy cuenta de cómo hacerlo de manera eficiente. La segunda pregunta está relacionada con el piserial. Supongo que el puerto serie está ocupado con la respuesta recibida de PSOC5 y, por lo tanto, no procede a enviar un correo electrónico a la dirección especificada.  ¿Podría alguno de ustedes ayudar?

Editar: He solucionado los problemas de giro del motor, un error simple en la implementación relacionada con el offCount . Sin embargo, todavía estoy atascado en la parte pyserial del proyecto. No se envía ningún correo electrónico a la dirección de correo electrónico. Las sugerencias son muy apreciadas.

    
pregunta vk_gst

1 respuesta

0

En lugar de leer desde el PSOC, leí desde un simple puerto digital y puse un interruptor en él. Luego puede depurar su código antes de finalmente introducir las lecturas del registro PSOC.

    
respondido por el Jack Creasey

Lea otras preguntas en las etiquetas