gm5528.lua 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. -- @author openLuat
  2. -- @module alarm.testAlarm
  3. -- @license MIT
  4. -- @copyright openLuat
  5. -- @release 2021.11.18
  6. require "log"
  7. require "sys"
  8. require "misc"
  9. module(...,package.seeall)
  10. -- 本程序支持 5528 和 5516, 其他55XX 可以对照调整。
  11. -- 应用范围:
  12. -- 照相机自动测光
  13. -- 室内光线控制
  14. -- 工业控制
  15. -- 光控灯
  16. -- 光电控制
  17. -- 报警器
  18. -- 光控开关
  19. -- 电子玩具
  20. MAX_VOLT = 1810 --用GLOBAL1V8做上拉电压
  21. local LUX1_RES,LUX_Y,MAX_RESVAL
  22. local COMPONET_TYPE="5528" -- ohter is 5516
  23. if COMPONET_TYPE == "5528" then
  24. ----------5528 10 lux (5000,10000)
  25. LUX1_RES=141000 --不同型号,此值不同
  26. LUX_Y=0.6
  27. MAX_RESVAL= 100000
  28. else
  29. ---------5516 -10 lux (8000~20000)
  30. LUX1_RES=62000 --不同型号,此值不同
  31. LUX_Y=0.6
  32. MAX_RESVAL= 500000
  33. end
  34. local ADC_ID=3 -------ADC3
  35. -- |
  36. -- |
  37. -- 1.8V -------10K-----|----GM55XX--------GND
  38. local function get_resinfo()
  39. local _,volt = adc.read(ADC_ID)
  40. log.info("testAdc3.volt",volt)
  41. -- res * 1800 / (res+10000) = volt
  42. -- 1800*res = volt *res + 10000 *volt
  43. local res = MAX_RESVAL
  44. if volt < MAX_VOLT then
  45. res = 10000*volt / (1810-volt)
  46. if res > MAX_RESVAL then
  47. res = MAX_RESVAL
  48. end
  49. end
  50. local lux = math.pow(LUX1_RES/res, 1/LUX_Y )
  51. return volt,math.floor(res),math.floor( lux )
  52. end
  53. sys.taskInit(function()
  54. sys.wait(4000)
  55. adc.open(ADC_ID)
  56. while true do
  57. local v,r,lux= get_resinfo()
  58. log.info("volt, res ,lux=",v,r,lux )
  59. sys.wait(1000)
  60. end
  61. end)
  62. sys.init(0, 0)
  63. sys.run()