User Tools

Site Tools


2019_cargo_present_sensor

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
2019_cargo_present_sensor [2019/02/21 23:05] tell2019_cargo_present_sensor [2019/02/24 22:51] (current) – [combining open-drain outputs to make a logic gate] tell
Line 13: Line 13:
 The adafruit sensors open-collector output is low when the beam is broken (not received), and high when the beam is received.  Experimentally, we need 4 of them, spaced every 5 inches across the intake to sense the ball in any position.  We could just run 4 cables to RoboRIO digital IO inputs, and call it good.  The adafruit sensors open-collector output is low when the beam is broken (not received), and high when the beam is received.  Experimentally, we need 4 of them, spaced every 5 inches across the intake to sense the ball in any position.  We could just run 4 cables to RoboRIO digital IO inputs, and call it good. 
  
-===== combining signals into one =====+===== combining several signals into one =====
  
 But can we do better and run fewer cables? But can we do better and run fewer cables?
Line 25: Line 25:
 Remember that the sensor output is low (closed, grounded, 0) when the beam is not recieved, and high (open, 1) when the beam is recieved. Remember that the sensor output is low (closed, grounded, 0) when the beam is not recieved, and high (open, 1) when the beam is recieved.
  
- +^   sensor A      ^   Sensor B        Combined wire-AND output    ^ 
 +|  **0**   broken/dark    |  **0**  broken/dark            |  0        | 
 +|  **0**   broken/dark    |  **1**  light recieved          0      | 
 +| **1**   light recieved  |  **0**   broken/dark            0        | 
 +| **1**   light received  |  **1**   light recieved        |  1      |
  
  
 +Unfortunately, this isn't what we want: we want to sense cargo when it is in front of **any** sensor - not only when it is in front of **all** sensors.
  
 +Exercise: write out the truth table for 4 sensors.
  
 +See https://en.wikipedia.org/wiki/Open_collector for a related explanation of open-collector outputs and wire-AND connections.
  
  
-See https://en.wikipedia.org/wiki/Open_collector for a related explanation.+===== Inverting the sensor output =====
  
 +Wiring the signals together gives us an "AND" function: when all are 1, the result is 1.  
 +We need an OR.  Turns out we can get there by creating intermediate signals, one for each sensor, that have the opposite sense:
  
 +^   Original sensor output  ^   New, inverted sensor signal   
 +|  **0**   broken/dark    |  **1**     dark            |
 +|  **1**   light received  |  **0**     light      |
  
 +Now, run these new, opposite signals through the same combination as above:
  
  
  
 +^   inverted sensor A ("not A"    inverted Sensor B  ("not B"   ^  Combined wire-AND output  ^ meaning ^
 +|  **0**  (light)    |  **0**  (light)  |  0             | any sensor reciving light | 
 +|  **0**  (light)    **1**   (dark)        |  0        | ::: |
 +|  **1**  (dark)    |  **0**   (light)        0        | ::: |
 +|  **1**  (dark)    |  **1**   (dark)        |  1        | all sensors dark  |
  
 +By inverted the meaning of the inputs, we've arranged for the AND function to do what want:
 + a 1 means that all sensors are dark - none are seeing reflected light from the cargo ball.
  
  
 +===== An inverter with one transistor =====
  
 +Here's the basic idea:
 +
 +{{ :mosfet-inverter.png |}}
 +
 +The 2n7000 is a "mosfet", a type of transistor.  It has three terminals:
 +  * Source, (pin 1 above) which we connect to ground, or the most negative voltage.
 +  * Gate (pin 2), an input.  Voltage on the gate controls current flow between the other terminals
 +  * Drain (3), into which current can flow
 +
 +When the gate is connected to a positive voltage (with respect to the source) the source and drain are connected, and current flows from drain to source.   This causes the output to be low, because any current flows to ground.
 +
 +When the gate is low (near ground potential or zero volts) the transistor is off, and the pullup resistor 
 +provides a tiny bit of current to pull the output up to a 5 volts, representing a logic 1.
 +
 +For a few more details on discrete mosfets for logic, see [[mosfet hints]].  For a lot more info, see https://en.wikipedia.org/wiki/MOSFET
 +
 +
 +===== combining open-drain outputs to make a logic gate =====
 +
 +{{ :mosfet-nor.png?400 |}}
 +
 +Finishing up:
 +
 +Instead of pullup resistors, we can use a resistor in series with an LED.  In fact, we can connect the output of this gate to one of our [[DIO tester and breakout]] boards.
 +
 +If we build anything with mosfets as a standalone board, we never want to connect a mosfet gate only to an input connector (as drawn above for clarity).  The input resistance of a fet gate is so high that can stay charged to either a logic high or low or somewhere in between.  We always want to use either a pullup or pulldown resistor on a mosfet gate that would otherwise connect only to an off-board connector.  Of course, if an LED is also connected to that input, it will serve to pull the mosfet gate to a defined value.  Merging this gate circuit into the DIO tester board would also do that.
2019_cargo_present_sensor.1550808317.txt.gz · Last modified: 2019/02/21 23:05 by tell