jueves, 31 de enero de 2013
Introducción
Pingüino es un dispositivo electrónico, basado en el uso de un único, pero poderoso y complejo Chip Microcontrolador, que es capaz de actuar como un Controlador Lógico de Procesos Embebido, pues puede recibir y procesar datos del exterior a través de sensores o transductores conectados a sus entradas (de luz, temperatura, sonido, otros), para procesarlos lógicamente, y en función de ello, generar cambios sobre su entorno a través de actuadores o transductores conectados a sus salidas (lámparas, motores, pistones, otros) con total autonomía de un computador personal, aunque puede permanecer conectado a éste, aún luego de ser programado, para enviar y recibir datos desde y hacia el mismo.
Pingüino es Software Libre y Hardware de Fuentes Abiertas
Los Planos del Hardware y el Código Fuente del Software de Pingüino se desarrollan y distribuyen bajo el modelo de Software Libre, que permite a cualquier persona, darle uso para cualquier propósito, estudiarlo, realizar modificaciones y redistribuirlo, bajo éstos mismos términos.
Ésta característica fundamentalmente, hace de Pingüino un dispositivo de especial interés para aficionados, entusiastas, estudiantes, docentes, profesionales y emprendedores que pueden hacer uso pleno de estas libertades, para acceder al conocimiento tecnológico que sustenta su creación, y a partir de éste, desarrollar nuevos conocimientos, tecnologías y/o dispositivos para dar solución a necesidades individuales y grupales.
Pingüino está derivado de Arduino
Pingüino fué creado a finales del año 2008 por el Ing. Electrónico Francés Jean Pierre Mandon, como parte de los proyectos de su empresa HackingLabs, y de su labor docente en la Universidad Aix Provence en Francia. Jean Pierre observó la posibilidad de diseñar un dispositivo similar a Arduino, pero "portándolo" desde la plataforma de Microcontroladores ATMEGA de ATMEL (de Arduino) a los Microcontroladores
PIC de Microchip.
La intención principal de éste cambio fué aprovechar sus conocimientos en la plataforma PIC, y la excelente oportunidad que representaba que algunos modelos de PICs (PIC18F2550 y 4550) integran ya una interfaz USB, que en el caso de Arduino se implementa a través de un chip adicional que actúan como adaptador/convertidor Serial (RS-232) a USB (Bus Serial Universal).
En el diseño de Pingüino, J.P. Mandón también decantó por otras alternativas respecto a Arduino a nivel de Software, optando por el Lenguaje de Programación Python y la Biblioteca de Interfáces Gráficas WxWidgets para el desarrollo del IDE o Entorno de Programación (versus Java para Arduino), y por GPUTILS (Utilidades GNU para PICs) y SDCC (Small Device C Compiler) basado en GNU gcc (versus AVR-GCC para Arduino).
Construcción
Materiales
1 Resistencia 10 k
2 Resistencia 470
1 Resistencia 220
2 Condensador 22pF ceramico
1 Condensador 220nF poliester
2 Condensador 100uF electrolitico
1 Condensador 100nF ceramico
1 Led rojo
1 Led verde
1 Cristal 20MHz
1 Diodo 1N4007
1 Pulsador
1 Conector USB
1 Conector para bateria
1 Zocalo 40 pines
1 PIC18F4550
1 LM7805CT
Circuito
Placa impresa
Algunas imágenes del Pinguino PIC terminado
1 Resistencia 10 k
2 Resistencia 470
1 Resistencia 220
2 Condensador 22pF ceramico
1 Condensador 220nF poliester
2 Condensador 100uF electrolitico
1 Condensador 100nF ceramico
1 Led rojo
1 Led verde
1 Cristal 20MHz
1 Diodo 1N4007
1 Pulsador
1 Conector USB
1 Conector para bateria
1 Zocalo 40 pines
1 PIC18F4550
1 LM7805CT
Circuito
Placa impresa
Algunas imágenes del Pinguino PIC terminado
Instalación
Para la instalación del IDE de Pinguino
Paso 1. Primero instalaremos los drivers setup.exe en C:/LibUSB
Paso 2. Instale el Python python-2.6.6.msi
Paso 3. Descomprime el IDE y ejecutalo x4-easy-rev857.rar
Abra el programa en el pinguino_start.bat
Paso 4. Conecte el Pinguino y cuando le pida los drivers seleccione la ruta C:/LibUSB/Driver
Paso 5. Por ultimo configure en el IDE que trabajara con el Micro 4550 esto en el menú Pinguino - Seleccionar tarjeta
version 11 - linux
antes instalar las librerias
python-pyside
python-pip
python-wheel
python-setuptools
python-bs4
python-usb
instalar
pinguino-ide.deb
pinguino-libraries.deb
pinguino-linux32-sdcc-mpic16.deb
Paso 1. Primero instalaremos los drivers setup.exe en C:/LibUSB
Paso 2. Instale el Python python-2.6.6.msi
Paso 3. Descomprime el IDE y ejecutalo x4-easy-rev857.rar
Abra el programa en el pinguino_start.bat
Paso 4. Conecte el Pinguino y cuando le pida los drivers seleccione la ruta C:/LibUSB/Driver
Tiene que quedar reconocido de esta manera
Paso 5. Por ultimo configure en el IDE que trabajara con el Micro 4550 esto en el menú Pinguino - Seleccionar tarjeta
version 11 - linux
antes instalar las librerias
python-pyside
python-pip
python-wheel
python-setuptools
python-bs4
python-usb
instalar
pinguino-ide.deb
pinguino-libraries.deb
pinguino-linux32-sdcc-mpic16.deb
miércoles, 30 de enero de 2013
Led
void setup()
{
pinMode(7, OUTPUT);
}
void loop()
{
toggle(7); // alternate ON and OFF
delay(1000); // wait for a second
}
martes, 29 de enero de 2013
pulsador
const int buttonPin = 2;
const int ledPin = 7;
int buttonState = 0;
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT);
}
void loop(){
buttonState = digitalRead(buttonPin);
if (buttonState == HIGH) {
digitalWrite(ledPin, HIGH);
}
else {
digitalWrite(ledPin, LOW);
}
}
lunes, 28 de enero de 2013
leds secuenciales
int compteur; // definit une variable entiere pour le compteur
int i; // variable servant a l'initialisation
void setup(void)
{
for (i=0;i<8;i++)
{
pinMode(i,OUTPUT); // definit les broches 0 a 7 en sortie
digitalWrite(i,LOW); // fixe un niveau 0 sur les sorties
}
}
void loop(void)
{
for (compteur=0;compteur<8;compteur++) // pour compteur variant de 0 a 7
{
digitalWrite(compteur,HIGH); // allume la led compteur
if (compteur==0)
digitalWrite(7,LOW); // si led courante=0 eteindre la led 7
else
digitalWrite(compteur-1,LOW); // sinon eteindre la led d'indice -1
delay(500); // attendre 500 milli-Secondes
}
}
domingo, 27 de enero de 2013
rgb
#define a2 12
int valu = 0;
void setup()
{
}
void loop(){
analogWrite(a1, 255);
analogWrite(a2, 0);
delay(1000);
analogWrite(a1, 0);
analogWrite(a2, 255);
delay(1000);
}
sábado, 26 de enero de 2013
Entrada analogica
int sensorPin = 0;
int ledPin =7;
int sensorValue = 0;
void setup() {
pinMode(ledPin, OUTPUT);
}
void loop() {
sensorValue = analogRead(sensorPin);
digitalWrite(ledPin, HIGH);
delay(sensorValue);
digitalWrite(ledPin, LOW);
delay(sensorValue);
}
viernes, 25 de enero de 2013
lcd
void setup() {
// initialize the library with the numbers of the interface pins
lcd.pins(0, 1, 2, 3, 4, 5, 0, 0, 0, 0); // RS, E, D4 ~ D8
// set up the LCD's number of columns and rows:
lcd.begin(16, 2);
// Print a message to the LCD.
lcd.print("Hola mundo!");
}
void loop() {
// Turn off the blinking cursor:
lcd.noBlink();
delay(3000);
// Turn on the blinking cursor
//lcd.printf("Pinguino: %d", millis()/100);
lcd.blink();
delay(3000);
}
jueves, 24 de enero de 2013
bluetoo
char caractere;
void setup()
{
pinMode(7, OUTPUT);
Serial.begin(9600);
}
void loop()
{
if (Serial.available())
{
caractere=Serial.read();
if(caractere=='1'){
digitalWrite(7,LOW);
}
if(caractere=='2'){
digitalWrite(7,HIGH);
}
}
}
miércoles, 23 de enero de 2013
Sensor de distancia
// Los pines a donde se conectará el sensor
int trig = 7; //23
int echo = 6; //24
int dist = 0;
int distancia() {
int centimetros = 1;
while (digitalRead(echo) == LOW) {
digitalWrite(trig, HIGH);
delayMicroseconds(50);
digitalWrite(trig, LOW);
}
while (digitalRead(echo) == HIGH) {
centimetros++;
delayMicroseconds(27);
}
delay(50);
return centimetros;
}
void setup() {
pinMode(trig, OUTPUT);
pinMode(echo, INPUT);
lcd.pins(0, 1, 2, 3, 4, 5, 0, 0, 0, 0); // RS, E, D4 ~ D8
lcd.begin(16, 2);
}
void loop() {
dist = distancia();
lcd.home();
lcd.print("Distancia: ");
lcd.printNumber(dist, 10);
lcd.print("cm.");
delay(20);
}
martes, 22 de enero de 2013
ethernet
/*-----------------------------------------------------
Author: --<>
Date: 28/Oct/2012
Description:
-----------------------------------------------------*/
#include <ethernet/ip_arp_udp.h>
#define BUFFER_MAX 224
static u8 buf[BUFFER_MAX+1]; // the received message
u16 len; // the length of the received messages
void setup() {
// put your setup code here, to run once:
// this is the enc28j60 ip address
u8 myip[4] = { 192, 168, 2, 2 };
// this is the enc28j60 mac address
u8 mymac[6] = { 0x02, 0x04, 0x08, 0x10, 0x12, 0x14 };
init_ip_arp_udp (mymac, myip);
enc28j60Init (mymac);
}
void loop() {
len = enc28j60PacketReceive(BUFFER_MAX, buf);
CDC.printf("received! len: %d\n", len);
if (len == 0) {
return;
}
if(eth_type_is_arp_and_my_ip(buf, len)) {
make_arp_answer_from_request(buf, len);
return;
}
if(eth_type_is_ip_and_my_ip(buf, len)==0) {
return;
}
if(buf[IP_PROTO_P]==IP_PROTO_ICMP_V && buf[ICMP_TYPE_P]==ICMP_TYPE_ECHOREQUEST_V) {
// the ping reply
make_echo_reply_from_request(buf, len);
return;
}
}
Author: --<>
Date: 28/Oct/2012
Description:
-----------------------------------------------------*/
#include <ethernet/ip_arp_udp.h>
#define BUFFER_MAX 224
static u8 buf[BUFFER_MAX+1]; // the received message
u16 len; // the length of the received messages
void setup() {
// put your setup code here, to run once:
// this is the enc28j60 ip address
u8 myip[4] = { 192, 168, 2, 2 };
// this is the enc28j60 mac address
u8 mymac[6] = { 0x02, 0x04, 0x08, 0x10, 0x12, 0x14 };
init_ip_arp_udp (mymac, myip);
enc28j60Init (mymac);
}
void loop() {
len = enc28j60PacketReceive(BUFFER_MAX, buf);
CDC.printf("received! len: %d\n", len);
if (len == 0) {
return;
}
if(eth_type_is_arp_and_my_ip(buf, len)) {
make_arp_answer_from_request(buf, len);
return;
}
if(eth_type_is_ip_and_my_ip(buf, len)==0) {
return;
}
if(buf[IP_PROTO_P]==IP_PROTO_ICMP_V && buf[ICMP_TYPE_P]==ICMP_TYPE_ECHOREQUEST_V) {
// the ping reply
make_echo_reply_from_request(buf, len);
return;
}
}
lunes, 21 de enero de 2013
Comunicación con Java
este ejemplo nos permite prender y apagar un led desde la PC, para esto descarge el programa en java arduino.rar luego grabar el programa ejemplo en el pinguino
Ejemplo 1
char dato;
unsigned char receivedbyte;
unsigned char rxstr[8];
void setup(){
pinMode(28, OUTPUT);
}
void loop(){
while((receivedbyte = CDC.read(rxstr)) == 0);
if(receivedbyte > 0){
dato = rxstr[1];
if(dato == '1'){
digitalWrite(28, 1);
}
if(dato == '0'){
digitalWrite(28, 0);
}
}
}
Ejemplo 1
char dato;
unsigned char receivedbyte;
unsigned char rxstr[8];
void setup(){
pinMode(28, OUTPUT);
}
void loop(){
while((receivedbyte = CDC.read(rxstr)) == 0);
if(receivedbyte > 0){
dato = rxstr[1];
if(dato == '1'){
digitalWrite(28, 1);
}
if(dato == '0'){
digitalWrite(28, 0);
}
}
}
domingo, 20 de enero de 2013
sr04
Code for 8 bit PICs
/*----------------------------------------------------- File: hc-sr04_p8.pde Author: Edermar Dominguez <Edermar_12[_at_]hotmail.com> Date: 31 Jan 2013 Changes by: Oliver Göpferich <pinguplus[_at_]live.de> Date: Sat Mar 22 09:47:36 2014 Description: Measure the distance to an obstacle using the Ultrasonic sensor HC-SRC04 PIC: PIC18F25k50 Should also work with any other 8 bit PIC18F -----------------------------------------------------*/ int trig = 3; int echo = 4; unsigned long pulse; float distance; void setup() { Serial.begin(9600); pinMode (USERLED,OUTPUT); pinMode (echo,INPUT); // Declare the echo pin as INPUT pinMode (trig,OUTPUT); // Declare the trigger pin as OUTPUT digitalWrite(USERLED,LOW); } // I'm using my own pulseIn() function, because builtin pulseIn() // provides to high values with the 25k50 unsigned long myPulseIn(unsigned char pin, unsigned char state, unsigned long timeout) { unsigned long width = 0; // keep initialization out of time critical area // convert the timeout from microseconds to a number of times through unsigned long numloops = 0; unsigned long maxloops = timeout / 10; //We have a microsecond by 10 loops (mean). // wait for any previous pulse to end while (digitalRead(pin) == state) { if (numloops++ == maxloops) { return 0; } } // wait for the pulse to start while (digitalRead(pin) != state) if (numloops++ == maxloops) { return 0; } // wait for the pulse to stop while (digitalRead(pin) == state) { width++; } //There will be some error introduced by the interrupt handlers. //At last loop, each interaction have 12us + 60us from digitalRead() instructions //return width * 12 + 60; return width * 9; } void medirdistance() { // set the trigger for 2 ms low digitalWrite(trig, LOW); delayMicroseconds(2); // Set the trigger for 15 ms high (minimum 10 ms) digitalWrite(trig, HIGH); delayMicroseconds(15); // Set the trigger low. This starts the measuring procedure. digitalWrite(trig, LOW); // Measure the length of the input signal pulse = myPulseIn(echo, HIGH, 3000); // The speed of sound is 29 cm/second (/29). The ultrasonic pulse travels // the distance to the obstacle and back (/2). distance = (float)(((pulse)/29.0/2.0)); Serial.printf("Puls: %d\r\n", pulse); Serial.printf("distance: %f cm\r\n", distance); toggle(USERLED); // Just wait for a second delay(1000); } void loop() { //run repeatedly: medirdistance(); }
Suscribirse a:
Entradas (Atom)