Reconstruir el sistema de seguridad Misión Imposible en Elixir en RaspberryPi

por Ju Liu

Reconstruir el sistema de seguridad Misión Imposible en Elixir en RaspberryPi

Sí, has leído bien. En este tutorial vamos a reconstruir el asombroso sistema de seguridad presentado en el clásico juego Misión imposible de 1996. Utilizaremos una Raspberry Pi, muchos sensores y escribiremos el código en Elixir .

Solo un repaso rápido para aquellos que no han visto la película. Ethan Hunt es un súper espía que trata de infiltrarse en la sede de la CIA para robar una valiosa lista de agentes dobles. Desafortunadamente, la lista se almacena de forma segura en un búnker altamente seguro con los siguientes mecanismos de seguridad:

  • Rayos láser
  • Sensores de temperatura
  • Sensores de ruido
  • Sensores de vibración de tierra

Preparación

Antes de comenzar, permítanme brindarles el mejor consejo que recibí cuando comencé a desarrollar una Raspberry Pi: ¡ consígase un cable serie USB a TTL ! Puede encontrarlos en adafruit ( enlace , tutorial ) y estos pequeños dispositivos le ahorrarán la molestia de tener que conectar un monitor externo, un teclado y un mouse para usar su Raspberry. Simplemente conecte el cable, encienda la screen y la pluma en la que se encuentra.

Ahora necesitamos algunos sensores para construir nuestro sistema de seguridad, y he encontrado un conjunto hecho por Sunfounder que tiene todo lo que necesitamos y aún más ( enlace ). No estoy afiliada de ninguna manera con la empresa, pero publicaron todo el código C y Python para controlarlos en github, así que creo que son geniales.

¡Lo último que necesitamos es Elixir! Podemos instalarlo en nuestra Raspberry Pi siguiendo este tutorial .

Empecemos

Ahora podemos crear el proyecto usando nuestra amada mix :

 $ mix new intrusion_countermeasures 

y agregue elixir_ale como una dependencia en nuestro archivo mix.exs :

 defmodule IntrusionCountermeasures.Mixfile do use Mix.Project def project do [app: :intrusion_countermeasures, version: "0.1.0", elixir: "~> 1.4", build_embedded: Mix.env == :prod, start_permanent: Mix.env == :prod, deps: deps()] end def application do [extra_applications: [:logger], mod: {IntrusionCountermeasures, []}] end defp deps do [{:elixir_ale, "~> 0.5.6"}] end end 

Esta biblioteca nos proporcionará las abstracciones para controlar los pines GPIO de Raspberry y el bus I2C. Puede encontrar más información sobre la biblioteca aquí . Así que vamos a instalar y compilar:

 $ mix deps.get && mix compile 

Lo primero es lo primero: ¡un láser!

Coge tu módulo de emisor láser y conéctalo a la placa de pruebas de esta manera:

Ahora podemos comenzar a escribir el código para nuestro sistema de seguridad:

 defmodule IntrusionCountermeasures do use Application def start(_, _) do {:ok, laser} = Gpio.start_link(17, :output) pid = spawn(fn -> loop(laser) end) {:ok, pid} end def loop(laser) do :timer.sleep(200) turn_on(laser) :timer.sleep(200) turn_off(laser) loop(laser) end defp turn_on(pid) do Gpio.write(pid, 0) end defp turn_off(pid) do Gpio.write(pid, 1) end end 

Conectamos el pin 17 de GPIO usando Gpio.start_link , especificando que lo estamos usando como salida. Luego generamos una función recursiva de bucle que enciende y apaga repetidamente el láser. Podemos ejecutar nuestra aplicación con iex -S mix y el láser comenzará a parpadear. ¿Cuan genial es eso?

También tenga en cuenta que el comportamiento predeterminado es escribir 0 para activar algo y 1 para desactivarlo. Para hacer que el código sea más fácil de entender, acabo de agregar los ayudantes turn_on y turn_off .

Aquí hay una imagen de la configuración en mi escritorio:

Lee mas

Ahora que tenemos el láser parpadeando, vaya al blog Erlang Solutions para aprender a agregar sensores para el ruido, la temperatura y la detección de vibraciones.

Texto original en inglés.