efinf:blc2016:bu1:projekt3:projekt

Magic Mirror ohne Mirror und Magic

Jonas

Das Ziel ist es, einen Magic Mirror zu bauen, der sich mithilfe von vier Infrarot-Sensoren zusätzlich steuern lässt.

Das Minimalprojekt ist es, vier Infrarot-Sensoren mit einem Arduino steuren zu können und ihnen eigenständige Commands zuweisen.

-Arduino Uno

-USB-Kabel

-4 Infrarot-Sensoren und Breadboard

-Für LED des Sensors ein 150 Ohm Widerstand und für Phototransistor 50k Ohm Widerstand

-Kabel

-Serialport Library für Ruby (https://rubygems.org/gems/serialport/versions/1.3.1)

Infrarot-Sensoren: Der Plus-Pol der LED und des Phototransistors befindet sich auf der unbeschriebenen Seite des Sensors. Darum werden die Stromquellen da angeschlossen. Nach der LED ist es wichtig, einen 150 Ohm Widerstand einzubauen. Desweiteren muss ein 50k Ohm nach dem Phototransistor vorhanden sein. Der Analoganschluss muss dabei zwischem dem Phototransistor und seinem Widerstand geschalten sein.

Für jeden Sensor wird ein Groundpin, ein Analogpin und zwei Pins(für die Stromversorgung) benötigt.

Arduino Code:

code

code

#define LED1 11
#define SENSOR1 A0
#define STROM1 12
#define LED2 3
#define SENSOR2 A1
#define STROM2 2
#define LED3 9
#define SENSOR3 A2
#define STROM3 8
#define LED4 7
#define SENSOR4 A3
#define STROM4 6
void setup() {
  // put your setup code here, to run once:
Serial.begin(115200);
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
}
 
void loop() {
  // put your main code here, to run repeatedly:
  digitalWrite(LED1, HIGH);
  digitalWrite(STROM1, HIGH);
  delay(2);
  int i1 =analogRead(SENSOR1);
  digitalWrite(LED1, 0);
  delay(2);
  int i11 =analogRead(SENSOR1);
  digitalWrite(STROM1, 0);
  delay(2);
  Serial.print("m");
  Serial.println(i1-i11);
  digitalWrite(LED2, HIGH);
  digitalWrite(STROM2, HIGH);
  delay(2);
  int i2 =analogRead(SENSOR2);
  digitalWrite(LED2, 0);
  delay(2);
  int i22 =analogRead(SENSOR2);
  digitalWrite(STROM2, 0);
  delay(20);
  Serial.print("y");
  Serial.println(i2-i22);
  digitalWrite(LED3, HIGH);
  digitalWrite(STROM3, HIGH);
  delay(2);
  int i3 =analogRead(SENSOR3);
  digitalWrite(LED3, 0);
  delay(2);
  int i33 =analogRead(SENSOR3);
  digitalWrite(STROM3, 0);
  delay(2);
  Serial.print("q");
  Serial.println(i3-i33);
  digitalWrite(LED4, HIGH);
  digitalWrite(STROM4, HIGH);
  delay(2);
  int i4 =analogRead(SENSOR4);
  digitalWrite(LED4, 0);
  delay(2);
  int i44 =analogRead(SENSOR4);
  digitalWrite(STROM4, 0);
  delay(2);
  Serial.print("p");
  Serial.println(i4-i44);
  delay(2000);
}

Rubycode:

code:

code:

require "serialport"
 
#params for serial port
port_str = "/dev/ttyUSB0"  #may be different for you
baud_rate = 115200
data_bits = 8
stop_bits = 1
parity = SerialPort::NONE
 
sp = SerialPort.new(port_str, baud_rate, data_bits, stop_bits, parity)
i2 = ""
#just read forever
while true do
  while (i = sp.gets) do
  #  print i
    i2 += i
    if i.scan(/\n/)[0] == "\n"
 
     if i2.scan(/p\K\d+/)[0].to_i > 200
       # Hier Code einfügen was passieren soll, wenn Hand festgestellt
       puts "Oben Rechts"
       system "firefox"
 
     end
     if i2.scan(/q\K\d+/)[0].to_i > 200
      # Hier Code einfügen was passieren soll, wenn Hand festgestellt
       puts "Oben Links"
       system "unity-control-center --overview "
 
     end
     if i2.scan(/y\K\d+/)[0].to_i > 200
      # Hier Code einfügen was passieren soll, wenn Hand festgestellt
       puts "Unten Links"
       a = `ps -ef`
       puts a
       baum = a.scan(/(\d+{3,5}).{34}\/usr\/lib\/firefox\/firefox/)[0][0].to_i
       puts "kill #{baum}"
       #system "kill #{baum}"
       baum = ""
 
     end
     if i2.scan(/m\K\d+/)[0].to_i > 200
      # Hier Code einfügen was passieren soll, wenn Hand festgestellt
       "Unten Rechts"
      # a = `ps -ef`
      #tree = a.scan(/(\d+{3,5}).{34}unity-control-center --overview/)[0][0].to_i
      # puts "kill #{tree}"
      #system "kill #{tree}"
      #tree = ""
 
     end
     i2 = ""
    end
    #puts i.class #String
  end
 
end
 
sp.close

Das Minimalprojekt wurde erreicht. Nun wäre das weitere Vorgehen so, dass man einen Magic Mirror baut, um die Infrarot-Sensoren implementieren zu können. Die BU hat einen grossartigen Einblick in das Thema Arduino gegeben und das Interesse für Arduinos geweckt. Ebenfalls ist man zum ersten Mal der Programmiersprache C++ begegnet.

Gesamtes Projekt:

Aufbau eines Sensors:

  • efinf/blc2016/bu1/projekt3/projekt.txt
  • Last modified: 2017/03/16 16:21
  • by noel_ottiger