Projekt 32b: Komplexer Sensor für Lego Mindstorms EV3: Unterschied zwischen den Versionen
Zeile 188: | Zeile 188: | ||
*[[ 2 : https://www.3bm.de/2013/09/17/attiny84-mit-arduino-uno-programmieren/]] | *[[ 2 : https://www.3bm.de/2013/09/17/attiny84-mit-arduino-uno-programmieren/]] | ||
*[[ ev3 :https://www.dexterindustries.com/howto/connecting-ev3-arduino/]] | |||
== Literatur == | == Literatur == |
Version vom 19. Dezember 2018, 19:45 Uhr
Autoren: Leger Paco Kamegne Kamdem, Ferry Rossini Nde
Betreuer: Prof. Schneider
→ zurück zur Übersicht: WS 18/19: Fachpraktikum Elektrotechnik (MTR)
Aufgabe
Entwickeln Sie einen komplexen Sensor für Lego Mindstorms EV3.
Erwartungen an Ihre Projektlösung
- Darstellung der Theorie
- Realisierung des Aufbaus
- Platinenlayout und Gehäuse kompatibel zum Lego Stecksystem (montierbar)
- Kommunikation über I2C
- Schaltungsentwurf und Simulation mit NI CD
- Programmierung des Microcontrollers (z.B. Attiny)
- Treiber für EV3 Lobby
- Test und Dokumentation
- Live Vorführung während der Abschlusspräsentation
- Kür: Treiber für Matlab und Simulink
Hinweis: Grenzen Sie sich inhaltlich von den Projekten der Vorjahre ab.
Einleitung
In diesem Artikel wird der Aufbau und die Programmierung eines Lego EV3 und eines Arduino UNO erklärt. Das Ziel des Projekt ist ein komplexer Sensor für Lego Mindstorms zu entwickeln, in dem Fall ein IR-Abstandsensor (Sharp GP2Y0A41SK0F). Der Sensor soll den Abstand zwischen seinen Position und einen Hindernis messen, von Arduino ausgelesen werden, und durch I2C im EV3-Display ausgegeben werden.
Projekt
Die Daten des Infrarotsensors sollen vom einem Atmel ATtiny 84 (8-Bit Mikrocontroller) eingelesen und am EV3-Brick ausgegeben werden.
Projektplan
Projektdurchführung
Bevor wir die Verbindung mit Atmel ATtiny durchführen, werden wir erstmal mit Arduino Uno durchführen müssen.
Erster Einsatz mit Arduino
Zweiter Einsatz mit Atmel ATtiny
Aufgrund der üppigen Bauform des Arduino Uno wird im zweiten Ansatz versucht die Bauform zu reduzieren. Hierzu wird das Arduino Board durch ein Atmel ATtiny 84 (8-Bit Mikrocontroller) auf einer selbstgefrästen Platine ersetzt. Die Programmierung von Atmel ATtiny erfolgt durch Arduino Uno. Dafür müssen wir Arduino Uno und Atmel ATtiny verbinden.
Verbindung zwischen Arduino Uno und Atmel ATtiny 84
Abbildung: 42 Bots (2013): Programming ATtiny84 with Arduino Uno
Abbildung: Atmel: ATtiny84 - Datasheet
Verbindung zwischen EV3 und Arduino Uno
Der EV3-Brick und derArduino UNO werden über die nachfolgende Pinbelegung verschaltet.
Abbildung: Dexter Industries: Connecting the EV3 to Arduino
Der Infrarotsensor lässt sich über die 3 Leitungen (VCC, GND und Datenleitung) mit dem Arduino UNO verschalten. Da im EV3-Programm der Eingangs-Pin des Slaves mit Pin=1 definiert wurde, muss die Datenleitung des Infrarotsensors am Eingang A1 anliegen. Die Versorgungsspannung des Infrarotsensors liegt an 5V an. Die Masse entspricht der Masse des Arduino UNO.
Ergebnis
/* Original Code
from https://github.com/adafruit/Adafruit_SSD1306
// https://playground.arduino.cc/Code/NewPing
* Modified for Leger Paco Kamegne Kamdemon Dec 01, 2018
// --------------------------------------------------------------------------- // Example NewPing library sketch that does a ping about 20 times per second. // ---------------------------------------------------------------------------
- /
#include <LiquidCrystal.h> #include <SharpIR.h> #include <NewPing.h>
- define IR A0
- define model 430
//#define lcd SharpIR SharpIR(IR, model); /////////////////////**** end of Sharp IR
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2; LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
const int trigPin = 9;
const int echoPin = 10;
long duration;
int distanceCm, distanceInch;
void setup() {
// LCD1602 Test // set up the LCD's number of columns and rows: lcd.begin(16, 2); // Print a message to the LCD. // Sharp IR with LCD1602 Test pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop() {
digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH); distanceCm= duration*0.034/2; distanceInch = duration*0.0133/2;
lcd.clear();
lcd.setCursor(0,0); // Sets the location at which subsequent text written to the LCD will be displayed
lcd.print("AbstandUS: "); // Prints string "Distance" on the LCD
lcd.print(distanceCm); // Prints the distance value from the sensor
lcd.print(" cm");
//delay(10);
lcd.setCursor(0, 1); int dis=SharpIR.distance();// gets the distance in cm String distance = String(dis); distance ="AbstandIR: "+distance+"cm"; lcd.print(distance);
delay(500); // trip = 9; echo = 10 (digital)
}
Zusammenfassung
Lessons Learned
Projektunterlagen
- BOM-Projekt 32b.xlsx
- Abstand messen mit Arduino: Schaltplan Abstand.ino
- Code: Abstand messen.ino
- https://www.ebay.de/itm/2x-Atmel-ATTiny84A-PU-und-2x-DIL-Sockel/251773573538?hash=item3a9edfd9a2:g:X~4AAOSwMpZUoV8s:rk:1:pf:0
YouTube Video
Weblinks
- [Projekt 32: http://193.175.248.52/wiki/index.php/Projekt_32:_Komplexer_Sensor_f%C3%BCr_Lego_Mindstorms_EV3]
Literatur
→ zurück zur Übersicht: WS 18/19: Fachpraktikum Elektrotechnik (MTR)