Spisu treści:

Inteligentna lekcja: 6 kroków
Inteligentna lekcja: 6 kroków

Wideo: Inteligentna lekcja: 6 kroków

Wideo: Inteligentna lekcja: 6 kroków
Wideo: 6 kroków do własnego domu? WEBINAR #2 | Jak się wybudować i nie zwariować 2024, Lipiec
Anonim
Inteligentna lekcja
Inteligentna lekcja

O projeto Smart Lesson visa criar um produto no qual os profesores possam utilizar como um conteúdo a mais para ensinar seus alunos os levando a um nível de aprendizado muito superior por conseguir mostrar os conteúdos de propore cios dinâmica de aula konwencjonalna.

Krok 1: Materiały

Materiały
Materiały

Do programowania Dragonboard 410c:

- Dragonboard 410c;

- Cabo HDMI;

- Teclado przez USB -Mysz przez USB -Monitor;

- Antresola 96 desek;

Para executar o projekt:

- Dragonboard 410c;

- Antresola 96 desek;

- Sensor Grove IMU 10DOF MPU - 9250 (czujnik bez ograniczeń;

- Fonte de alimentação externa 11.1V;

- Sweter femea-fêmea;

Krok 2: Dragonboard 410c Com Mezzanine 96Boards: Konfiguracja E Pinagem

Dragonboard 410c Com Mezzanine 96Boards: Konfiguracja E Pinagem
Dragonboard 410c Com Mezzanine 96Boards: Konfiguracja E Pinagem
Dragonboard 410c Com Mezzanine 96Boards: Konfiguracja E Pinagem
Dragonboard 410c Com Mezzanine 96Boards: Konfiguracja E Pinagem
Dragonboard 410c Com Mezzanine 96Boards: Konfiguracja E Pinagem
Dragonboard 410c Com Mezzanine 96Boards: Konfiguracja E Pinagem

O Shield Mezzanine został wyposażony w Dragonboard 410c, który jest używany do zasilania 3,3 V / 5 V (przełącznik poziomu), jest to miejsce, które wymaga 1,8 V na pokładzie. O sensor utilizado foi um magnetômetro Sensor MPU – 9250 Grove -IMU 10DOF, specyfikacje:

Napięcie wejściowe: 5 V / 3,3 V;

Dokładność działania: 6mA;

Communicação Serial;

Piny: VCC, GND, SDA i SCL;

interfejs I2C;

Para este exemplo foi um dos conectores Grove I2C0 (5V), que proporciona a COMunicação Serial i alimentação necessária dla funkcji czujnika. (ver imagem)

Krok 3: Integração: Unity + Vuforia

Integração: Unity + Vuforia
Integração: Unity + Vuforia

1- Witryna Vá ao da vuforia na obszar desenvolvedor e crie uma chave.

2- Vá na tab Target Manager i adicione uma textura para fazer o Tracking (quanto mais complexa melhor).

3- Feito isso baixe baza danych dla Unity e importe.

4- Nie Unity skonfigurować um docelowy obraz z teksturą escolhida i dentro delle dice o modelach 3D que deseja utilizar, o esmos estarão ativos quando imagem dla localizada pelo aplikacji.

5- Adicione a chave de licença da vuforia nas configurações dentro do Unity.

6- Após isso modele os komponenty da aula em algum programa 3D i przygotuj jako aule em cima do celu obrazu (pode ser uma aula de Biologia ou Física…).

Krok 4: Unity: skonfiguruj O Android SDK

Jedność: skonfiguruj O Android SDK
Jedność: skonfiguruj O Android SDK

1- Baixe o SDK na Androida, w preferencjach Unity e selecione lub seu diretório.

2- Wyeliminuj platformę kompilacji do Unity dla Androida, assim conseguiremos gerar lub APK.

3- Instale o apk em um dispositivo (não esqueça de allowir fontes desconhecidas nas configurações).

Krok 5: Criando Servidor Local E Recebendo Informações Em Python

Criando Servidor Local E Recebendo Informações Em Python
Criando Servidor Local E Recebendo Informações Em Python

Concluídas as configurações apresentadas, podemos acessar o Sistema Linaro dentro da placa i używaj różnych języków como C++, Java, Python, itp., para criar o software que será executado. Este software é responsável por receber os dados lidos pelo sensor, processar e tratar estes dados conforme solicitado pelo programa. Depois carrega esses dados para o servidor alocado na própria placa para enviar os dados já tratados para a plataforma Unity. Os exemplos de código deste projeto estão w języku Phyton. O Dados Sao transferidos z Dragonboard 410c dla Unity i Sapresentados em um aplikacji.

Seguem os códigos mag_python.py (leitor de dados do sensor), server2.py (Servidor local), Executável no Shell:

Código mag_python.py

#!/usr/bin/python

# Autor: Jon Trulson

# Prawa autorskie (c) 2015 Intel Corporation.

#

# Niniejszym udziela się nieodpłatnego zezwolenia każdej osobie uzyskującej

# kopię tego oprogramowania i powiązanych plików dokumentacji (# „Oprogramowanie”), do korzystania z Oprogramowania bez ograniczeń, w tym

# bez ograniczeń prawa do używania, kopiowania, modyfikowania, łączenia, publikowania, # rozpowszechniać, udzielać podlicencji i/lub sprzedawać kopii Oprogramowania oraz

# zezwolić na to osobom, którym udostępniane jest Oprogramowanie, z zastrzeżeniem:

# następujące warunki:

#

# Powyższa informacja o prawach autorskich i niniejsza informacja o zezwoleniu powinny być

# zawarte we wszystkich kopiach lub istotnych fragmentach Oprogramowania.

#

# OPROGRAMOWANIE JEST DOSTARCZANE „TAK JAK JEST”, BEZ JAKICHKOLWIEK GWARANCJI, # WYRAŹNE LUB DOROZUMIANE, W TYM MIĘDZY INNYMI GWARANCJE

# SPRZEDAWALNOŚĆ, PRZYDATNOŚĆ DO OKREŚLONEGO CELU ORAZ

# BEZ NARUSZENIA. W ŻADNYM WYPADKU AUTORZY LUB WŁAŚCICIELE PRAW AUTORSKICH NIE BĘDĄ

# ODPOWIEDZIALNY ZA WSZELKIE ROSZCZENIA, SZKODY LUB INNĄ ODPOWIEDZIALNOŚĆ, ZARÓWNO W DZIAŁANIU

# UMOWY, CZYNNEGO LUB INNEGO, WYNIKAJĄCYCH Z LUB W POŁĄCZENIU

# Z OPROGRAMOWANIEM LUB KORZYSTANIEM Z OPROGRAMOWANIA LUB INNYMI CZYNNIKAMI.

from _future_ import print_function

czas importu, sys, sygnał, atexit, urllib, urllib2, math

z upm import pyupm_mpu9150 jako sensorObj

def główna():

# dane = {}

# data['magnetrometro'] = raw_input("Podaj temperaturę")

# dane = urlib.urlencode(dane)

# post_request = urlib2. Request(post_url, dane, nagłówki)

# próbować:

# post_response = urlib2.urlopen(post_request)

# drukuj post_response.read()

# z wyjątkiem URLError jako e:

# print "Błąd: ", e.reason

# Utwórz wystąpienie MPU9250 na magistrali I2C 0

czujnik = obiekt czujnika. MPU9250()

## Obsługa wyjścia ##

# Ta funkcja powstrzymuje Pythona przed drukowaniem śladu stosu po naciśnięciu Ctrl

def SIGINTHandler(znak, ramka):

podnieść SystemExit

# Ta funkcja pozwala uruchomić kod przy wyjściu

def Obsługa wyjścia():

print("Wychodzenie")

sys.exit(0)

# Zarejestruj programy obsługi wyjścia

atexit.register(exitHandler)

sygnał.sygnał(sygnał. SIGINT, SIGINTHandler)

sensor.init()

x = obiekt_czujnika.new_floatp()

y = obiekt_czujnika.new_floatp()

z = obiekt_czujnika.new_floatp()

natomiast (1):

sensor.aktualizacja()

sensor.getAccelerometer(x, y, z)

# drukuj ("Akcelerometr:")

# print ("AX: %.4f" % sensorObj.floatp_value(x), end=' ')

# print (" AY: %.4f" % sensorObj.floatp_value(y), end=' ')

# print (" AZ: %.4f" % sensorObj.floatp_value(z))

modulo1 = (sensorObj.floatp_value(x)-0,005)**2+(sensorObj.floatp_value(y)-0,0150)**2+(sensorObj.floatp_value(z)-0,0450)**2

# drukuj(modulo1)

modulo1 = („%.1f” % abs(((modulo1**0,5)-1)*9,8))

# drukuj (modulo1)

#

# sensor.getGyroscope(x, y, z)

# print("Żyroskop: GX: ", sensorObj.floatp_value(x), end=' ')

# print(" GY: ", sensorObj.floatp_value(y), end=' ')

# print(" GZ: ", sensorObj.floatp_value(z))

sensor.getMagnetometer(x, y, z)

# print("Magnetometr: MX: ", sensorObj.floatp_value(x), end=' ')

# print(" MÓJ: ", obiekt_czujnika.floatp_value(y), end=' ')

# print(" MZ: ", sensorObj.floatp_value(z))

modulo2 = sensorObj.floatp_value(x)**2+sensorObj.floatp_value(y)**2+sensorObj.floatp_value(z)**2

# drukuj(modulo2)

modulo2 = ("%.2f" % (modulo2**0.5))

# drukuj (modulo2)

arq = otwórz('/tmp/dados.txt', 'w')

tekst =

texto.append(str(modulo2)+", "+str(modulo1))

arq.writelines(tekst)

arq.zamknij()

# link = ('https://data.sparkfun.com/input/0lwWlyRED5i7K0AZx4JO?private_key=D6v76yZrg9CM2DX8x97B&mag='+str(modulo2))

# drukuj ('enviando dados')

# wyślij = urllib2.urlopen(link)

# strona = wyślij.odczyt()

# Drukuj stronę)

# link = ('https://data.sparkfun.com/input/1noGndywdjuDGAGd6m5K?private_key=0mwnmR9YRgSxApAo0gDX&acel='+str(modulo1))

# drukuj ('enviando dados')

# wyślij = urllib2.urlopen(link)

# strona = wyślij.odczyt()

# Drukuj stronę)

# print("Temperatura: ", sensor.getTemperature())

# drukuj()

# czas.sen(.5)

if _name_ == '_main_':

Główny()

Código do Servidor Local

czas importu

importuj serwer BaseHTTPServer

HOST_NAME = '172.17.56.9' # !!! PAMIĘTAJ, ABY TO ZMIENIĆ!!!

PORT_NUMBER = 80 # Może ustaw to na 9000.

a=0

class MyHandler(BaseHTTPServer. BaseHTTPRequestHandler):

def do_HEAD(s):

s.send_response(200)

s.send_header("Typ treści", "text/html")

s.end_headers()

def do_GET(ów):

dados = le_dados()

druk (dados)

"""Odpowiedz na żądanie GET."""

jeśli s.path=="/1":

s.send_response(200)

s.send_header("Typ treści", "tekst/zwykły")

s.end_headers()

s.wfile.write(dados)

elif s.path=="/2":

s.send_response(200)

s.send_header("Typ treści", "tekst/zwykły")

s.end_headers()

s.wfile.write("2")

w przeciwnym razie:

s.send_response(200)

s.send_header("Typ treści", "tekst/zwykły")

s.end_headers()

s.wfile.write(dados)

#s.wfile.write("nie znaleziono!!")

def le_dados():

arq = otwórz('/tmp/dados.txt', 'r')

tekst = arq.readline()

arq.zamknij()

zwróć teksto

if _name_ == '_main_':

server_class = BaseHTTPServer. HTTPServer

httpd = klasa_serwera((NAZWA_HOSTA, NUMER_PORTU), MójHandler)

print time.asctime(), "Serwer uruchamia się - %s:%s" % (NAZWA_HOSTA, PORT_NUMBER)

próbować:

a=a+2

httpd.serve_forever()

z wyjątkiem KeyboardInterrupt:

przechodzić

httpd.server_close()

print time.asctime(), "Serwer zatrzymuje się - %s:%s" % (NAZWA_HOSTA, PORT_NUMBER)

Código de Execução dos Códigos anteriores no Shell

#!/kosz/bash

echo "uruchamianie mag_pythona"

sudo python mag_python.py &

echo "uruchom serwer"

sudo python server2.py

Krok 6: Wynik końcowy

Wynik końcowy
Wynik końcowy

Feito isso jako aulas poderão ser auxiliadas i incrementadas pelo projekt Smart Lesson desenvolvido z Dragonboard 410c. Servindo de facilitador e proporcionando um maior aprendizado nos sistemas de ensino tanto público quanto privado.

LINK do aplikacji bez Google Play:

Link para códigos Py:

Zalecana: