eletro 0.1.0 → 0.1.1

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.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.1.1
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{eletro}
8
- s.version = "0.1.0"
8
+ s.version = "0.1.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Marcos Piccinini"]
12
- s.date = %q{2010-11-11}
12
+ s.date = %q{2010-11-28}
13
13
  s.default_executable = %q{eletro}
14
14
  s.description = %q{Eletric Stuff, Ohm Law, Resistor Colors, Karnaugh Maps and other gems on Ruby}
15
15
  s.email = %q{x@nofxx.com}
@@ -37,12 +37,15 @@ Gem::Specification.new do |s|
37
37
  "lib/eletro/resistor.rb",
38
38
  "lib/eletro/source.rb",
39
39
  "lib/eletro/transistor.rb",
40
+ "lib/eletro/wire.rb",
40
41
  "spec/colour_test",
41
42
  "spec/eletro/capacitor_spec.rb",
42
43
  "spec/eletro/ohm_spec.rb",
43
44
  "spec/eletro/part_spec.rb",
44
45
  "spec/eletro/resistor_spec.rb",
45
46
  "spec/eletro/source_spec.rb",
47
+ "spec/eletro/transistor_spec.rb",
48
+ "spec/eletro/wire_spec.rb",
46
49
  "spec/eletro_spec.rb",
47
50
  "spec/spec_helper.rb"
48
51
  ]
@@ -57,7 +60,9 @@ Gem::Specification.new do |s|
57
60
  "spec/eletro/capacitor_spec.rb",
58
61
  "spec/eletro/ohm_spec.rb",
59
62
  "spec/eletro/resistor_spec.rb",
63
+ "spec/eletro/transistor_spec.rb",
60
64
  "spec/eletro/part_spec.rb",
65
+ "spec/eletro/wire_spec.rb",
61
66
  "spec/eletro_spec.rb"
62
67
  ]
63
68
 
@@ -1,7 +1,10 @@
1
+ require 'stick/units'
2
+ require 'bigdecimal'
1
3
 
2
4
  require "eletro/helpers/color_code"
3
5
  require "eletro/ohm"
4
6
  require "eletro/part"
7
+ require "eletro/wire"
5
8
  require "eletro/diode"
6
9
  require "eletro/logic"
7
10
  require "eletro/source"
@@ -3,6 +3,7 @@
3
3
  module Eletro
4
4
 
5
5
  class Capacitor < Part
6
+
6
7
  attr_accessor :polarized
7
8
 
8
9
  include ColorCode
@@ -17,11 +18,9 @@ module Eletro
17
18
  m = mult[m[0]]
18
19
  else
19
20
  st, nd, m = txt.split(//)
20
- m ||= 0
21
21
  m = m.to_i #(10**-(m.to_i))
22
22
  end
23
- num = ("#{st}#{nd}#{'0' * m}").to_f * mult['p']
24
- num
23
+ ("#{st}#{nd}#{'0' * m}").to_f * mult['p']
25
24
  end
26
25
 
27
26
  def unit
@@ -29,7 +28,7 @@ module Eletro
29
28
  end
30
29
 
31
30
  def mult
32
- { 'n' => 10e-6, 'u' => 10e-9, 'p' => 10e-12 }
31
+ { 'u' => 10e-6, 'n' => 10e-9, 'p' => 10e-12 }
33
32
  end
34
33
 
35
34
  def format
@@ -37,14 +36,7 @@ module Eletro
37
36
  mult.keys.reverse.each do |k|
38
37
  m = k if value >= mult[k]
39
38
  end
40
- # v = if value > mult[0]
41
- # "%g" % @value
42
- # elsif value < 1000000
43
- # "%gk" % (@value/1000)
44
- # else
45
- # "%gm" % (@value/1000000)
46
- # end
47
- out = "%g#{m}#{unit}" % (value/mult[m]).round
39
+ out = "%g#{m}#{unit}" % (value/mult[m]) #.round
48
40
  out += " ± #{@precision}%" if @precision
49
41
  out
50
42
  end
@@ -42,6 +42,9 @@ module Eletro
42
42
  CODE.index(char.downcase.to_sym)
43
43
  end
44
44
 
45
+ #
46
+ # Converts the color code value to numeric
47
+ #
45
48
  def color2value chars
46
49
  out = calc(chars[0])
47
50
  out = (out.to_s + calc(chars[1]).to_s).to_f
@@ -54,16 +57,24 @@ module Eletro
54
57
  out
55
58
  end
56
59
 
60
+ #
61
+ # Converts a numeric value into a color code array
62
+ #
63
+ # st nd rest (multiplier)
64
+ # 123.0 -> ['1', '2', '3.0']
65
+ #
66
+ #
57
67
  def value2color value
58
68
  st, nd, *rest = value.to_s.split(//)
59
69
  out = [CODE[st.to_i], CODE[nd.to_i]]
60
- index = 1 if rest.size == 3 # ugly... sleepy... fix....
61
- index ||= (value ** 0.1).round
62
- out << CODE[index]
70
+ out << CODE[value.to_i.to_s.size-2]
63
71
  out
64
72
  end
65
73
 
66
74
 
75
+ #
76
+ # Creates a coloured version to print on stdout
77
+ #
67
78
  def rgblize color
68
79
  s = case color.to_s.downcase.to_sym
69
80
  when :k then "\e[40m"
@@ -1,6 +1,4 @@
1
1
  # -*- coding: utf-8 -*-
2
- require 'stick/units'
3
- require 'bigdecimal'
4
2
 
5
3
  module Eletro
6
4
  class Ohm
@@ -1,7 +1,7 @@
1
1
  module Eletro
2
2
 
3
3
  class Part
4
- attr_accessor :value, :unit, :p0, :p1, :v
4
+ attr_accessor :value, :unit, :p0, :p1, :v, :i
5
5
 
6
6
  def p0
7
7
  @p0 ||= :gnd
@@ -59,8 +59,9 @@ module Eletro
59
59
  respond_to?(txt) ? send(args.join) : nil
60
60
  end
61
61
  else
62
- raise NoMethodError.new("undefined method `#{args.join}' " +
63
- "for #{self.inspect}:#{self.class.name}")
62
+ super
63
+ # raise NoMethodError.new("undefined method `#{args.join}' " +
64
+ # "for #{self.inspect}:#{self.class.name}")
64
65
  end
65
66
 
66
67
  end
@@ -51,4 +51,11 @@ module Eletro
51
51
  end
52
52
 
53
53
  end
54
+
55
+ end
56
+
57
+ class Numeric
58
+ def self.R val
59
+ Eletro::Resistor.new val
60
+ end
54
61
  end
@@ -1,8 +1,44 @@
1
1
  module Eletro
2
2
 
3
+
3
4
  class Transistor < Part
4
5
 
5
-
6
+ attr_accessor :i, :name, :ri, :hfe
7
+
8
+ def initialize *args
9
+ params, txt = *args.partition { |a| a.is_a?(Hash) }
10
+ @npn = params[0] && params[0][:type] == "pnp" ? false : true
11
+ @name = txt.join
12
+ end
13
+
14
+ def w
15
+ v * i
16
+ end
17
+
18
+ def npn?
19
+ @npn
20
+ end
21
+
22
+ def pnp?
23
+ !@npn
24
+ end
25
+
26
+
27
+ def self.pnp
28
+ new(:type => "pnp")
29
+ end
30
+
31
+ def self.npn
32
+ new
33
+ end
34
+
35
+ # Theory of thermal resistance
36
+ # Tj = Ta + Rth(j-a) * P
37
+ #
38
+ # Ta -> Ambient temp
39
+ # Rth(j-a) -> Thermal resistance inbetween Junction and Ambient
40
+
41
+
6
42
  end
7
43
 
8
44
  end
@@ -0,0 +1,68 @@
1
+ module Eletro
2
+
3
+
4
+ class Wire < Part
5
+ MULT = { :mil => 2.54e-3, :mm => 0.1, :um => 1e-4 }
6
+ TEMP = 25
7
+ RHO = 1.7e-6
8
+ ALPHA = 3.9e-3 # //ohm/ohm/C
9
+
10
+ LEN = 1
11
+ TEMP_RISE = 10
12
+ THICKNESS = 0.1
13
+
14
+
15
+ IRISE = {
16
+ :internal => { :k => 0.048, :b => 0.44, :c => 0.725 },
17
+ :external => { :k => 0.024, :b => 0.44, :c => 0.725 }
18
+ # return Math.pow((current/(k*Math.pow(rise,b))),1/c)
19
+
20
+ }
21
+
22
+ attr_accessor :width, :thickness, :length
23
+
24
+ def spacing
25
+ case v
26
+ when 0..100 then [0.005, 0.004]
27
+ when 101..300 then [0.015, 0.008]
28
+ when 301..500 then [0.030, 0.010]
29
+ else
30
+ 0.030 * ( v / 500)
31
+ end
32
+ end
33
+
34
+ def area(place)
35
+ @area = (i / IRISE[place][:k] * (TEMP_RISE ** IRISE[place][:b])) ** (1/IRISE[place][:c])
36
+ end
37
+
38
+ def tk
39
+ @tk || THICKNESS
40
+ end
41
+
42
+ def calc(pos = :external)
43
+ area = area(pos) #, @temp_rise || TEMP_RISE) # //mils^2
44
+ area = area * 2.54 * 2.54 / 1e6 # //mil^2 to cm^2
45
+ wi = area / tk
46
+ wi = wi / MULT[@mult || :mm]
47
+ tval = 1 * (@temp || TEMP) + 1 * TEMP_RISE
48
+ ri = (RHO * LEN / area) * (1 + ALPHA * (tval-25))
49
+ vi = ri * i
50
+ pi = i * i * ri
51
+
52
+ # ae = area
53
+ # ae = ae * 2.54 * 2.54 / 1e6 # //mil^2 to cm^2
54
+ # we = ae/tk # //cm
55
+ # we = we/document.getElementById("twSelect3").value # //user units
56
+ # re = (rho*len/ae)*(1+alpha*(tval-25))
57
+ # ve = re*i
58
+ # pe = i*i*re
59
+
60
+ end
61
+
62
+ def size
63
+ calc
64
+ end
65
+
66
+ end
67
+
68
+ end
@@ -12,17 +12,40 @@ describe "Eletro::Capacitor" do
12
12
  end
13
13
 
14
14
  it "should instantiate 47" do
15
- r = Capacitor.new("47")
16
- r.value.should be_within(220.0).of(0.1)
17
- r.format.should eql("47pF")
15
+ c = Capacitor.new("47")
16
+ c.value.should be_within(10e-10).of(4.7e-10)
17
+ c.format.should eql("47pF")
18
18
  end
19
19
 
20
20
  it "should instantiate 102" do
21
- r = Capacitor.new("102")
22
- r.value.should be_within(220.0).of(0.1)
23
- r.format.should eql("1uF")
21
+ c = Capacitor.new("102")
22
+ c.value.should be_within(10e-10).of(1.0e-8)
23
+ c.format.should eql("1nF")
24
24
  end
25
25
 
26
+ it "should instantiate 472" do
27
+ c = Capacitor.new("472")
28
+ c.value.should be_within(10e-10).of(4.7e-8)
29
+ c.format.should eql("4.7nF")
30
+ end
31
+
32
+ it "should instantiate 473" do
33
+ c = Capacitor.new("473")
34
+ c.value.should be_within(10e-10).of(4.7e-7)
35
+ c.format.should eql("47nF")
36
+ end
37
+
38
+ it "should instantiate 10nF" do
39
+ c = Capacitor.new("103")
40
+ c.value.should be_within(10e-10).of(1.0e-7)
41
+ c.format.should eql("10nF")
42
+ end
43
+
44
+ it "should instantiate 220nF" do
45
+ c = Capacitor.new("224")
46
+ c.value.should be_within(10e-10).of(2.2e-6)
47
+ c.format.should eql("220nF")
48
+ end
26
49
 
27
50
  end
28
51
 
@@ -2,21 +2,24 @@ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
2
 
3
3
  describe "Eletro::Part" do
4
4
 
5
- let(:p) { Part.new}
5
+ let(:part) { Part.new}
6
6
 
7
7
  it "should have pins" do
8
- p.p0.should eql(:gnd)
8
+ part.p0.should eql(:gnd)
9
9
  end
10
10
 
11
11
  it "should get dynamic" do
12
- p.p99.should be_nil
12
+ part.p99.should be_nil
13
13
  end
14
14
 
15
15
  it "should set dynamic" do
16
- p.p99.should be_nil
17
- p.p99 = :fu
18
- p.p99.should eql('fu')
16
+ part.p99.should be_nil
17
+ part.p99 = :fu
18
+ part.p99.should eql('fu')
19
19
  end
20
20
 
21
+ it "should return NoMethodErrors" do
22
+ lambda { part.blablabla }.should raise_error
23
+ end
21
24
 
22
25
  end
@@ -5,41 +5,75 @@ describe "Eletro::Resistor" do
5
5
 
6
6
  let(:rs) { Resistor.new }
7
7
 
8
+ it "should have a fancy instantiate method" do
9
+ 200.R.should eql(Resistor.new(220))
10
+ end
11
+
8
12
  describe "Value" do
9
13
 
10
- it "should instantiate 220 ohms" do
14
+ it "should instantiate 220 string ohms" do
11
15
  r = Resistor.new("220")
12
- r.value.should be_within(220.0).of(0.1)
16
+ r.value.should be_within(0.1).of(220.0)
17
+ r.format.should eql("220Ω")
18
+ end
19
+
20
+ it "should instantiate 220 integer ohms" do
21
+ r = Resistor.new(220)
22
+ r.value.should be_within(0.1).of(220.0)
13
23
  r.format.should eql("220Ω")
14
24
  end
15
25
 
16
26
  it "should instantiate 100R ohms" do
17
27
  r = Resistor.new("100R")
18
- r.value.should be_within(100.0).of(0.1)
28
+ r.value.should be_within(0.1).of(100.0)
19
29
  r.format.should eql("100Ω")
30
+ Resistor.new("100").colors.join.should eql("bkb")
20
31
  end
21
32
 
22
33
  it "should instantiate 1k ohms" do
23
- r = Resistor.new("1k")
34
+ r = Resistor.new("1000.0")
24
35
  r.value.should be_within(1000.0).of(0.1)
25
36
  r.format.should eql("1kΩ")
37
+ Resistor.new("1k").colors.join.should eql("bkr")
26
38
  end
27
39
 
28
- it "should instantiate 1k ohms" do
29
- r = Resistor.new("1000.0")
30
- r.value.should be_within(1000.0).of(0.1)
31
- r.format.should eql("1kΩ")
40
+ it "should instantiate 10k ohms" do
41
+ r = Resistor.new("BKO")
42
+ r.value.should be_within(0.1).of(10000)
43
+ r.format.should eql("10kΩ")
44
+ Resistor.new("10k").colors.join.should eql("bko")
32
45
  end
33
46
 
34
- it "should instantiate 1k ohms" do
47
+ it "should instantiate 100k ohms" do
48
+ r = Resistor.new("BKY")
49
+ r.value.should be_within(0.1).of(100000)
50
+ r.format.should eql("100kΩ")
51
+ Resistor.new("100k").colors.join.should eql("bky")
52
+ end
53
+
54
+ it "should instantiate 1m ohms" do
55
+ r = Resistor.new("BKG")
56
+ r.value.should be_within(0.1).of(1000000)
57
+ r.format.should eql("1mΩ")
58
+ Resistor.new("1m").colors.join.should eql("bkg")
59
+ end
60
+
61
+ it "should instantiate 10m ohms" do
62
+ r = Resistor.new("BKU")
63
+ r.value.should be_within(0.1).of(10000000)
64
+ r.format.should eql("10mΩ")
65
+ Resistor.new("10m").colors.join.should eql("bku")
66
+ end
67
+
68
+ it "should instantiate 1.1k ohms" do
35
69
  r = Resistor.new("1100.0")
36
- r.value.should be_within(1100.0).of(0.1)
70
+ r.value.should be_within(0.1).of(1100.1)
37
71
  r.format.should eql("1.1kΩ")
38
72
  end
39
73
 
40
- it "should instantiate 1k ohms" do
74
+ it "should instantiate 1.1k ohms" do
41
75
  r = Resistor.new("BBR")
42
- r.value.should be_within(1100.0).of(0.1)
76
+ r.value.should be_within(0.1).of(1100)
43
77
  r.format.should eql("1.1kΩ")
44
78
  end
45
79
 
@@ -57,7 +91,7 @@ describe "Eletro::Resistor" do
57
91
 
58
92
  it "should instantiate 1m5 ohms" do
59
93
  r = Resistor.new("1m5")
60
- r.value.should be_within(15000000.0).of(0.1)
94
+ r.value.should be_within(0.00001).of(1500000.0)
61
95
  r.format.should eql("1.5mΩ")
62
96
  end
63
97
 
@@ -93,52 +127,52 @@ describe "Eletro::Resistor" do
93
127
 
94
128
  end
95
129
 
96
- describe "Colors" do
130
+ describe "Color Code" do
97
131
 
98
132
  it "should instantiate 3 chars" do
99
133
  r = Resistor.new("BKR")
100
- r.value.should be_within(1000.0).of(0.01)
134
+ r.value.should be_within(0.01).of(1000.0)
101
135
  r.format.should eql("1kΩ")
102
136
  end
103
137
 
104
138
  it "should instantiate 3 chars" do
105
139
  r = Resistor.new("BKO")
106
- r.value.should be_within(10000.0).of(0.01)
140
+ r.value.should be_within(0.01).of(10000.0)
107
141
  r.format.should eql("10kΩ")
108
142
  end
109
143
 
110
144
  it "should instantiate 3 chars" do
111
145
  r = Resistor.new("YVR")
112
- r.value.should be_within(4700.0).of(0.01)
146
+ r.value.should be_within(0.01).of(4700.0)
113
147
  r.format.should eql("4.7kΩ")
114
148
  end
115
149
 
116
150
  it "should instantiate 3 chars" do
117
151
  r = Resistor.new("YVR")
118
- r.value.should be_within(4700.0).of(0.01)
152
+ r.value.should be_within(0.01).of(4700.0)
119
153
  r.format.should eql("4.7kΩ")
120
154
  end
121
155
 
122
156
  it "should instantiate 4 chars" do
123
157
  r = Resistor.new("WWRS")
124
- r.value.should be_within(9900.0).of(0.01)
158
+ r.value.should be_within(0.01).of(9900.0)
125
159
  r.format.should eql("9.9kΩ ± 10%")
126
160
  end
127
161
 
128
162
  it "should instantiate 4 chars" do
129
163
  r = Resistor.new("BKRL")
130
- r.value.should be_within(1000.0).of(0.01)
164
+ r.value.should be_within(0.01).of(1000.0)
131
165
  r.format.should eql("1kΩ ± 5%")
132
166
  end
133
167
 
134
168
  end
135
169
 
136
170
 
137
- describe "Colors" do
171
+ describe "Term Colors" do
138
172
 
139
173
  it "should print nicely" do
140
174
  r = Resistor.new("BKR")
141
- r.value.should be_within(1000.0).of(0.01)
175
+ r.value.should be_within(0.01).of(1000.0)
142
176
  r.pretty_output.should eql("1kΩ --\e[0;33mB\e[0m\e[40mK\e[0m\e[41mR\e[0m--")
143
177
  end
144
178
 
@@ -0,0 +1,66 @@
1
+ # -*- coding: utf-8 -*-
2
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
3
+
4
+ describe "Eletro::Transistor" do
5
+
6
+ let(:t) { Transistor.new }
7
+
8
+ it "should have V" do
9
+ t.v = 12
10
+ t.v.should eql(12)
11
+ end
12
+
13
+ it "should have I" do
14
+ t.i = 12
15
+ t.i.should eql(12)
16
+ end
17
+
18
+ it "should calculate W" do
19
+ t.v= 12
20
+ t.i = 3
21
+ t.w.should eql(36)
22
+ end
23
+
24
+ it { t.should be_npn }
25
+
26
+ it { t.should_not be_pnp }
27
+
28
+ it "should have a name" do
29
+ t2 = Transistor.new("BC547")
30
+ t2.name.should eql("BC547")
31
+ end
32
+
33
+ it "should have pnp" do
34
+ t2 = Transistor.new(:type => 'pnp')
35
+ t2.should be_pnp
36
+ end
37
+
38
+ it "should have a pnp alternative initialize" do
39
+ t2 = Transistor.pnp
40
+ t2.should be_pnp
41
+ end
42
+
43
+ it "should have a npn alternative initialize" do
44
+ t2 = Transistor.npn
45
+ t2.should be_npn
46
+ end
47
+
48
+ it "should have an Ri" do
49
+ t.ri = 10
50
+ t.ri.should eql(10)
51
+ end
52
+
53
+ it "should have hfe" do
54
+
55
+ end
56
+
57
+
58
+
59
+ describe "Thermal Stuff" do
60
+
61
+ it "should calculate thermal resistance" do
62
+
63
+ end
64
+
65
+ end
66
+ end
@@ -0,0 +1,26 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe "Eletro::Wire" do
4
+
5
+ let(:w) { Wire.new }
6
+
7
+ describe "Value" do
8
+
9
+ it "should have width" do
10
+ w.width = 5.mm
11
+ w.width.should eql(5.mm)
12
+ end
13
+
14
+ it "should instantiate have i" do
15
+ w.i = 10.mA
16
+ w.i.should eql(10.mA)
17
+ end
18
+
19
+ it "should calc width" do
20
+ w.i = 1.A
21
+ w.size.should be_within(0.001).of(0.8)
22
+ end
23
+
24
+ end
25
+
26
+ end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 1
8
- - 0
9
- version: 0.1.0
8
+ - 1
9
+ version: 0.1.1
10
10
  platform: ruby
11
11
  authors:
12
12
  - Marcos Piccinini
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-11-11 00:00:00 -02:00
17
+ date: 2010-11-28 00:00:00 -02:00
18
18
  default_executable: eletro
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -75,12 +75,15 @@ files:
75
75
  - lib/eletro/resistor.rb
76
76
  - lib/eletro/source.rb
77
77
  - lib/eletro/transistor.rb
78
+ - lib/eletro/wire.rb
78
79
  - spec/colour_test
79
80
  - spec/eletro/capacitor_spec.rb
80
81
  - spec/eletro/ohm_spec.rb
81
82
  - spec/eletro/part_spec.rb
82
83
  - spec/eletro/resistor_spec.rb
83
84
  - spec/eletro/source_spec.rb
85
+ - spec/eletro/transistor_spec.rb
86
+ - spec/eletro/wire_spec.rb
84
87
  - spec/eletro_spec.rb
85
88
  - spec/spec_helper.rb
86
89
  has_rdoc: true
@@ -121,5 +124,7 @@ test_files:
121
124
  - spec/eletro/capacitor_spec.rb
122
125
  - spec/eletro/ohm_spec.rb
123
126
  - spec/eletro/resistor_spec.rb
127
+ - spec/eletro/transistor_spec.rb
124
128
  - spec/eletro/part_spec.rb
129
+ - spec/eletro/wire_spec.rb
125
130
  - spec/eletro_spec.rb