eletro 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
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