viernes, 14 de agosto de 2015

Mi primer tuerca con OPENSCAD..

Estoy impresionado con este programa OPENSCAD un lenguaje parametrico para CAD 2D y 3D con el cual podemos crear objetos e imprimirlos con nuestra impresora 3D existe blender, autocad y otros pero este soft es lo mas :) utiliza una libreria de geometria CGAL por lo cual es un lenguaje parametrico con funciones geometricas y matematicas...

Una tuerca autofrenante sin usar librerias es una prueba usando la matematica y geometria como corresponde se pueden lograr piezas mas complejas y animarlas :)

difference()
{
translate([1,1,0])cube([10,10,5]);
translate([4,4,1])cylinder(r=0.8,h=4,$fn=6,$fa=0.1,$fs=0.5);
translate([8,4,1])cylinder(r=0.8,h=4,$fn=6,$fa=0.1,$fs=0.5);
translate([4,8,1])cylinder(r=0.8,h=4,$fn=6,$fa=0.1,$fs=0.5);
translate([8,8,1])cylinder(r=0.8,h=4,$fn=6,$fa=0.1,$fs=0.5);
}


difference(){
translate([8,-10,8])cylinder(r=6,h=3,$fn=0,$fa=0.1,$fs=0.5);
translate([11.5,-10.2,8])cube([3,0.35,3.5]);
translate([1.5,-10.2,8])cube([3,0.35,3.5]);
rotate(118)translate([-9,-2.5,8])cube([3,0.35,3.5]);
rotate(60)translate([-1.5,-12,8])cube([3,0.35,3.5]);
rotate(60)translate([-11,-12,8])cube([3,0.35,3.5]);
rotate(118)translate([-19,-2.5,8])cube([3,0.35,3.5]);
translate([8,-10,-1])cylinder(r=4,h=15,$fn=0,$fa=0.1,$fs=0.5);
}


difference(){
translate([8,-10,1])cylinder(r=8,h=7,$fn=6,$fa=0.1,$fs=0.5);
translate([8,-10,-1])cylinder(r=4,h=15,$fn=0,$fa=0.1,$fs=0.5);
}


Y se puede exportar como un STL para usarlo con repetier-Host u otro...


lunes, 3 de agosto de 2015

Arduino - Comunicación con SIM800l GPRS/GSM

Resumen de funcionamiento shield sim800l, como interface arduino, esp8266, esp32 u otro microcontrolador, se puede utilizar para un sistema de seguridad, comunicacion gsm, scanner, etc.

Ejemplos  y casos de uso.

1)Sistema de seguridad
PIR --> Arduino ---> sim800L    )))  (gprs/gsm)   (((( "celular 3G"

2)Sistema de seguridad 2(nodos wifi bajo consumo )

PIR_1 -->esp-01 -))))        ((((--router_wifi_red_domotica--)))     ((((-esp-12--sim800l-)))) celular 3G
PIR_2 --->esp-01-))))                                                                                 
PIR_3 --->esp-01-))))

3)Sistema de comunicacion y reconocimiento de voz

maple_mini --->sim800l  ))) gprs/gsm/internet
                      --->esp-12  )))wifi P2P/router
                      --->easy-VR "reconocimiento de voz"
                      -->HC-05 programacion por bluetooth o conexion a celulares
                      --->GPS
                      ---->RF transceiver de rf 2.4ghz red domotica

Este es el breakout sim800l con comunicacion serie el cual se puede conectar a un uC 'microcontrolador', arduino, esp8266, raspberry pi etc, o a un programador usb-rs232
Hay varias versiones de este  CI , sim800, sim900 y el adaptador para smd, se puede armar pero ya hay breakout desarroladas, por costos muy bajos.
El breakout sim800l que consegui no tiene salida ni entrada de audio por lo cual me limita solo a realizar llamadas y enviar y recibir mensajes.

Hoja de datos
http://www.seeedstudio.com/wiki/LoNet_-_GSM/GPRS/GPS_Breakout


  • Quad-band 850/900/1800/1900MHz( cuatribanda para 2G y 3G)
  • GPRS multi-slot class12 connectivity: max. 85.6kbps(down-load/up-load)
  • GPRS mobile station class B
  • Controlled by AT Command (3GPP TS 27.007, 27.005 and SIMCOM enhanced AT Commands)
  • Supports charging control for Li-Ion battery
  • Supports Real Time Clock
  • Supply voltage range 3.4V ~ 4.4V (muy importante recomendado 4.2)
  • Integrated GPS/CNSS and supports A-GPS
  • Supports 3.0V to 5.0V logic level (conversion TTL 3vcc a 5vvcc)
  • Low power consumption, 1mA in sleep mode
  • Supports GPS NMEA protocol
  • Compact size 27mm x 46mm x 10mm
  • Standard SIM Card



  • Diagrama de conexion
    este diagrama de conexion es bastante bueno tuve inconvenientes para hacerlo funcionar consejo hay que alimentarlo con una fuente estable alrededor de 4.2vcc@800mA ya sea una bateria LIPO o una fuente regulada no usar la alimentacion de arduino porque funciona pero no adecuadamente ya que el sim800 tiene un ESD el cual si detecta baja o alta tension se desconecta o reinicia... (Proteccion por alto o vajo voltaje) el cual es muy buena funcion ya que nos asegura no dañarlo muy importanto leer lo que responde por la consola serie


    Fuente switching  ---->sim800l -->arduino o esp8266



    El primer ejemplo lo conectas direscto al uC le bajas el codigo de FONA o el tuyo y ya esta.
    El segundo te conectas con un USB-FT232 y desde una consola ya sea en win o linux abris la terminal en /dev/usb te conectas con baudrate 9600 y tenes que ingrasar los comandos AT.


    PDF con todos los comandos AT
    http://www.seeedstudio.com/wiki/images/5/51/SIM800_ATCommand_Manual_V1.02.pdf

    Aca hay muhca info.
    http://www.seeedstudio.com/wiki/LoNet_-_GSM/GPRS/GPS_Breakout

    En cuanto a librerias deberian descargar la ultima verision del IDE para arduino ya que hubieron muchos cambios en las librerias y soporte para hardware han agregado el soporte para los esp8266 esta mi querido souliss(framework domotica) y muchas otras placas

    Esta libreria de ADAFRUIT es recomenda ya que esta completa poder realizar llamadas enviar sms y conectarte a internet solo funciona con la version del IDE nueva de arduino
    https://github.com/adafruit/Adafruit_FONA_Library (ya tiene implementado los comandos AT)
    este es un codigo de ejemplo para mi alrma ya que fona tiene cosas que no voy a ocupar pero para hacer pruebas y sacar el codigo que necesitas te sirve.

    https://github.com/pablinn/sim800_v2

    Video demo de sim800l usando FONA_Library


    Sldos.....


    Agregado de protocolos TCP
    Desarrollo de libreria con soporte "HTTP GET y POST" le falta mucho pero me gusta como esta quedando.

    *modo debug o logico(ver las respuestas AT o solo los estado True o False) para poder hacer tu programa basado en estados(maquina de estados )
    *generar una clase
    *soporte para TCP/IP o UDP/IP
    *"HTTP GET o POST "

    https://github.com/pablinn/sim800v3.git


    Saludos....

    Envio de mensajes
    Una forma simple y sencilla de mandar mensaje con la librería que estoy haciendo de ultima borra el resto y deja la que necesitas me imagino que es para automatización.

    4.2@800mA (estables con esto y ya lo charle en el grupo de whatsapp debe ser fijo no debe variar sino se desconecta de la red)

    AT+CBC   --> indica la tension 0,100,4212 (0, 100 % carga de la bateria , tension en milivolt)

     una vez conecatado a la red demora 3 segundos revisar con

    AT+COPS=? redes disponibles
    AT+COPS?  red conectada
    AT+CGREG?

    Mandar mensaje conectado a la red movil (unifon - movistar / CTImovil - claro)

    AT+CMGF=1
    AT+CMGS=\"+54299xxxxx\"  (el cel es con cod \"+pais-area-celular\")
    te devuelve >
    mandas el msj y terminas con control Z
    escribir (0x1A)

    en la libreria sim800v3 el cual esta funcionando la probamos en varios celulares un compañero colombiano logro automatizar una cerradura desde su celular asi que funciona si no es otra cosa..
    Ademas te podes conectar a internet usando TCP/IP UDP/IP HTTP  FTP EMAIL POP funciones de RADIO FM :) aun no termino ya estoy mareado :O

        //CMGS_SMS("+54299xxxxx","Hola Mundo");

    tener en cuenta la tension revisar con AT+CBC varias veces no debe variar o se resetea o desconecta.

    Saludos.

    Bueno nada nuevo a lo mucho que hay solo el montaje final un arduino nano los dos PIR por las interrupciones del nano para ponerlo en modo sleep y ahorrar el consumo de la bateria.



    Saludos..

    jueves, 9 de abril de 2015

    esp8266 - Resumen de shield

    1)Esta es el esp8266 version esp-01 tiene un consumo elevado de alrededor de los 3.3V@200mA por lo que funciona con el adaptador USB-RS232 pero para montajes finales hay que usar una fuente externa.
    La conexion de GPIO0 se usa solo para ponerlo en modo de programacion para actualizar el firmware o bajarle un firmware propio.
    El firmware original utiliza comandos AT a 115200 BAUD (115200-8N1) funciona pero los comandos AT son muy lentos.

    Modificacion para poder programarlo para otros firmware no es necesario pero es una mejora.








    Una ves todo armado te conectas con una terminal serie bajo win o lin y seleccionas la /dev/ttyUSB0 a 115200 y para probar ingresas los comandos AT

    Lista de comandos at especificaciones y soft para descargarles firmwares.

    Otra guia de comandos AT

    AT te responde OK
    AT+GMR ->te muestra la version del firmware
    AT+CWMODE=1 ->modo de la estacion
    AT-CWLAP -->lista los accespoint wifi
    AT+CWJAP="nodo","contraseña" -->join to acces point se conecta al AP DHCP
    AT+CIFSR ->nos muestra la ip dhcp del AP
    AT+CIPMUX=1 ->cant de conexiones multiples :) creo soporta 5
    AT+CIPSTART="TCP","ip",80 --> protocolo(tcp/udp) - ip - puerto
    AT+CIPSEND=50 -->envia un paquete de longitud 50
    AT+CIPCLOSE -->finaliza la coneccion
    Versiones de librerias para arduino usando lo comandos AT hay varias se pueden clonar desde github y probralas y usar la que mas les guste pero la verdad que todas van a ser bastante lentas por los comandos AT la otra opcion es descargarle otro frimware o actualizarlo por alguna falla o tener la ultima version.

    descargar el firmware

    foro oficial

    pagina oficial con firmware actualizados para comandos AT

    ultimo firmware que descargue y funciona a 115200 otras versiones creo a 9600 tiene cuatro archivos .bin para subir al esp8266

    guia muy buena para bajar el sdk para desarrollo en C + el esptool.py para subir el frimware nuevo bajo linux

    Forma rapida y sencilla de hacerlo con esptool.py desde linux yo uso un make file por las direcciones de memoria.
    Makefile
    PORT:=/dev/ttyUSB0
    ESPTOOL_PY:=~/esp8266/esptool/esptool.py

    FW_FILE_1:=boot_v1.1.bin
    FW_FILE_2:=user1.bin
    FW_FILE_3:=esp_init_data_default.bin
    FW_FILE_4:=blank.bin
    dir_1:=0x00000
    dir_2:=0x01000
    dir_3:=0x7C000
    dir_4:=0x7E000

    burn:
    ($(ESPTOOL_PY) --port $(PORT) write_flash $(dir_1) $(FW_FILE_1) $(dir_2) $(FW_FILE_2) $(dir_3) $(FW_FILE_3) $(dir_4) $(FW_FILE_4))||(true)


    para win vi este tutorial no lo he probado
    https://developer.mbed.org/users/sschocke/code/WiFiLamp/wiki/Updating-ESP8266-Firmware
    Bueno tristemente encontre un post interesante el cual menciona que los firmware funcionan mas rapido que la libreria softwareSerial de arduino por el cual esto es un inconveniete para poder debuguear la terminal una opcion para bajarle el baudrate es un frimware de electrodragon o este
    http://www.rei-labs.net/esp8266-update-firmware-to-change-the-baudrate/

    o usar la libreria recomendada por Dario que utiliza una libreria AltSoftserial que no tiene problema con las velocidades del esp-8266
    https://github.com/ssokol/esp8266

    Implementacion al ide de arduino para poder programarlo des de ahi como a un arduino
    http://makezine.com/2015/04/01/installing-building-arduino-sketch-5-microcontroller/

    Prueba y error hay demasiado para estas placas pero son impresionantes,

    Sldos...
    Ejemplo de uso del esp-01 con un usb-rs232 conexion TCP a google con http protocol usando GET usando la imaginacion podria hacerse muchas cosas usando TCP/IP o UDP/IP y los protocolos de aplicaciones programarlalos con las librerias para comandos AT bajo arduino sobre el esp8266.

    Para conectarlo a arduino tenemos que usar un conversor logico 3.3@5.5 y una fuente externa de 200mA aprox.asi que a soldar se ha dicho posteare resultados......

    Bueno ahora si funciono :) agregando el logic converter pero aun falta porque el codigo resetea la conexion y no muestra demasiada informacion mañana lo vere ya tengo sueño...

    esp-01 ->ttl_logic_conv->arduino_uno(pin 0 y pin 1)
    usb-rs232-->arduino_uno(pin 8 - pin 9 - pin gnd)






    Codigo de prueba usando esta libreria https://github.com/ssokol/esp8266 por el soporte UDP..


    #include "ESP8266.h"
    #include <AltSoftSerial.h>
    AltSoftSerial debuger;

    ESP8266 wifi(WIFI_MODE_STA,115200);
    bool cone=false;

    int dataCallback(char *data)
    {
    //data callback
    debuger.println(data);
    }
    void connectCallback(){
    cone=true;
    }
    void setup()
    {
    debuger.begin(9600);
    debuger.println("Inicializacion ESP8266");
      int ret;
    char* ret1;
    ret = wifi.initializeWifi(&dataCallback,&connectCallback);
    ret = wifi.connectWifi("ssid","contraseña");
      ret1 = wifi.ip();
    debuger.println(ret1);
    ret = wifi.startClient("www.google.com.ar",80,25000);//puerto y timeout
    ret = wifi.send("GET /search?q=arduino HTTP/1.1");

    wifi.enableBeacon("Mi_ESP");
     }

    void loop()
    {
    wifi.run();
     }
    Bueno siguiendo con los avance hay dos modos interesantes de ocupar el modulo como clinte o server de modo standalone o en modo AP
    STA (cliente-server) -->AP --dhcp->notebook
    AP(dhcp+cliente/server) ---> notebook




    #include "SoftwareSerial.h"
    //#include "string.h"
    SoftwareSerial debug(8,9);
    int del=5000 ;


    char *esp_at(char *at_cmd){
    int i=0;
    char cad[300]="\0";
    char c;

    Serial.write("AT\r\n");
    delay(del);

    if (Serial.available()){

    Serial.write(at_cmd);
    delay(del);
    while(Serial.available()>0)
    {
    c=Serial.read();
    cad[i]=c;
    i++;
    }

    }

    return(cad);
    cad[0]='\0';
    }


    void setup()
    {
    debug.begin(9600);
    Serial.begin(115200);


    //stand alone
    /*
    debug.print(esp_at("AT+CWMODE=1\r\n"));
    delay(del);
    debug.print(esp_at("AT+CWJAP=\"ssid\",\"pass\"\r\n"));
    delay(del);
    /*debug.print(esp_at("AT+CIFSR\r\n"));
    delay(del);*/
    /*
    debug.print(esp_at("AT+CIPMUX=0\r\n"));
    delay(del);
    debug.print(esp_at("AT+CIPSTART=0,\"UDP\",\"192.168.2.255\",8888\r\n"));
    delay(del);
    debug.print(esp_at("AT+CIPSEND=0,9\r\n"));
    delay(del);
    debug.print(esp_at("123456789\r\n"));
    delay(del);
    */

    //AP
    debug.print(esp_at("AT+CWMODE=3\r\n"));
    delay(del);
    debug.print(esp_at("AT+CWSAP=\"ESP\",\"hola\",11,0\r\n"));
    delay(del);
    debug.print(esp_at("AT+CWDHCP=0,0\r\n"));
    delay(del);
    debug.print(esp_at("AT+CIPMUX=1\r\n"));
    delay(del);
    debug.print(esp_at("AT+CIPSTART=1,\"UDP\",\"192.168.4.255\",8888\r\n"));
    delay(del);
    debug.print(esp_at("AT+CIPSEND=1,9\r\n"));
    delay(del);
    debug.print(esp_at("123456789\r\n"));
    delay(del);


    }

    void loop(){

    }
    Tengo un par de problemas con el control de datos enviados en modo broadcast pero funciona :)



    ********************************30/12/2015***************************************

    Esto ya es obsoleto ya una implementacion en el IDE de arduino con el cual ya podemos programar las placas ESP8266 via USART, se viene y ya es posible usar OTA programacion a traves de la conexion WIFI sin cables.
    Les recomiendo usar la ultima version del IDE para arduino el cual soporta los esp averiguen sobre OTA.

    Y se viene el ESP32 tiene wifi - bluetooth - rf - adc - dac - spi - usart - i2c -i2s - pwm etc gran placa....



    SLdos...


    
    

    miércoles, 4 de marzo de 2015

    esp8266 - Descargando codigo en C


    Hola dejo este aporte para todos los que tienen un esp8266 esp-01 y si tienen el esp-12 mejor aun esta basado en el trabajo de cnLohr es una guia de como hacer nuestros propios firmware en C para descargar al esp8266 o sea no se nesecita un arduino para hacerlo funcionar esta basado en los SDK del esp8266 y un cross-compiler en C yo lo probe en ubuntu y funciona vi otro trbajo hecho en windows pero no lo he probado.







    esta es la guia de instalacion del cross-compiler para linux esta muy bien explicada y resumida hacerlo con la info oficial es imposible lleva tiempo pero funciona muy bien con esta guia :)

    https://github.com/cnlohr/ws2812esp8266

    esto lo encontre hace poco es la info del SDK y API que ya tiene incorporado para programar en C 

    https://drive.google.com/file/d/0Bwm4smy8r1hOMzl0ajNtQVdVTVk/view?usp=sharing

    bueno espero relizar mas avances con la version esp-12...