Índice:
- Etapa 1: Materiais
- Etapa 2: Dragonboard 410c Com Mezanino 96Boards: Configuração E Pinagem
- Etapa 3: Integração: Unidade + Vuforia
- Etapa 4: Unity: Configurar O Android SDK
- Etapa 5: Criando Servidor Local E Recebendo Informações Em Python
- Etapa 6: Resultado Final
Vídeo: Lição inteligente: 6 etapas
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:35
O projeto Smart Lesson visa criar um produto no qual os professores podem utilizar como um conteúdo a mais para usar seus alunos os levando um nível de aprendizado muito superior por conseguir mostrar os conteúdos de forma dinâmica e interativa, proporcionando experiências não presenciadas em uma sala de aula convencional.
Etapa 1: Materiais
Para programar um Dragonboard 410c:
- Dragonboard 410c;
- Cabo HDMI;
- Teclado via USB -Mouse via USB -Monitor;
- Mezanino 96 quadros;
Para executar o projeto:
- Dragonboard 410c;
- Mezanino 96 quadros;
- Sensor Grove IMU 10DOF MPU - 9250 (não limitado ao uso de um único sensor);
- Fonte de alimentação externa 11.1V;
- Jumper fêmea-fêmea;
Etapa 2: Dragonboard 410c Com Mezanino 96Boards: Configuração E Pinagem
O Shield Mezzanine deve ser acoplado à placa Dragonboard 410c, para que haja saída de saída 3.3V / 5V (level shifter), pois a placa só oferece 1.8V de saída. O sensor utilizado foi um magnetômetro Sensor MPU - 9250 Grove -IMU 10DOF, especificações:
Tensão de Entrada: 5V / 3,3V;
Corrente de funcionamento: 6mA;
Comunicação Serial;
Pinos: VCC, GND, SDA e SCL;
Interface I2C;
Para este exemplo foi usado um dos conectores Grove I2C0 (5V), que oferece uma comunicação serial e uma alimentação necessária para o funcionamento do sensor. (ver imagem)
Etapa 3: Integração: Unidade + Vuforia
1- Vá ao site da vuforia na área de desenvolvedor e crie uma chave.
2- Vá na tab Target Manager e irresistíveis uma textura para fazer o Tracking (quanto mais complexa melhor).
3- Feito isso baixe um banco de dados para o Unity e importe.
4- No Unity configure um target image target com a textura escolhida e dentro dele provêem os modelos 3D que deseja utilizar, os mesmos ativos quando a imagem localizada pelo app.
5 - busca a chave de licença da vuforia nas configurações dentro do Unity.
6- Após isso módulo os componentes da aula em algum programa 3D e prepare as aulas em cima do alvo da imagem (pode ser uma aula de Biologia ou Física…).
Etapa 4: Unity: Configurar O Android SDK
1- Baixe o SDK do Android, vá em Preferências do Unity e selecione o seu diretório.
2- Mude uma plataforma de build do Unity para o android, assim conseguiremos gerar o APK.
3- Instale o apk em um dispositivo (não esqueça de permitir fontes desconhecidas nas configurações).
Etapa 5: Criando Servidor Local E Recebendo Informações Em Python
Concluídas como configurações configuradas, podemos acessar o Sistema Linaro dentro da placa e usar várias linguagens como C ++, Java, Python, etc., para criar o software que será criado. 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 em linguagem Phyton. Os dados são transferidos da Dragonboard 410c para o Unity e são orientados em um app.
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
# Copyright (c) 2015 Intel Corporation.
#
# A permissão é concedida gratuitamente a qualquer pessoa que obtenha
# uma cópia deste software e arquivos de documentação associados (o
# "Software"), para lidar com o Software sem restrições, incluindo
# sem limitação, os direitos de usar, copiar, modificar, mesclar, publicar, # distribuir, sublicenciar e / ou vender cópias do Software, e para
# permitir que as pessoas a quem o Software é fornecido o façam, sujeito a
# as seguintes condições:
#
# O aviso de direitos autorais acima e este aviso de permissão devem ser
# incluído em todas as cópias ou partes substanciais do Software.
#
# O SOFTWARE É FORNECIDO "COMO ESTÁ", SEM GARANTIA DE QUALQUER TIPO, # EXPRESSA OU IMPLÍCITA, INCLUINDO, MAS NÃO SE LIMITANDO ÀS GARANTIAS DE
# COMERCIALIZAÇÃO, ADEQUAÇÃO A UM DETERMINADO FIM E
# NÃO INFRACÇÃO. EM NENHUMA HIPÓTESE OS AUTORES OU TITULARES DOS DIREITOS AUTORAIS SERÃO
# RESPONSÁVEL POR QUALQUER RECLAMAÇÃO, DANOS OU OUTRA RESPONSABILIDADE, SEJA EM UMA AÇÃO
Nº DE CONTRATO, DECLARAÇÃO OU DE OUTRA FORMA, DECORRENTE DE, FORA DE OU EM CONEXÃO
# COM O SOFTWARE OU O USO OU OUTRAS NEGOCIAÇÕES NO SOFTWARE.
from _future_ import print_function
tempo de importação, sys, sinal, atexit, urllib, urllib2, matemática
de upm import pyupm_mpu9150 as sensorObj
def main ():
# data = {}
# data ['magnetrometro'] = raw_input ("Informe a temperatura")
# data = urlib.urlencode (data)
# post_request = urlib2. Request (post_url, dados, cabeçalhos)
# Experimente:
# post_response = urlib2.urlopen (post_request)
# print post_response.read ()
# exceto URLError como e:
# print "Erro:", e.reason
# Instancie um MPU9250 no barramento I2C 0
sensor = sensorObj. MPU9250 ()
## Manipuladores de saída ##
# Esta função impede que o python imprima um rastreamento de pilha quando você pressiona control-C
def SIGINTHandler (signum, frame):
aumentar SystemExit
# Esta função permite que você execute o código na saída
def exitHandler ():
imprimir ("Saindo")
sys.exit (0)
# Registrar manipuladores de saída
atexit.register (exitHandler)
sinal.sinal (sinal. SIGINT, SIGINTHandler)
sensor.init ()
x = sensorObj.new_floatp ()
y = sensorObj.new_floatp ()
z = sensorObj.new_floatp ()
enquanto (1):
sensor.update ()
sensor.getAccelerometer (x, y, z)
# print ("Acelerômetro:")
# print ("AX:%.4f"% sensorObj.floatp_value (x), end = '')
# print ("AY:%.4f"% sensorObj.floatp_value (y), end = '')
# print ("AZ:%.4f"% sensorObj.floatp_value (z))
módulo1 = (sensorObj.floatp_value (x) -0,005) ** 2+ (sensorObj.floatp_value (y) -0,0150) ** 2+ (sensorObj.floatp_value (z) -0,0450) ** 2
# imprimir (módulo1)
módulo1 = ("%.1f"% abs (((módulo1 ** 0,5) -1) * 9,8))
# imprimir (módulo1)
#
# sensor.getGyroscope (x, y, z)
# print ("Gyroscope: 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 ("Magnetômetro: MX:", sensorObj.floatp_value (x), end = '')
# print ("MY:", sensorObj.floatp_value (y), end = '')
# print ("MZ:", sensorObj.floatp_value (z))
módulo2 = sensorObj.floatp_value (x) ** 2 + sensorObj.floatp_value (y) ** 2 + sensorObj.floatp_value (z) ** 2
# imprimir (módulo2)
módulo2 = ("%.2f"% (módulo2 ** 0,5))
# imprimir (módulo2)
arq = open ('/ tmp / dados.txt', 'w')
texto =
texto.append (str (modulo2) + "," + str (modulo1))
arq.writelines (texto)
arq.close ()
# link = ('https://data.sparkfun.com/input/0lwWlyRED5i7K0AZx4JO?private_key=D6v76yZrg9CM2DX8x97B&mag='+str(modulo2))
# print ('enviando dados')
# send = urllib2.urlopen (link)
# page = send.read ()
# imprimir página)
# link = ('https://data.sparkfun.com/input/1noGndywdjuDGAGd6m5K?private_key=0mwnmR9YRgSxApAo0gDX&acel='+str(modulo1))
# print ('enviando dados')
# send = urllib2.urlopen (link)
# page = send.read ()
# imprimir página)
# print ("Temperatura:", sensor.getTemperature ())
# imprimir()
# time.sleep (.5)
if _name_ == '_main_':
a Principal()
Código do Servidor Local
tempo de importação
importar BaseHTTPServer
HOST_NAME = '172.17.56.9' # !!! LEMBRE-SE DE ALTERAR ISTO !!!
PORT_NUMBER = 80 # Talvez defina isso para 9000.
a = 0
classe MyHandler (BaseHTTPServer. BaseHTTPRequestHandler):
def do_HEAD (s):
s.send_response (200)
s.send_header ("Content-type", "text / html")
s.end_headers ()
def do_GET (s):
dados = le_dados ()
imprimir (dados)
"" "Responder a um pedido GET." ""
se s.path == "/ 1":
s.send_response (200)
s.send_header ("Content-type", "text / plain")
s.end_headers ()
s.wfile.write (dados)
elif s.path == "/ 2":
s.send_response (200)
s.send_header ("Content-type", "text / plain")
s.end_headers ()
s.wfile.write ("2")
outro:
s.send_response (200)
s.send_header ("Content-type", "text / plain")
s.end_headers ()
s.wfile.write (dados)
# s.wfile.write ("não encontrado !!")
def le_dados ():
arq = open ('/ tmp / dados.txt', 'r')
texto = arq.readline ()
arq.close ()
retornar texto
if _name_ == '_main_':
server_class = BaseHTTPServer. HTTPServer
httpd = server_class ((HOST_NAME, PORT_NUMBER), MyHandler)
print time.asctime (), "Servidor inicia -% s:% s"% (HOST_NAME, PORT_NUMBER)
Experimente:
a = a + 2
httpd.serve_forever ()
exceto KeyboardInterrupt:
passar
httpd.server_close ()
print time.asctime (), "Servidor para -% s:% s"% (HOST_NAME, PORT_NUMBER)
Código de Execução dos Códigos anteriores no Shell
#! / bin / bash
echo "começando mag_python"
sudo python mag_python.py &
echo "iniciar servidor"
sudo python server2.py
Etapa 6: Resultado Final
Feito isso como aulas escolhidas ser auxiliadas e incrementadas pelo projeto Smart Lesson desenvolvido com a Dragonboard 410c. Servindo de facilitador e proporcionando um maior aprendizado nos sistemas de ensino tanto público quanto privado.
LINK para aplicativo no Google Play:
Link para os códigos Py:
Recomendado:
Despertador inteligente: um despertador inteligente feito com Raspberry Pi: 10 etapas (com imagens)
Despertador inteligente: um despertador inteligente feito com Raspberry Pi: Você sempre quis um relógio inteligente? Se sim, esta é a solução para você! Fiz o Smart Alarm Clock, é um relógio que você pode alterar a hora do alarme de acordo com o site. Quando o alarme disparar, haverá um som (campainha) e 2 luzes
Jardinagem inteligente baseada em IoT e agricultura inteligente usando ESP32: 7 etapas
Jardinagem inteligente baseada em IoT e agricultura inteligente usando ESP32: O mundo está mudando com o tempo e a agricultura. Hoje em dia, as pessoas estão integrando a eletrônica em todos os campos e a agricultura não é exceção para isso. Esta fusão da eletrônica na agricultura está ajudando os agricultores e as pessoas que administram jardins
Lição 2: Usando o Arduino como fonte de alimentação para um circuito: 6 etapas
Lição 2: Usando o Arduino como fonte de alimentação para um circuito: Olá novamente, alunos, para minha segunda lição do meu curso para ensinar eletrônica básica. Para aqueles que não viram minha primeira lição, que descreve o básico dos circuitos, por favor, veja isso agora. Pra quem já viu meu arquivo anterior
Workshop de Java - Lição nº 1: 9 etapas
Workshop de Java - Lição nº 1: Bem-vindo ao Workshop de Java - Lição nº 1. Esta lição é fornecida a você por código de classe () na Virginia Tech
Lição 6 do carro tanque Arduino - Controle de ponto de acesso de Bluetooth e Wifi: 4 etapas
Arduino Tank Car Lição 6 - Bluetooth e Wifi Hot Spot Control: Nesta lição, aprendemos como controlar o aplicativo móvel Robot car através de WiFi e Bluetooth. Apenas usamos a placa de espasão wi-fi esp8266 como placa de expansão e controlamos o vagão-tanque via receptor IR nas lições anteriores. Nesta lição, vamos aprender