raspberry_pi_iot 0.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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