Chào các bạn hôm nay 220von tiếp tục chia sẽ với các bạn nguyên lý mạch cảm biến phát hiện vật cản dùng tia hồng ngoại dùng trong các thiết bị điện dân dụng như vòi nước rửa tay tự động , chống trộm hay trong công nghiệp như cảm biến đếm sản phẩm và trong cuộc thi robocon như cảm biến dò đường .v.v
Nguyên lý của mạch này như sau : mắt phát hồng ngoại sẽ phát ra sóng ánh sáng có bước sóng hồng ngoại , ở
mắt thu bình thường thì có nội trở rất lớn (khoảng vài trăm kilo ôm ) ,
khi mắt thu bị tia hồng ngoại chiếu vào thì nội trở của nó giảm xuống (
khoảng vài chục ôm). Lợi dụng nguyên lý này người ta đã chế tạo ra các cảm
biến hồng ngoại ( IR )
Hình sau biểu diễn nguyên lí làm việc của cảm biến :
Nguyên lí làm việc
Bây giờ 220von sẽ đi vào phần mạch cảm biến :
Sơ đồ mạch
Ở sơ đồ này 220von sử dụng nguồn cấp 5V DC, ở đầu ra dùng relay nên cho dòng tải ra rất lớn khoản 10A nên rất thuận tiện cho việc đấu thẳng động cơ vào mà không cần qua mạch khuếch đại trung gian
Trong sơ đồ có một biến trở phục vụ cho việc chỉnh độ nhạy của cảm biến và khoản cách của cảm biến
Các loại linh kiện và giá trị từng linh kiện điều được chú thích trong sơ đồ
Cảm biến này 220von không sử dụng sóng mang 38khz nên khoản cách phát hiện vật cản chỉ tầm 5cm trở lại thôi , ở bài chia sẻ sau 220von sẽ hướng dẫn tăng khoản cách cảm biến lên vài mét
Ảnh mạch thực tế :
220von sử dụng linh kiện dán nên phần lớn linh kiện nằm ở mặt dưới của mạch
Video hoạt động của mạch cảm biến :
Một đặc điểm nữa là tia hồng ngoại bị hấp thụ bởi các vật có màu tối nên cảm biến này còn được dùng trong các mạch dò đường ( dò line ) trong các robot tự dò đường
Hy vọng qua bài viết này các bạn mới tìm hiểu về điện tử sẽ nắm rõ được
nguyên lý của loại cảm biến này , và có thể áp dụng vào ứng dụng của các bạn
Thật bất tiện khi bạn chạy lui chạy tới chổ có công tắt để tắt một thiết bị điện trong nhà nào đó trong một khoản thời gian ngắn hoạt động , vậy bạn có mún thiết bị điện của bạn sẽ tự động tắt sau một khoản thời gian hoạt động cần thiết không ví dự như sau 5- 10 phút hoặc sau 1 tiếng 2 tiếng thì thiết bị tự động tắt , khi ấy bạn sẽ không cần phải chạy tới chổ có công tắt để tắt thiết bị đó nữa , 220von sẽ giới thiệu cho bạn một mạch giúp bạn với chức năng như vậy , và giá thành ché tạo mạch này rất rẻ với cách sử dụng rất đơn giản như video mà 220von sẽ giới thiệu sau đây
Mạch hẹn giờ tắt mở thiết bị điện dùng vi điều khiển STM8S103 , sử dụng biến trở để chỉnh thời gian hẹn từ 0 đến 60 phút , hiển thị lên màn hình LED
Mạch sử dụng điện áp 220V , và đóng cắt được tải 220V - 10A bằng relay
Video test mạch với máy bơm nước :
Sơ đồ mạch :
Sơ đồ
Mach IN
Code : Code được viết bằng STVD với trình biên dịch Cosmic 16
Hàm main.h :
/** ****************************************************************************** * @file main.h * @author 220von * @version V1.0.0 * @date * @brief This file is header for module main.c ****************************************************************************** * @attention */
/* Define to prevent recursive inclusion -------------------------------------*/
}
}
///////////////////////////////////////////////////////////////////////////
void hienthi_led7seg(u8 value1,BitStatus dot)
{
u8 chuc;
u8 le;
chuc = value1/10;
le = value1%10;
if(value1<10)putc_to_3_led7seg(0x00,so[value1],dot);
else putc_to_3_led7seg(so[chuc],so[le],dot);
}
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
void main(void)
{
CLK_DeInit();
CLK_HSICmd( ENABLE);
/* Configure the Fcpu to DIV1*/
CLK_SYSCLKConfig(CLK_PRESCALER_CPUDIV1);
/* Configure the HSI prescaler to the optimal value */
CLK_SYSCLKConfig(CLK_PRESCALER_HSIDIV1);
/* Output Fcpu on CLK_CCO pin */
/*CLK_CCOConfig(CLK_OUTPUT_CPU);*/
/* Configure the system clock to use HSI clock source and to run at 16Mhz */
CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO, CLK_SOURCE_HSI, DISABLE, CLK_CURRENTCLOCKSTATE_DISABLE);
/**
* @brief Reports the name of the source file and the source line number
* where the assert_param error has occurred.
* @param file: pointer to the source file name
* @param line: assert_param error line source number
* @retval None
*/
void assert_failed(uint8_t* file, uint32_t line)
{
/* User can add his own implementation to report the file name and line number,
ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
/* Infinite loop */
while (1)
{
}
}
#endif
/**
* @}
*/
/******************* (C) COPYRIGHT 220von *****END OF FILE****/
Và cuối cùng là hàm ngắt phục vụ cho phần đếm thời gian :
/* Public functions ----------------------------------------------------------*/
/** @addtogroup GPIO_Toggle
* @{
*/
#ifdef _COSMIC_
/**
* @brief Dummy interrupt routine
* @param None
* @retval None
*/
INTERRUPT_HANDLER(NonHandledInterrupt, 25)
{
/* In order to detect unexpected events during development,
it is recommended to set a breakpoint on the following instruction.
*/
}
#endif /*_COSMIC_*/
/**
* @brief TRAP interrupt routine
* @param None
* @retval None
*/
INTERRUPT_HANDLER_TRAP(TRAP_IRQHandler)
{
/* In order to detect unexpected events during development,
it is recommended to set a breakpoint on the following instruction.
*/
}
/**
* @brief Top Level Interrupt routine
* @param None
* @retval None
*/
INTERRUPT_HANDLER(TLI_IRQHandler, 0)
{
/* In order to detect unexpected events during development,
it is recommended to set a breakpoint on the following instruction.
*/
}
/**
* @brief Auto Wake Up Interrupt routine
* @param None
* @retval None
*/
INTERRUPT_HANDLER(AWU_IRQHandler, 1)
{
/* In order to detect unexpected events during development,
it is recommended to set a breakpoint on the following instruction.
*/
}
/**
* @brief Clock Controller Interrupt routine
* @param None
* @retval None
*/
INTERRUPT_HANDLER(CLK_IRQHandler, 2)
{
/* In order to detect unexpected events during development,
it is recommended to set a breakpoint on the following instruction.
*/
}
/**
* @brief External Interrupt PORTA Interrupt routine
* @param None
* @retval None
*/
INTERRUPT_HANDLER(EXTI_PORTA_IRQHandler, 3)
{
/* In order to detect unexpected events during development,
it is recommended to set a breakpoint on the following instruction.
*/
}
/**
* @brief External Interrupt PORTB Interrupt routine
* @param None
* @retval None
*/
INTERRUPT_HANDLER(EXTI_PORTB_IRQHandler, 4)
{
/* In order to detect unexpected events during development,
it is recommended to set a breakpoint on the following instruction.
*/
}
/**
* @brief External Interrupt PORTC Interrupt routine
* @param None
* @retval None
*/
INTERRUPT_HANDLER(EXTI_PORTC_IRQHandler, 5)
{
/* In order to detect unexpected events during development,
it is recommended to set a breakpoint on the following instruction.
*/
}
/* In order to detect unexpected events during development,
it is recommended to set a breakpoint on the following instruction.
*/
}
/**
* @brief External Interrupt PORTE Interrupt routine
* @param None
* @retval None
*/
INTERRUPT_HANDLER(EXTI_PORTE_IRQHandler, 7)
{
/* In order to detect unexpected events during development,
it is recommended to set a breakpoint on the following instruction.
*/
}
#ifdef STM8S903
/**
* @brief External Interrupt PORTF Interrupt routine
* @param None
* @retval None
*/
INTERRUPT_HANDLER(EXTI_PORTF_IRQHandler, 8)
{
/* In order to detect unexpected events during development,
it is recommended to set a breakpoint on the following instruction.
*/
}
#endif /*STM8S903*/
#if defined (STM8S208) || defined (STM8AF52Ax)
/**
* @brief CAN RX Interrupt routine.
* @param None
* @retval None
*/
INTERRUPT_HANDLER(CAN_RX_IRQHandler, 8)
{
/* In order to detect unexpected events during development,
it is recommended to set a breakpoint on the following instruction.
*/
}
/**
* @brief CAN TX Interrupt routine
* @param None
* @retval None
*/
INTERRUPT_HANDLER(CAN_TX_IRQHandler, 9)
{
/* In order to detect unexpected events during development,
it is recommended to set a breakpoint on the following instruction.
*/
}
#endif /*STM8S208 || STM8AF52Ax */
/**
* @brief SPI Interrupt routine
* @param None
* @retval None
*/
INTERRUPT_HANDLER(SPI_IRQHandler, 10)
{
/* In order to detect unexpected events during development,
it is recommended to set a breakpoint on the following instruction.
*/
}
/**
* @brief Timer1 Update/Overflow/Trigger/Break Interrupt routine
* @param None
* @retval None
*/
INTERRUPT_HANDLER(TIM1_UPD_OVF_TRG_BRK_IRQHandler, 11)
{
/* In order to detect unexpected events during development,
it is recommended to set a breakpoint on the following instruction.
*/
}
/**
* @brief Timer1 Capture/Compare Interrupt routine
* @param None
* @retval None
*/
INTERRUPT_HANDLER(TIM1_CAP_COM_IRQHandler, 12)
{
/* In order to detect unexpected events during development,
it is recommended to set a breakpoint on the following instruction.
*/
}
#ifdef STM8S903
/**
* @brief Timer5 Update/Overflow/Break/Trigger Interrupt routine
* @param None
* @retval None
*/
INTERRUPT_HANDLER(TIM5_UPD_OVF_BRK_TRG_IRQHandler, 13)
{
/* In order to detect unexpected events during development,
it is recommended to set a breakpoint on the following instruction.
*/
}
/**
* @brief Timer5 Capture/Compare Interrupt routine
* @param None
* @retval None
*/
INTERRUPT_HANDLER(TIM5_CAP_COM_IRQHandler, 14)
{
/* In order to detect unexpected events during development,
it is recommended to set a breakpoint on the following instruction.
*/
}
#else /*STM8S208, STM8S207, STM8S105 or STM8S103 or STM8AF62Ax or STM8AF52Ax or STM8AF626x */
/**
* @brief Timer2 Update/Overflow/Break Interrupt routine
* @param None
* @retval None
*/
INTERRUPT_HANDLER(TIM2_UPD_OVF_BRK_IRQHandler, 13)
{
/* In order to detect unexpected events during development,
it is recommended to set a breakpoint on the following instruction.
*/
}
/**
* @brief Timer2 Capture/Compare Interrupt routine
* @param None
* @retval None
*/
INTERRUPT_HANDLER(TIM2_CAP_COM_IRQHandler, 14)
{
/* In order to detect unexpected events during development,
it is recommended to set a breakpoint on the following instruction.
*/
}
#endif /*STM8S903*/
#if defined (STM8S208) || defined(STM8S207) || defined(STM8S007) || defined(STM8S105) || \
defined(STM8S005) || defined (STM8AF62Ax) || defined (STM8AF52Ax) || defined (STM8AF626x)
/**
* @brief Timer3 Update/Overflow/Break Interrupt routine.
* @param None
* @retval None
*/
INTERRUPT_HANDLER(TIM3_UPD_OVF_BRK_IRQHandler, 15)
{
/* In order to detect unexpected events during development,
it is recommended to set a breakpoint on the following instruction.
*/
}
/**
* @brief Timer3 Capture/Compare Interrupt routine
* @param None
* @retval None
*/
INTERRUPT_HANDLER(TIM3_CAP_COM_IRQHandler, 16)
{
/* In order to detect unexpected events during development,
it is recommended to set a breakpoint on the following instruction.
*/
}
#endif /*STM8S208, STM8S207 or STM8S105 or STM8AF62Ax or STM8AF52Ax or STM8AF626x */
#if defined (STM8S208) || defined(STM8S207) || defined(STM8S007) || defined(STM8S103) || \
defined(STM8S003) || defined (STM8AF62Ax) || defined (STM8AF52Ax) || defined (STM8S903)
/**
* @brief UART1 TX Interrupt routine
* @param None
* @retval None
*/
INTERRUPT_HANDLER(UART1_TX_IRQHandler, 17)
{
/* In order to detect unexpected events during development,
it is recommended to set a breakpoint on the following instruction.
*/
}
/**
* @brief UART1 RX Interrupt routine
* @param None
* @retval None
*/
INTERRUPT_HANDLER(UART1_RX_IRQHandler, 18)
{
/* In order to detect unexpected events during development,
it is recommended to set a breakpoint on the following instruction.
*/
}
#endif /*STM8S105*/
/**
* @brief I2C Interrupt routine
* @param None
* @retval None
*/
INTERRUPT_HANDLER(I2C_IRQHandler, 19)
{
/* In order to detect unexpected events during development,
it is recommended to set a breakpoint on the following instruction.
*/
}
#if defined(STM8S105) || defined(STM8S005) || defined (STM8AF626x)
/**
* @brief UART2 TX interrupt routine.
* @param None
* @retval None
*/
INTERRUPT_HANDLER(UART2_TX_IRQHandler, 20)
{
/* In order to detect unexpected events during development,
it is recommended to set a breakpoint on the following instruction.
*/
}
/**
* @brief UART2 RX interrupt routine.
* @param None
* @retval None
*/
INTERRUPT_HANDLER(UART2_RX_IRQHandler, 21)
{
/* In order to detect unexpected events during development,
it is recommended to set a breakpoint on the following instruction.
*/
}
#endif /* STM8S105*/
#if defined(STM8S207) || defined(STM8S007) || defined(STM8S208) || defined (STM8AF52Ax) || defined (STM8AF62Ax)
/**
* @brief UART3 TX interrupt routine.
* @param None
* @retval None
*/
INTERRUPT_HANDLER(UART3_TX_IRQHandler, 20)
{
/* In order to detect unexpected events during development,
it is recommended to set a breakpoint on the following instruction.
*/
}
/**
* @brief UART3 RX interrupt routine.
* @param None
* @retval None
*/
INTERRUPT_HANDLER(UART3_RX_IRQHandler, 21)
{
/* In order to detect unexpected events during development,
it is recommended to set a breakpoint on the following instruction.
*/
}
#endif /*STM8S208 or STM8S207 or STM8AF52Ax or STM8AF62Ax */
/* In order to detect unexpected events during development,
it is recommended to set a breakpoint on the following instruction.
*/
return;
}
#endif /*STM8S208 or STM8S207 or STM8AF52Ax or STM8AF62Ax */
#ifdef STM8S903
/**
* @brief Timer6 Update/Overflow/Trigger Interrupt routine
* @param None
* @retval None
*/
INTERRUPT_HANDLER(TIM6_UPD_OVF_TRG_IRQHandler, 23)
{
/* In order to detect unexpected events during development,
it is recommended to set a breakpoint on the following instruction.
*/
}
#else /*STM8S208, STM8S207, STM8S105 or STM8S103 or STM8AF62Ax or STM8AF52Ax or STM8AF626x */
/**
* @brief Timer4 Update/Overflow Interrupt routine
* @param None
* @retval None
*/
if(count>=100){menu ^=1;nut_set=0;count=0;}
TIM4_ClearITPendingBit(TIM4_IT_UPDATE);
/* In order to detect unexpected events during development,
it is recommended to set a breakpoint on the following instruction.
*/
}
#endif /*STM8S903*/
/**
* @brief Eeprom EEC Interrupt routine
* @param None
* @retval None
*/
INTERRUPT_HANDLER(EEPROM_EEC_IRQHandler, 24)
{
/* In order to detect unexpected events during development,
it is recommended to set a breakpoint on the following instruction.
*/
}
/**
* @}
*/
/******************* (C) COPYRIGHT 220von *****END OF FILE****/
Toàn bộ chi phí linh kiện chế tạo mạch này rơi vào khoản 60k
Nếu
các bạn muốn hợp tác với mình để mở rộng chức năng cho ứng dụng này
hoặc chia sẻ ý tưởng ứng dụng vào cuộc sống thì gửi mail cho mình theo
địa chỉ : 220von.com@gmail.com
Chào các bạn ! 220von tiếp tục chia sẽ toàn bộ project điều khiển góc quay 10 động cơ servo từ xa bằng 10 biến trở dùng module NRF24L01 và IC vi điều khiển PIC16F886
Khoảng cách khi dùng module này là 10m trở lại , nếu dùng module có PA công xuất cao hơn thì khoản cách thu phát lên đến 500m Ảnh chụp mạch thực tế :
Sơ đồ mạch thu và phát :
sơ đồ mạch thu
sơ đồ mạch phát
Video test mạch : Code C của mạch phát : //////////////////////////////////////////////// Blog : 220von.blogspot.com Email : 220von.com@gmail.com /////////////////////////////////////////////// #include <16F886.h> #device adc=8
#FUSES NOWDT //No Watch Dog Timer #FUSES HS //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD) #FUSES NOPUT //No Power Up Timer #FUSES NOMCLR //Master Clear pin used for I/O #FUSES NOPROTECT //Code not protected from reading #FUSES NOCPD //No EE protection #FUSES NOBROWNOUT //No brownout reset #FUSES IESO //Internal External Switch Over mode enabled #FUSES FCMEN //Fail-safe clock monitor enabled #FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O #FUSES NODEBUG //No Debug mode for ICD #FUSES NOWRT //Program memory not write protected #FUSES BORV40 //Brownout reset at 4.0V #FUSES RESERVED //Used to set the reserved FUSE bits
#FUSES NOWDT //No Watch Dog Timer #FUSES HS //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD) #FUSES NOPUT //No Power Up Timer #FUSES NOMCLR //Master Clear pin used for I/O #FUSES NOPROTECT //Code not protected from reading #FUSES NOCPD //No EE protection #FUSES NOBROWNOUT //No brownout reset #FUSES IESO //Internal External Switch Over mode enabled #FUSES FCMEN //Fail-safe clock monitor enabled #FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O #FUSES NODEBUG //No Debug mode for ICD #FUSES NOWRT //Program memory not write protected #FUSES BORV40 //Brownout reset at 4.0V #FUSES RESERVED //Used to set the reserved FUSE bits
// --------------------END OF FILE------------------------ // -------------------------------------------------------
Các bạn có thể mở rộng code để điều khiển nhiều động cơ servo hơn
Nếu
các bạn muốn hợp tác với mình để mở rộng chức năng cho ứng dụng này
hoặc chia sẻ ý tưởng ứng dụng vào cuộc sống thì gửi mail cho mình theo
địa chỉ : 220von.com@gmail.com Hoặc theo dõi trang fan page facebook : https://www.facebook.com/220von/ Mạch test động cơ rc servo: