raspberry_pi_iot 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (61) hide show
  1. checksums.yaml +7 -0
  2. data/doc/Actuator.html +145 -0
  3. data/doc/BH1750.html +535 -0
  4. data/doc/BME280.html +276 -0
  5. data/doc/BMP280.html +276 -0
  6. data/doc/BMxSensor.html +559 -0
  7. data/doc/BinaryActuator.html +177 -0
  8. data/doc/BinaryEffector.html +246 -0
  9. data/doc/BinaryReceptor.html +387 -0
  10. data/doc/BinarySensor.html +168 -0
  11. data/doc/Bus.html +126 -0
  12. data/doc/Button.html +986 -0
  13. data/doc/DHT11.html +287 -0
  14. data/doc/DHT22.html +287 -0
  15. data/doc/DHTxxSensor.html +361 -0
  16. data/doc/DS18B20.html +339 -0
  17. data/doc/DigitalActuator.html +164 -0
  18. data/doc/DigitalEffector.html +636 -0
  19. data/doc/DigitalReceptor.html +242 -0
  20. data/doc/DigitalSensor.html +162 -0
  21. data/doc/Effector.html +257 -0
  22. data/doc/HCSR501.html +172 -0
  23. data/doc/HumitureSensor.html +453 -0
  24. data/doc/IoT.html +116 -0
  25. data/doc/LED.html +784 -0
  26. data/doc/MAX44009.html +830 -0
  27. data/doc/RaspberryPi.html +309 -0
  28. data/doc/Receptor.html +257 -0
  29. data/doc/Sensor.html +145 -0
  30. data/doc/TemperatureSensor.html +644 -0
  31. data/doc/_index.html +379 -0
  32. data/doc/class_list.html +51 -0
  33. data/doc/file_list.html +51 -0
  34. data/doc/frames.html +17 -0
  35. data/doc/index.html +379 -0
  36. data/doc/method_list.html +715 -0
  37. data/doc/top-level-namespace.html +112 -0
  38. data/lib/bh1750.rb +43 -0
  39. data/lib/binary_effector.rb +16 -0
  40. data/lib/binary_receptor.rb +23 -0
  41. data/lib/bmx_sensor.rb +86 -0
  42. data/lib/bus.rb +26 -0
  43. data/lib/button.rb +70 -0
  44. data/lib/dht_sensor.rb +36 -0
  45. data/lib/digital_effector.rb +56 -0
  46. data/lib/digital_receptor.rb +20 -0
  47. data/lib/ds18b20.rb +24 -0
  48. data/lib/effector.rb +32 -0
  49. data/lib/hcsr501.rb +7 -0
  50. data/lib/humiture_sensor.rb +26 -0
  51. data/lib/iot.rb +4 -0
  52. data/lib/led.rb +58 -0
  53. data/lib/led_pwm.rb +6 -0
  54. data/lib/led_rgb.rb +100 -0
  55. data/lib/max44009.rb +77 -0
  56. data/lib/raspberry_pi.rb +41 -0
  57. data/lib/raspberry_pi_iot.rb +3 -0
  58. data/lib/receptor.rb +33 -0
  59. data/lib/temperature_sensor.rb +49 -0
  60. data/lib/thermal_sensor.rb +22 -0
  61. metadata +203 -0
@@ -0,0 +1,112 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>
7
+ Top Level Namespace
8
+
9
+ &mdash; Documentation by YARD 0.9.16
10
+
11
+ </title>
12
+
13
+ <link rel="stylesheet" href="css/style.css" type="text/css" charset="utf-8" />
14
+
15
+ <link rel="stylesheet" href="css/common.css" type="text/css" charset="utf-8" />
16
+
17
+ <script type="text/javascript" charset="utf-8">
18
+ pathId = "";
19
+ relpath = '';
20
+ </script>
21
+
22
+
23
+ <script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
24
+
25
+ <script type="text/javascript" charset="utf-8" src="js/app.js"></script>
26
+
27
+
28
+ </head>
29
+ <body>
30
+ <div class="nav_wrap">
31
+ <iframe id="nav" src="class_list.html?1"></iframe>
32
+ <div id="resizer"></div>
33
+ </div>
34
+
35
+ <div id="main" tabindex="-1">
36
+ <div id="header">
37
+ <div id="menu">
38
+
39
+ <a href="_index.html">Index</a> &raquo;
40
+
41
+
42
+ <span class="title">Top Level Namespace</span>
43
+
44
+ </div>
45
+
46
+ <div id="search">
47
+
48
+ <a class="full_list_link" id="class_list_link"
49
+ href="class_list.html">
50
+
51
+ <svg width="24" height="24">
52
+ <rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
53
+ <rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
54
+ <rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
55
+ </svg>
56
+ </a>
57
+
58
+ </div>
59
+ <div class="clear"></div>
60
+ </div>
61
+
62
+ <div id="content"><h1>Top Level Namespace
63
+
64
+
65
+
66
+ </h1>
67
+ <div class="box_info">
68
+
69
+
70
+
71
+
72
+
73
+
74
+
75
+
76
+
77
+
78
+
79
+ </div>
80
+
81
+ <h2>Defined Under Namespace</h2>
82
+ <p class="children">
83
+
84
+
85
+ <strong class="modules">Modules:</strong> <span class='object_link'><a href="Bus.html" title="Bus (module)">Bus</a></span>, <span class='object_link'><a href="IoT.html" title="IoT (module)">IoT</a></span>, <span class='object_link'><a href="RaspberryPi.html" title="RaspberryPi (module)">RaspberryPi</a></span>
86
+
87
+
88
+
89
+ <strong class="classes">Classes:</strong> <span class='object_link'><a href="Actuator.html" title="Actuator (class)">Actuator</a></span>, <span class='object_link'><a href="BH1750.html" title="BH1750 (class)">BH1750</a></span>, <span class='object_link'><a href="BME280.html" title="BME280 (class)">BME280</a></span>, <span class='object_link'><a href="BMP280.html" title="BMP280 (class)">BMP280</a></span>, <span class='object_link'><a href="BMxSensor.html" title="BMxSensor (class)">BMxSensor</a></span>, <span class='object_link'><a href="BinaryActuator.html" title="BinaryActuator (class)">BinaryActuator</a></span>, <span class='object_link'><a href="BinaryEffector.html" title="BinaryEffector (class)">BinaryEffector</a></span>, <span class='object_link'><a href="BinaryReceptor.html" title="BinaryReceptor (class)">BinaryReceptor</a></span>, <span class='object_link'><a href="BinarySensor.html" title="BinarySensor (class)">BinarySensor</a></span>, <span class='object_link'><a href="Button.html" title="Button (class)">Button</a></span>, <span class='object_link'><a href="DHT11.html" title="DHT11 (class)">DHT11</a></span>, <span class='object_link'><a href="DHT22.html" title="DHT22 (class)">DHT22</a></span>, <span class='object_link'><a href="DHTxxSensor.html" title="DHTxxSensor (class)">DHTxxSensor</a></span>, <span class='object_link'><a href="DS18B20.html" title="DS18B20 (class)">DS18B20</a></span>, <span class='object_link'><a href="DigitalActuator.html" title="DigitalActuator (class)">DigitalActuator</a></span>, <span class='object_link'><a href="DigitalEffector.html" title="DigitalEffector (class)">DigitalEffector</a></span>, <span class='object_link'><a href="DigitalReceptor.html" title="DigitalReceptor (class)">DigitalReceptor</a></span>, <span class='object_link'><a href="DigitalSensor.html" title="DigitalSensor (class)">DigitalSensor</a></span>, <span class='object_link'><a href="Effector.html" title="Effector (class)">Effector</a></span>, <span class='object_link'><a href="HCSR501.html" title="HCSR501 (class)">HCSR501</a></span>, <span class='object_link'><a href="HumitureSensor.html" title="HumitureSensor (class)">HumitureSensor</a></span>, <span class='object_link'><a href="LED.html" title="LED (class)">LED</a></span>, <span class='object_link'><a href="MAX44009.html" title="MAX44009 (class)">MAX44009</a></span>, <span class='object_link'><a href="Receptor.html" title="Receptor (class)">Receptor</a></span>, <span class='object_link'><a href="Sensor.html" title="Sensor (class)">Sensor</a></span>, <span class='object_link'><a href="TemperatureSensor.html" title="TemperatureSensor (class)">TemperatureSensor</a></span>
90
+
91
+
92
+ </p>
93
+
94
+
95
+
96
+
97
+
98
+
99
+
100
+
101
+
102
+ </div>
103
+
104
+ <div id="footer">
105
+ Generated on Tue Dec 11 17:46:24 2018 by
106
+ <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
107
+ 0.9.16 (ruby-2.3.3).
108
+ </div>
109
+
110
+ </div>
111
+ </body>
112
+ </html>
data/lib/bh1750.rb ADDED
@@ -0,0 +1,43 @@
1
+ require 'bus'
2
+
3
+ # BH1750 - ambient light sensor
4
+ class BH1750
5
+ DEVICE = 0x23 # I2C sensor address
6
+ POWER_DOWN = 0x00 # off state
7
+ POWER_ON = 0x01 # on state
8
+ RESET = 0x07 # reset state: POWER_DOWN = 0x00
9
+
10
+ CONTINUOUS_LOW_RES_MODE = 0x13 # Measure with resolution 4.0 lx and timing ~16 ms
11
+ CONTINUOUS_HIGH_RES_MODE_1 = 0x10 # Measure with resolution 1.0 lx and timing ~120 ms
12
+ CONTINUOUS_HIGH_RES_MODE_2 = 0x11 # Measure with resolution 0.5 lx and timing ~120 ms
13
+ ONE_TIME_LOW_RES_MODE = 0x23 # Measure with resolution 4.0 lx, POWER DOWN after measuring
14
+ ONE_TIME_HIGH_RES_MODE_1 = 0x20 # Measure with resolution 1.0 lx, POWER DOWN after measuring
15
+ ONE_TIME_HIGH_RES_MODE_2 = 0x21 # Measure with resolution 0.5 lx, POWER DOWN after measuring
16
+
17
+ def initialize(i2c_bus='/dev/i2c-1')
18
+ @sensor_name = 'BH1750'
19
+ @i2c_bus = i2c_bus
20
+ @device = I2CDevice.new(address: DEVICE, driver: I2CDevice::Driver::I2CDev.new(@i2c_bus))
21
+ @resolution = ONE_TIME_HIGH_RES_MODE_1
22
+ @length = 2
23
+ @value = read_sensor
24
+ end
25
+
26
+ # Read raw data from sensor and convert it to numeric
27
+ def read_sensor
28
+ data = @device.i2cget(@resolution, @length)
29
+ @value = to_f(data)
30
+ end
31
+
32
+ # Return value in Lux
33
+ def lux
34
+ read_sensor
35
+ @value
36
+ end
37
+
38
+ private
39
+ # Convert 2 bytes of sensor data to a float number
40
+ def to_f(data)
41
+ return ((data[1].ord + (256 * data[0].ord)) / 1.2)
42
+ end
43
+ end
@@ -0,0 +1,16 @@
1
+ require 'digital_effector'
2
+
3
+ # BinaryEffector - effector with binary logic
4
+ class BinaryEffector < DigitalEffector
5
+ @pin = nil # pin
6
+
7
+ def initialize(pin=25, state=:low)
8
+ super({:pin => pin}, :low)
9
+ @pin = pin
10
+ end
11
+
12
+ end
13
+
14
+ # BinaryActuator - synomym for BinaryEffector
15
+ class BinaryActuator < BinaryEffector
16
+ end
@@ -0,0 +1,23 @@
1
+ require 'receptor'
2
+
3
+ # BinaryReceptor - receptor/actuator with binary logic
4
+ class BinaryReceptor < Receptor
5
+ @pin = nil # pin
6
+
7
+ def initialize(pin=21, pull=:up)
8
+ @pin = pin
9
+ RPi::GPIO.setup pin, :as => :input, :pull => pull
10
+ end
11
+
12
+ def high?
13
+ RPi::GPIO.high? @pin
14
+ end
15
+
16
+ def low?
17
+ RPi::GPIO.low? @pin
18
+ end
19
+ end
20
+
21
+ # BinarySensor - a synonym for BinaryReceptor
22
+ class BinarySensor < BinaryReceptor
23
+ end
data/lib/bmx_sensor.rb ADDED
@@ -0,0 +1,86 @@
1
+ gem 'i2c'
2
+ require 'i2c'
3
+ gem 'i2c-bme280'
4
+ require 'i2c/bme280'
5
+ require 'humiture_sensor'
6
+
7
+
8
+ # BMP/BME humidity, temperature & atmospheric pressure sensor family
9
+ class BMxSensor < HumitureSensor
10
+
11
+ def initialize(sensor_name, bus=1)
12
+ @sensor_name = sensor_name
13
+ @sensor = I2C::Driver::BME280.new(device: bus)
14
+ @temperature, @humidity, @pressure = read_data
15
+ end
16
+
17
+ def read_data
18
+ data = @sensor.all
19
+ @temperature = data[:t]
20
+ @pressure = data[:p]
21
+ @humidity = data[:h]
22
+ [@temperature, @humidity, @pressure]
23
+ end
24
+
25
+ # standard atmospheric pressure @ sea level = 1.01325 bar = 1013.25 mbar = 101.325 kPa
26
+ def hPa
27
+ @pressure
28
+ end
29
+
30
+ def pressure(mode=:hPa)
31
+ case mode
32
+ when :hPa # 1 hPa = 100 Pa = 1 mbar = 1 hPa = 0.750062 mmHg [@ 0°C]
33
+ hPa
34
+ when :kPa # 1 kPa = 1000 Pa = 10 hPa
35
+ hPa / 10.0
36
+ when :Pa # 1 Pa = 0.01 hPa = 0.001 kPa
37
+ hPa * 100.0
38
+ when :mmHg # 1 mmHg = 1.3332236842105263 hPa = 133.322387415 Pa = 1.000000142466321... Torr
39
+ hPa / (1013.25 / 760) # 760 mmHg = 101.3250144354 kPa
40
+ when :atm # 1 atm = 101325 Pa = 101.325 kPa
41
+ hPa / 1013.25
42
+ when :bar # 1 bar ≡ 100000 Pa = 1000 hPa = 0.987 atm = 750.06 mmHg = 750.06 Torr
43
+ hPa / 1000.0
44
+ when :mbar # 1 mbar = 0.001 bar
45
+ bar * 1000.0
46
+ when :Torr # 1 Torr = 1/760 atm = 101325/760 Pa = 0.999999857533699... mmHg
47
+ (hPa / 1013.25) / 760
48
+ else
49
+ hPa
50
+ end
51
+ end
52
+
53
+ def to_s
54
+ sprintf "%5.2f°C, %5.2f %%, %5.2f mmHg", @temperature, @humidity, pressure(:mmHg)
55
+ end
56
+
57
+ # OLD implementation with 'i2c-devices.gem'
58
+ #require 'bus'
59
+ #require 'i2c/device/bme280'
60
+
61
+ # BMP/BME humidity, temperature & atmospheric pressure sensor family
62
+ # def initialize(sensor_name)
63
+ # @sensor_name = sensor_name
64
+ # @sensor = I2CDevice::Bme280.new
65
+ # @temperature, @humidity, @pressure = read_data
66
+ # end
67
+ # def read_data
68
+ # data = @sensor.calc_sensor_data
69
+ # @temperature = data[:temp]
70
+ # @pressure = data[:pressure]
71
+ # @humidity = data[:hum]
72
+ # [@temperature, @humidity, @pressure]
73
+ # end
74
+ end
75
+
76
+ class BMP280 < BMxSensor
77
+ def initialize
78
+ super('BMP280')
79
+ end
80
+ end
81
+
82
+ class BME280 < BMxSensor
83
+ def initialize
84
+ super('BME280')
85
+ end
86
+ end
data/lib/bus.rb ADDED
@@ -0,0 +1,26 @@
1
+
2
+ #$LOAD_PATH << '~/lib/ruby-i2c-devices/lib'
3
+ gem 'i2c-devices'
4
+ require 'i2c'
5
+ require 'i2c/driver/i2c-dev'
6
+
7
+ # Bus - interfaces for physical devices
8
+ module Bus
9
+ # 1-wire interface to devices
10
+ class OneWire
11
+ @@one_wire_bus = '/sys/bus/w1/devices'
12
+ @sensor_file = nil
13
+ end
14
+
15
+ # I2C interface to devices
16
+ class I2C
17
+ @@i2c_bus = '/dev/i2c-1'
18
+ def self.set_bus(bus=1)
19
+ @@i2c_bus = "/dev/i2c-#{bus}"
20
+ end
21
+ end
22
+
23
+ # SPI interface to devices
24
+ class SPI
25
+ end
26
+ end
data/lib/button.rb ADDED
@@ -0,0 +1,70 @@
1
+ require 'binary_receptor'
2
+
3
+ # Button - simple push button
4
+ class Button < BinaryReceptor
5
+ attr_writer :measure_pause
6
+
7
+ def initialize(pin)
8
+ receptor_name = 'BUTTON'
9
+ super(pin)
10
+ @measure_pause = 0.01
11
+ @long_click = 1.0
12
+ @short_interval = 0.2
13
+ @intervals = []
14
+ end
15
+
16
+ # Is button pressed?
17
+ def pressed?
18
+ low?
19
+ end
20
+
21
+ # Is button not pressed?
22
+ def not_pressed?
23
+ high?
24
+ end
25
+
26
+ # Wait for the 1st pressing of button
27
+ def wait_for_press
28
+ wait_for_presses(1)
29
+ end
30
+
31
+ # Wait for several sequential presses
32
+ def wait_for_presses(attempts=2)
33
+ @intervals = []
34
+ attempts.times do
35
+ interval = []
36
+ timer = Time.now
37
+ while not_pressed? do
38
+ sleep @measure_pause
39
+ end
40
+ interval << Time.now-timer
41
+ timer = Time.now
42
+ while pressed? do
43
+ sleep @measure_pause
44
+ end
45
+ interval << Time.now-timer
46
+ @intervals << interval
47
+ end
48
+ @intervals
49
+ end
50
+
51
+ # Was the button pressed once?
52
+ def single_press?(intervals=@intervals)
53
+ intervals.size == 1
54
+ end
55
+
56
+ # Was the button pressed twice?
57
+ def double_press?(intervals=@intervals)
58
+ intervals.size == 2 && intervals[1][0] <= @short_interval
59
+ end
60
+
61
+ # Was the button pressed 3 times?
62
+ def triple_press?(intervals=@intervals)
63
+ intervals.size == 3
64
+ end
65
+
66
+ # Was the button pressed for more than @long_click?
67
+ def long_press?(intervals=@intervals)
68
+ intervals.size == 1 && intervals[0][1] >= @long_click
69
+ end
70
+ end
data/lib/dht_sensor.rb ADDED
@@ -0,0 +1,36 @@
1
+ require 'humiture_sensor'
2
+ require 'dht-sensor-ffi'
3
+
4
+ # DHT11/22 humidity & temperature sensor family
5
+ class DHTxxSensor < HumitureSensor
6
+
7
+ def initialize(pin, sensor_model)
8
+ @pin = pin
9
+ @sensor_name = 'DHT'+sensor_model.to_s
10
+ @sensor_model = sensor_model.to_i
11
+ @temperature, @humidity = read_data
12
+ end
13
+
14
+ # Read values by 'DhtSensor.read' from 'dht-sensor-ffi'
15
+ def read_data
16
+ sensor_data = DhtSensor.read(@pin, @sensor_model)
17
+ @temperature = sensor_data.temp
18
+ @humidity = sensor_data.humidity
19
+ [@temperature, @humidity]
20
+ end
21
+
22
+ end
23
+
24
+ # DHT11 - junior model, lower presicion
25
+ class DHT11 < DHTxxSensor
26
+ def initialize(pin)
27
+ super(pin, 11)
28
+ end
29
+ end
30
+
31
+ # DHT11 - senior model, higher presicion
32
+ class DHT22 < DHTxxSensor
33
+ def initialize(pin)
34
+ super(pin, 22)
35
+ end
36
+ end
@@ -0,0 +1,56 @@
1
+ require 'effector'
2
+
3
+ RPi::GPIO.set_warnings(false)
4
+ RPi::GPIO.set_numbering :bcm
5
+
6
+ # DigitalEffector - effector/actuator with digitized control
7
+ class DigitalEffector < Effector
8
+ @pin = nil
9
+ @pins = {} # GPIO pins
10
+
11
+ def initialize(pins, state=:low)
12
+ @states = {}
13
+ @pins = pins
14
+ @pins.each_value do |pin|
15
+ RPi::GPIO.setup pin, :as => :output, :initialize => state
16
+ @states[pin] = (state == :high)
17
+ end
18
+ @pin = pins.values[0]
19
+ end
20
+
21
+ def self.on(pin=@pin)
22
+ RPi::GPIO.set_high pin
23
+ end
24
+
25
+ def self.off(pin=@pin)
26
+ RPi::GPIO.set_low pin
27
+ end
28
+
29
+ def on(pin=@pin)
30
+ BinaryEffector.on @pin
31
+ @states[pin] = true
32
+ end
33
+
34
+ def off(pin=@pin)
35
+ BinaryEffector.off @pin
36
+ @states[pin] = false
37
+ end
38
+
39
+ def on?(pin=@pin)
40
+ state = nil
41
+ if pin.class.name == 'Fixnum' # by number
42
+ state = @states[pin]
43
+ elsif @pins[pin] # by name
44
+ state = @states[@pins[pin]]
45
+ end
46
+ state
47
+ end
48
+
49
+ def off?(pin=@pin)
50
+ not on(pin)
51
+ end
52
+ end
53
+
54
+ # DigitalActuator - synonym for DigitalEffector
55
+ class DigitalActuator < DigitalEffector
56
+ end
@@ -0,0 +1,20 @@
1
+ require 'receptor'
2
+
3
+ # DigitalReceptor - receptor with digitized values
4
+ class DigitalReceptor < Receptor
5
+ @@one_wire_bus = '/sys/bus/w1/devices'
6
+ @sensor_file = nil
7
+
8
+ def self.one_wire_file(prefix='28*', device='w1_slave')
9
+ files = Dir[@@one_wire_bus+'/'+prefix]
10
+ if files.size > 0 then
11
+ @sensor_file = files[0]+'/'+device
12
+ end
13
+ @sensor_file
14
+ end
15
+
16
+ end
17
+
18
+ # DigitalSensor - a synonym for DigitalReceptor
19
+ class DigitalSensor < DigitalReceptor
20
+ end
data/lib/ds18b20.rb ADDED
@@ -0,0 +1,24 @@
1
+ require 'temperature_sensor'
2
+
3
+ # DS18B20 - high precision temperature sensor with 1-wire interface
4
+ class DS18B20 < TemperatureSensor
5
+
6
+ def initialize(device='w1_slave')
7
+ self.name = 'DS18B20'
8
+ @sensor_file = DigitalReceptor.one_wire_file('28*', device)
9
+ if @sensor_file
10
+ @temperature = read_data
11
+ else
12
+ raise "#{@sensor_name} - Sensor NOT FOUND!"
13
+ end
14
+ end
15
+
16
+ def read_data
17
+ File.open(@sensor_file, 'r') do |f|
18
+ value = f.read
19
+ @temperature = value.scan(/t=(\d+)/).flatten[0].to_i/1000.0
20
+ end
21
+ @temperature
22
+ end
23
+ end
24
+
data/lib/effector.rb ADDED
@@ -0,0 +1,32 @@
1
+ # https://github.com/ClockVapor/rpi_gpio
2
+ require 'rpi_gpio'
3
+
4
+ RPi::GPIO.set_warnings(false)
5
+ RPi::GPIO.set_numbering :bcm
6
+
7
+ # Effector - a controlled physical device that performs some (useful) action
8
+ class Effector
9
+ @model = 'N/A'
10
+ @name = 'N/A'
11
+
12
+ def name
13
+ @name
14
+ end
15
+
16
+ def model_name
17
+ @model
18
+ end
19
+
20
+ protected
21
+ def name=(name)
22
+ @name = name
23
+ end
24
+
25
+ def model_name=(name)
26
+ @model_name = name
27
+ end
28
+ end
29
+
30
+ # Actuator - a synonym for Effector
31
+ class Actuator < Effector
32
+ end
data/lib/hcsr501.rb ADDED
@@ -0,0 +1,7 @@
1
+ require 'binary_receptor'
2
+
3
+ # HCSR501 - PIR sensor
4
+ class HCSR501 < BinarySensor
5
+ # TODO: implement and test
6
+
7
+ end
@@ -0,0 +1,26 @@
1
+ require 'temperature_sensor'
2
+
3
+ # HumitureSensor - combined humidity & temperature sensor
4
+ class HumitureSensor < TemperatureSensor
5
+ @humidity = 0.0
6
+ @temperature = 0.0
7
+
8
+ def initialize
9
+ @humidity, @temperature = read_data
10
+ end
11
+
12
+ def read_data
13
+ [@humidity, @temperature]
14
+ end
15
+
16
+ # Humidity in per cents
17
+ def humidity
18
+ @humidity
19
+ end
20
+
21
+ # Temperature & humidity as a string
22
+ def to_s
23
+ sprintf "%5.2f°, %5.2f %%", @temperature, @humidity
24
+ end
25
+ end
26
+
data/lib/iot.rb ADDED
@@ -0,0 +1,4 @@
1
+ # IoT - Internet of Things classes and modules
2
+ module IoT
3
+
4
+ end
data/lib/led.rb ADDED
@@ -0,0 +1,58 @@
1
+ require 'binary_effector'
2
+
3
+ # LED - Light Emitting Diode
4
+ class LED < BinaryEffector
5
+ def initialize(pin)
6
+ super(pin)
7
+ self.name = 'LED'
8
+ end
9
+
10
+ def on(pin=@pin)
11
+ super(pin)
12
+ end
13
+
14
+ def off(pin=@pin)
15
+ super(pin)
16
+ end
17
+
18
+ # Repeat 'repeat' times: light the LED for 'switched_on' secs, then pause for 'switched_off' secs
19
+ def blink(repeat=3, switched_on=0.25, switched_off=0.5)
20
+ repeat.times do |n|
21
+ on
22
+ sleep switched_on
23
+ off
24
+ sleep switched_off
25
+ end
26
+ end
27
+
28
+ def on_for(seconds=1)
29
+ on
30
+ sleep seconds
31
+ off
32
+ end
33
+
34
+ def off_for(seconds=1)
35
+ off
36
+ sleep seconds
37
+ on
38
+ end
39
+ end
40
+
41
+ # Experimental methods with names in Russian
42
+ class LED
43
+ def LED.создать(pin = 25)
44
+ LED.new(pin)
45
+ end
46
+
47
+ def включить
48
+ on
49
+ end
50
+
51
+ def выключить
52
+ off
53
+ end
54
+
55
+ def мигать(repeat=3, switched_on=0.25, switched_off=0.5)
56
+ blink(repeat, switched_on, switched_off)
57
+ end
58
+ end
data/lib/led_pwm.rb ADDED
@@ -0,0 +1,6 @@
1
+ require 'led'
2
+
3
+ class LED
4
+ class PWM
5
+ end
6
+ end