Nota
¡Hola! Bienvenido a la comunidad de entusiastas de SunFounder para Raspberry Pi, Arduino y ESP32 en Facebook. Sumérgete más en Raspberry Pi, Arduino y ESP32 con otros entusiastas.
¿Por qué unirse?
Soporte Experto: Resuelve problemas post-venta y desafíos técnicos con la ayuda de nuestra comunidad y equipo.
Aprende y Comparte: Intercambia consejos y tutoriales para mejorar tus habilidades.
Avances Exclusivos: Obtén acceso anticipado a nuevos anuncios de productos y adelantos.
Descuentos Especiales: Disfruta de descuentos exclusivos en nuestros productos más recientes.
Promociones y Sorteos Festivos: Participa en sorteos y promociones festivas.
👉 ¿Listo para explorar y crear con nosotros? Haz clic en [Aquí] y únete hoy mismo.
3.1.9 Timbre de Alarma
Introducción
En este proyecto, haremos un dispositivo de alarma manual. Puedes reemplazar el interruptor de palanca con un termistor o un sensor fotosensible para crear una alarma de temperatura o de luz.
Componentes Necesarios
En este proyecto, necesitamos los siguientes componentes.
Es definitivamente conveniente comprar un kit completo, aquí está el enlace:
Nombre |
COMPONENTES EN ESTE KIT |
ENLACE |
|---|---|---|
Kit Raphael |
337 |
También puedes comprarlos por separado en los siguientes enlaces.
INTRODUCCIÓN DE COMPONENTES |
ENLACE DE COMPRA |
|---|---|
Diagrama Esquemático
Nombre T-Board |
físico |
wiringPi |
BCM |
GPIO17 |
Pin 11 |
0 |
17 |
GPIO18 |
Pin 12 |
1 |
18 |
GPIO27 |
Pin 13 |
2 |
27 |
GPIO22 |
Pin 15 |
3 |
22 |
Procedimientos Experimentales
Paso 1: Construye el circuito.
Paso 2: Cambia de directorio.
cd ~/raphael-kit/c/3.1.9/
Paso 3: Compila el código.
gcc 3.1.9_AlarmBell.c -lwiringPi -lpthread
Paso 4: Ejecuta el programa.
sudo ./a.out
Después de iniciar el programa, coloca el interruptor de palanca a la derecha y el zumbador emitirá sonidos de alarma. Al mismo tiempo, los LED rojos y verdes parpadearán a una cierta frecuencia.
Nota
Si no funciona después de ejecutar el programa, o aparece un mensaje de error: "wiringPi.h: No such file or directory", consulta Instalar y verificar WiringPi.
Explicación del Código
#include <pthread.h>
En este código, utilizaremos una nueva biblioteca, pthread.h, que es un conjunto de bibliotecas comunes de hilos y puede realizar multihilos. Añadimos el parámetro -lpthread en el momento de la compilación para el trabajo independiente del LED y el zumbador.
void *ledWork(void *arg){
while(1)
{
if(flag==0){
pthread_exit(NULL);
}
digitalWrite(ALedPin,HIGH);
delay(500);
digitalWrite(ALedPin,LOW);
digitalWrite(BLedPin,HIGH);
delay(500);
digitalWrite(BLedPin,LOW);
}
}
La función ledWork() ayuda a establecer el estado de funcionamiento de estos 2 LEDs:
mantiene el LED verde encendido durante 0,5s y luego se apaga;
de manera similar, mantiene el LED rojo encendido durante 0,5s y luego se apaga.
void *buzzWork(void *arg){
while(1)
{
if(flag==0){
pthread_exit(NULL);
}
if((note>=800)||(note<=130)){
pitch = -pitch;
}
note=note+pitch;
softToneWrite(BeepPin,note);
delay(10);
}
}
La función buzzWork() se utiliza para establecer el estado de funcionamiento del zumbador.
Aquí establecemos la frecuencia entre 130 y 800, para acumular o disminuir en un intervalo de 20.
void on(){
flag = 1;
if(softToneCreate(BeepPin) == -1){
printf("setup softTone failed !");
return;
}
pthread_t tLed;
pthread_create(&tLed,NULL,ledWork,NULL);
pthread_t tBuzz;
pthread_create(&tBuzz,NULL,buzzWork,NULL);
}
En la función on():
Define la marca
flag=1, indicando el final del hilo de control.Crea un pin de tono controlado por software
BeepPin.Crea dos hilos separados para que el LED y el zumbador puedan funcionar al mismo tiempo.
pthread_t tLed: Declara un hilotLed.pthread_create(&tLed,NULL,ledWork,NULL): Crea el hilo y su prototipo es el siguiente:
int pthread_create(pthread_t *restrict tidp,const pthread_attr_t*restrict_attr,void*(*start_rtn)(void*),void *restrict arg);
Si tiene éxito, devuelve 0; de lo contrario, devuelve el número de error -1.
El primer parámetro es un puntero al identificador del hilo.
El segundo se utiliza para configurar el atributo del hilo.
El tercero es la dirección de inicio de la función de ejecución del hilo.
El último es el argumento que se pasa a la función de ejecución.
void off(){
flag = 0;
softToneStop(BeepPin);
digitalWrite(ALedPin,LOW);
digitalWrite(BLedPin,LOW);
}
- La función
Off()define “flag=0” para salir de los hilos ledWork y buzzWork y luego apaga el zumbador y el LED.
int main(){
setup();
int lastState = 0;
while(1){
int currentState = digitalRead(switchPin);
if ((currentState == 1)&&(lastState==0)){
on();
}
else if((currentState == 0)&&(lastState==1)){
off();
}
lastState=currentState;
}
return 0;
}
Main() contiene todo el proceso del programa: primero lee el valor del interruptor
deslizante; si el interruptor deslizante se mueve hacia la derecha (la lectura es 1),
se llama a la función on(), se activa el zumbador para emitir sonidos y los LEDs
rojo y verde parpadean. De lo contrario, el zumbador y el LED no funcionan.
Imagen del Fenómeno