Arduino

Глобус синхронизированный с виртуальным глобусом на экране ПК

Идея этого проекта заключается в том, что бы поворачивая глобус, установленный на столе на специальной подставке, на экране монитора поворачивался виртуальный глобус.
Давайте посмотрим, как это происходит на коротком видео.

Такая функция будет удобна например, на уроке географии.

Инструменты и материалы:
-Arduino uno;
-Резистор 1 кОм;
-Провода;
-Поворотный энкодер;
-Светодиодное кольцо Neopixel 24;
-Глобус;
-МДФ 3мм;
-Лазерный резак;

Шаг первый: пайка
Схему мастер не предоставил, но она не очень сложная. На неопиксельном кольце есть четыре контактные площадки. Две площадки — питание, одна ввод данных, и одна вывод данных. Необходимо припаять провода к трем площадкам кроме «вывод данных».
Питание подключается к 5В Ардуино. «Ввод данных» к любому цифровому контакту через резистор.
Так же необходимо подключить энкодер.

Шаг второй: светодиодное кольцо
Теперь нужно, чтобы при повороте глобуса последовательно загорались светодиоды. Достигается это поворотом энкодера. Глобус нужно закрепить на ручке энкодера, а светодиодное кольцо укладывается под глобус.

Для работы с кольцом neopixel мастер установил библиотеку adafruit neopixel в Arduino IDE. В этой библиотеке есть несколько примеров проектов, один из которых он использовал, чтобы проверить, работают ли соединения.

Дальше мастер написал код, который заставляет часть кольца загораться в зависимости от вращения поворотного энкодера.

 Показать / Скрыть текстsigned char lastpos = 0;
void loop() {
encoder.tick();

signed char pos = encoder.getPosition();
if (pos != lastpos) {
lastpos = pos;
Serial.println(pos);
lightPos = pos;
lights();
}
}

void lights(){
strip.clear();
strip.fill(strip.Color(255,255,255,255), lightPos % 20, 10);
if (lightPos % 20+ 10 > 24){
strip.fill(strip.Color(255,255,255,255), 0, lightPos % 20 + 10 — 24);
}
strip.show();
}

Шаг третий: основание
Основание мастер вырезал на лазерном резаке. Оно сделано в форме ящика. Внутри располагается ардуино. По центру крепится энкодер. Затем укладывается светодиодное кольцо и глобус.

Шаг четвертый: проект Unity*
*Unity — межплатформенная среда разработки компьютерных игр.
Чтобы подключить Arduino к Unity, мастер использовал Ardity. Ardity — это пакет Unity, который позволяет Unity отправлять и получать информацию от Arduino. ОН разработал сцену с землей на динамическом фоне. Виртуальная Земля будет освещена так же, как и Земля, в зависимости от системного времени.

Ardity получает информацию от Arduino и отправляет ее настраиваемому сценарию. Приведенный ниже скрипт получает информацию от Ardity и использует ее для вращения Земли в Unity.

 Показать / Скрыть текстusing System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class RotateEarth : MonoBehaviour
{
//public GameObject sun;
int lastMsg = 0;
// Start is called before the first frame update
void Start()
{

}

void OnMessageArrived(string msg)
{
if (float.Parse(msg) <= lastMsg)
{
transform.Rotate(0, 0, 18);
//sun.transform.Rotate(0, -18, 0);
lastMsg = int.Parse(msg);
}
else if (float.Parse(msg) >= lastMsg)
{
transform.Rotate(0, 0, -18);
//sun.transform.Rotate(0, -18, 0);
lastMsg = int.Parse(msg);
}
Debug.Log("msg arrived");
}

void OnConnectionEvent(bool success)
{

}
}

В дальнейшем мастер собирается сделать несколько улучшений этого проекта.
В частности, это способ подключения земного шара к энкодеру. В следующей версии он планирует использовать в глобусе ось, которая будет удерживаться на месте с помощью подшипников. Он планирует использовать 2 подшипника, чтобы ось надежно удерживалась на месте. Затем поворотный энкодер будет помещен под эту ось.

Так же он планирует сделать новый корпус с помощью 3D-принтера.

Источник

Похожие статьи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть
Закрыть