efinf:blc2016:bu1:projekt3:projekt

Differences

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

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
efinf:blc2016:bu1:projekt3:projekt [2017/03/16 14:48] – [Code] noel_ottigerefinf:blc2016:bu1:projekt3:projekt [2017/03/16 15:21] (current) – [Minimalprojekt] noel_ottiger
Line 1: Line 1:
 +{{backlinks>.}}
 +====== Magic Mirror ohne Mirror und Magic =====
 +==== Autor ====
 +Jonas
 +==== Idee und Fernziel ====
 +Das Ziel ist es, einen Magic Mirror zu bauen, der sich mithilfe von vier Infrarot-Sensoren zusätzlich steuern lässt.
 +==== Minimalprojekt ====
 +Das Minimalprojekt ist es, vier Infrarot-Sensoren mit einem Arduino steuren zu können und ihnen eigenständige Commands zuweisen.
 +===== Bericht =====
  
 +==== Material ====
 +-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)
 +
 +
 +==== Aufbau ====
 +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.
 +==== Code ====
 +Arduino Code:
 +<hidden code>
 +<code c++>
 +#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);
 +}
 +</code>
 +</hidden>
 + 
 +
 +Rubycode:
 +<hidden code:>
 +<code ruby>
 +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
 +</code>
 +</hidden>
 +==== Fazit ====
 +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.
 +==== Fotos und Film ====
 +Gesamtes Projekt:
 +
 +{{:efinf:blc2016:bu1:projekt3:img_20170316_154240-min.jpg?400|}}
 +
 +Aufbau eines Sensors:
 +
 +{{:efinf:blc2016:bu1:projekt3:img_20170316_154343-min.jpg?400|}}
 +{{:efinf:blc2016:bu1:projekt3:img_20170316_154354-min.jpg?400|}}