lundi 18 janvier 2016
Rendu utilisant le filtre "Skeleton" de G'MIC Gimp
Image d'origine :
http://www.flickr.com/photos/fontplaydotcom/6044205066/sizes/o/in/photostream/
Par www.fontplay.com CC BY 2.0
Rendu :
vendredi 15 janvier 2016
S'amuser avec G'MIC à partir d'une image vide
mardi 12 janvier 2016
Essai du nouveau filtre Droste avec G'MIC Gimp
Merci à Souphead pour le portage de ce filtre Mathmap sur G'MIC.
Ces exemples sont réalisés avec le fichier tiger.eps de GhostScript.
La ligne de commande Droste est :
Ces exemples sont réalisés avec le fichier tiger.eps de GhostScript.
La ligne de commande Droste est :
-souphead_droste10 25,100,1,1,1,45,0,0,0,0,1,5,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0
samedi 21 novembre 2015
Arduino Nano et LCD1602
Après avoir acheté quelques afficheurs LCD 1602 sur le site aliexpress.com il est apparu un problème de reconnaissance du port USB sur nos ordis lorsqu'ils étaient raccordés à un Arduino Nano en utilisant le schéma https://www.arduino.cc/en/Tutorial/HelloWorld . La résistance R4 de 220 Ohms semble poser problème.
Pour ne plus utiliser cette résistance R4 ainsi que le potentiomètre voici un petit montage qui utilise 2 sorties PWM ainsi qu'un exemple de programme de test.
Un transistor économique NPN 2N2222 branché en émetteur commun pilote la broche 12 (ou K) du circuit LCD 1602.
Un autre transistor économique PNP 2N2907 branché en collecteur commun pilote la broche 3 (ou VEE / Vo) du circuit LCD 1602.
Programme de test :
Schéma et raccordements :
Pour ne plus utiliser cette résistance R4 ainsi que le potentiomètre voici un petit montage qui utilise 2 sorties PWM ainsi qu'un exemple de programme de test.
Un transistor économique NPN 2N2222 branché en émetteur commun pilote la broche 12 (ou K) du circuit LCD 1602.
Un autre transistor économique PNP 2N2907 branché en collecteur commun pilote la broche 3 (ou VEE / Vo) du circuit LCD 1602.
Programme de test :
/*
lcd1602 avec vatiations de luminosité de l'affichage et du fond.
samj le 21 novembre 2015
Domaine Public
Câblage :
Arduino Resist. 2N2222 2N2907 LCD1602
(E commun) (C commun)
(+5)-------------------------------------------(2) VCC
(+5)-------------------------------------------(15) LED +
(GND)------------------------------------------(1) VSS
(GND)------------------------------------------(5) R/W
(GND)-------------------(E)
(GND)------------------------------(C)
(3)------[4.7kOhm]------(B)
(5)------[4.7kOhm]-----------------(B)
(C)---------------------(16) LED -
(E)----------(3) VEE
(7)---------------------------------------------(4) RS
(8)---------------------------------------------(6) Enable
(9)---------------------------------------------(11) DB4
(10)--------------------------------------------(12) DB5
(11)--------------------------------------------(13) DB6
(12)--------------------------------------------(14) DB7
*/
/**********************************************
Initialisation
**********************************************/
#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 8, 9, 10, 11 , 12); // LiquidCrystal(rs, enable, d4, d5, d6, d7)
int Sortie_PWM_Luminosite_Fond = 3; // vers resistance 4.7kOhm reliée à la base 2N2222
int Sortie_PWM_Contrastes_Caracteres = 5; // vers resistance 4.7kOhm reliée à la base 2N2907
int Luminosite_Fond = 255;
int Luminosite_Caracteres = 50; // Ajuster cette valeur
int Variation_Luminosite_Caracteres;
/**********************************************
SETUP
**********************************************/
void setup()
{
pinMode(Sortie_PWM_Luminosite_Fond, OUTPUT);
pinMode(Sortie_PWM_Contrastes_Caracteres, OUTPUT);
FondEclaire(Luminosite_Fond, 10);
Variation_Luminosite_Caracteres = 0;
while(Variation_Luminosite_Caracteres < 255){
analogWrite(Sortie_PWM_Contrastes_Caracteres, Variation_Luminosite_Caracteres);
delay(20);
Variation_Luminosite_Caracteres++;
}
analogWrite(Sortie_PWM_Contrastes_Caracteres, Luminosite_Caracteres);
FondNoir(Luminosite_Fond, 20);
// message -> LCD
lcd.noCursor();
lcd.begin(16, 2);
lcd.setCursor(0,0);
lcd.print("Bonjour! Hello!");
lcd.setCursor(0,1);
lcd.print("V 20151121 / ");
lcd.print(Luminosite_Caracteres);
FondEclaire(Luminosite_Fond, 20);
}
/**********************************************
LOOP
**********************************************/
void loop()
{
FondNoir(Luminosite_Fond, 20);
analogWrite(Sortie_PWM_Luminosite_Fond, 0);
lcd.noDisplay();
FondEclaire(40, 50);
FondNoir(100, 25);
// message -> LCD
lcd.clear();
lcd.setCursor(0,0);
lcd.print("abcdefghijklmnop");
lcd.setCursor(0,1);
lcd.print("0123456789ABCDEF");
lcd.display();
FondEclaire(Luminosite_Fond,20);
}
/**********************************************
Fond Noir
**********************************************/
void FondNoir(int Luminosite_Origine, int BaseDeTemps)
{
int index=Luminosite_Origine;
analogWrite(Sortie_PWM_Luminosite_Fond, Luminosite_Origine);
while(index > 0){
analogWrite(Sortie_PWM_Luminosite_Fond, index);
delay(BaseDeTemps);
index=index-1;
}
}
/**********************************************
Fond Eclairé
**********************************************/
void FondEclaire(int Luminosite_Origine, int BaseDeTemps)
{
int index=Luminosite_Origine;
index=0;
analogWrite(Sortie_PWM_Luminosite_Fond, 0);
delay(2000);
while(index < Luminosite_Origine){
analogWrite(Sortie_PWM_Luminosite_Fond, index);
delay(BaseDeTemps);
index=index+1;
}
analogWrite(Sortie_PWM_Luminosite_Fond, Luminosite_Origine);
}
/* FIN */
Schéma et raccordements :
samedi 16 mai 2015
S'amuser avec G'MIC
Les commandes utilisées sur une image de 800*800 pixels
-gimp_chessboard 80,80,0,0,0,1,0,0,0,255,255,255,255,255,0
-Annular_Steiner_Chain_Round_Tile 800,1,0,0,100,0,100,4,85.0909,1,0,0,0,255,0,255,255,0,0,0,0,255,0,0
-samj_Cercle_Polaire 1,0,0,1,0,0,2,0,0,0,50,50
-samj_Barbouillage_Paint_Daub 2,2,100,0.2,1,4,1,2,8
Rendu
samedi 2 mai 2015
lundi 27 avril 2015
Rayons de couleurs en spirale avec G'MIC Gimp
samedi 25 avril 2015
Cercles Concentriques G'MIC Gimp
Accès au filtre sur G'MIC Gimp par :
Trois essais :
ARRAYS & TILES > Concentric Circles A
Trois essais :
Sur l'image : http://fontplay.com/freephotos/seventeen/fpx110610-02.jpg
Avec Symmetrizoscope
dimanche 19 avril 2015
Filtre "Annular Steiner Chain Round Tiles" - G'MIC Gimp
Accès sur G'MIC Gimp par :
Voici deux exemples créés avec ce filtre sur cette image :
http://fontplay.com/freephotos/seventeen/fpx110610-02.jpg
Les lignes de commandes :
Une composition à partir de ce filtre :
ARRAYS & TILES > Annular Steiner Chain Round Tiles
Voici deux exemples créés avec ce filtre sur cette image :
http://fontplay.com/freephotos/seventeen/fpx110610-02.jpg
Les lignes de commandes :
-Annular_Steiner_Chain_Round_Tile_en 800,1,0,0,100,0,100,30,0,0,0,0,0,255,0,255,255,0,127,0,0,255,127,0
-Annular_Steiner_Chain_Round_Tile_en 800,1,0,0,100,180,70,24,0,1,0,0,0,255,6,255,255,0,127,0,0,255,127,0
Une composition à partir de ce filtre :
lundi 13 avril 2015
Filtre "Variations On A Single Color" - G'MIC Gimp
Accès sur G'MIC Gimp par :
Voici deux exemples créés avec ce filtre sur cette image :
http://fontplay.com/freephotos/seventeen/fpx110610-02.jpg
Artistic > Variations On A Single Color
Voici deux exemples créés avec ce filtre sur cette image :
http://fontplay.com/freephotos/seventeen/fpx110610-02.jpg
Variations_On_A_Single_Color_1.jpg
-samj_texture_coloree_en 0,0.7,200,125,50,5,5,45,200,4,0.2,1,10,1,1
Variations_On_A_Single_Color_2.jpg
-samj_texture_coloree_en 1,0.7,173,34,127,5,5,45,200,4,0.2,8,5,1,1
dimanche 12 avril 2015
Signal sinusoïdal sortie PWM pour Arduino UNO
Voici un petit programme qui permet de créer un signal sinusoïdal sur la sortie PWM d'un Arduino UNO.
La fréquence de sortie est limitée.
Le signal de sortie PWM (pin 6) est filtré. Le filtre utilisé est fait avec des composants disponibles à la maison (suffisants pour les tests).
Le programme DDS_Sinewave_Generator.ino :
// Sources
// http://web.csulb.edu/~hill/ee470/Lab%202d%20-%20Sine_Wave_Generator.pdf
// http://web.csulb.edu/~hill/ee470/sinewave_pcm.zip
// samj le 12 avril 2015
// Schema du filtre de sortie à brancher sur Pin 6 pwm Arduino UNO (fait avec des composants disponibles à la maison)
//
// Pin6____270ohms__________0.47mH__________0.47mH____________________Tension de sortie sinusoïdale
// | | | |
// | | | |
// 470nF 1000nF 470nF 270ohms
// | | | |
// 0V________________|_______________|_______________|__________|
//
//
// Autre schéma http://interface.khm.de/wp-content/uploads/2009/12/dds_lowpass1251.jpg
/*
* sinewave_pcm
*
* Generates 8-bit PCM sinewave on pin 6 using pulse-width modulation (PWM).
* For Arduino with Atmega368P at 16 MHz.
*
* Uses timers 1 and 0. Timer 1 reads the sinewave table, SAMPLE_RATE times a second.
* The sinewave table has 256 entries. Consequently, the sinewave has a frequency of
* f = SAMPLE_RATE / 256
* Each entry in the sinewave table defines the duty-cycle of Timer 0. Timer 0
* holds pin 6 high from 0 to 255 ticks out of a 256-tick cycle, depending on
* the current duty cycle. Timer 0 repeats 62500 times per second (16000000 / 256),
* much faster than the generated sinewave generated frequency.
*
* References:
* http://www.atmel.com/dyn/resources/prod_documents/doc2542.pdf
* http://www.analog.com/library/analogdialogue/archives/38-08/dds.html
* http://www.evilmadscientist.com/article.php/avrdac
* http://playground.arduino.cc/Code/PCMAudio
* http://www.arduino.cc/playground/Code/R2APCMAudio
* http://www.scienceprog.com/generate-sine-wave-modulated-pwm-with-avrmicrocontroller/
* http://www.scienceprog.com/avr-dds-signal-generator-v10/
* http://documentation.renesas.com/eng/products/region/rtas/mpumcu/apn/sinewave.pdf
* http://ww1.microchip.com/downloads/en/AppNotes/00655a.pdf
*
* By Gary Hill
* Adapted
*/
#include <stdint.h>
#include <avr/interrupt.h>
#include <avr/io.h>
#include <avr/pgmspace.h>
// Varie selon modèle, ici UNO, la fréquence est limitée (BF)
// #define SAMPLE_RATE 10000 // T~26 ms F~38.4 Hz
// #define SAMPLE_RATE 100000 // T~2.6 ms F~384 Hz
// #define SAMPLE_RATE 26000 // F~100 Hz
#define SAMPLE_RATE 26000 // F~100 Hz
/*
* The sinewave data needs to be unsigned, 8-bit
*
* sinewavedata.h should look like this:
* const int sinewave_length=256;
*
* const unsigned char sinewave_data[] PROGMEM = {0x80,0x83, ...
*
*/
/* Sinewave table
* Reference:
* http://www.scienceprog.com/generate-sine-wave-modulated-pwm-with-avr-microcontroller/
*/
const int sinewave_length=256;
const unsigned char sinewave_data[] PROGMEM = {
0x80,0x83,0x86,0x89,0x8c,0x8f,0x92,0x95,0x98,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae,
0xb0,0xb3,0xb6,0xb9,0xbc,0xbf,0xc1,0xc4,0xc7,0xc9,0xcc,0xce,0xd1,0xd3,0xd5,0xd8,
0xda,0xdc,0xde,0xe0,0xe2,0xe4,0xe6,0xe8,0xea,0xec,0xed,0xef,0xf0,0xf2,0xf3,0xf5,
0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfc,0xfd,0xfe,0xfe,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfe,0xfd,0xfc,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,
0xf6,0xf5,0xf3,0xf2,0xf0,0xef,0xed,0xec,0xea,0xe8,0xe6,0xe4,0xe2,0xe0,0xde,0xdc,
0xda,0xd8,0xd5,0xd3,0xd1,0xce,0xcc,0xc9,0xc7,0xc4,0xc1,0xbf,0xbc,0xb9,0xb6,0xb3,
0xb0,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x98,0x95,0x92,0x8f,0x8c,0x89,0x86,0x83,
0x80,0x7c,0x79,0x76,0x73,0x70,0x6d,0x6a,0x67,0x63,0x60,0x5d,0x5a,0x57,0x54,0x51,
0x4f,0x4c,0x49,0x46,0x43,0x40,0x3e,0x3b,0x38,0x36,0x33,0x31,0x2e,0x2c,0x2a,0x27,
0x25,0x23,0x21,0x1f,0x1d,0x1b,0x19,0x17,0x15,0x13,0x12,0x10,0x0f,0x0d,0x0c,0x0a,
0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x05,0x06,0x07,0x08,
0x09,0x0a,0x0c,0x0d,0x0f,0x10,0x12,0x13,0x15,0x17,0x19,0x1b,0x1d,0x1f,0x21,0x23,
0x25,0x27,0x2a,0x2c,0x2e,0x31,0x33,0x36,0x38,0x3b,0x3e,0x40,0x43,0x46,0x49,0x4c,
0x4f,0x51,0x54,0x57,0x5a,0x5d,0x60,0x63,0x67,0x6a,0x6d,0x70,0x73,0x76,0x79,0x7c};
int outputPin = 6; // (PCINT22/OC0A/AIN0)PD6, Arduino Digital Pin 6
volatile uint16_t sample;
// This is called at SAMPLE_RATE kHz to load the next sample.
ISR(TIMER1_COMPA_vect) {
if (sample >= sinewave_length) {
sample = -1;
}
else {
OCR0A = pgm_read_byte(&sinewave_data[sample]);
}
++sample;
}
void startPlayback()
{
pinMode(outputPin, OUTPUT);
// Set Timer 0 Fast PWM Mode (Section 14.7.3)
// WGM = 0b011 = 3 (Table 14-8)
// TOP = 0xFF, update OCR0A register at BOTTOM
TCCR0A |= _BV(WGM01) | _BV(WGM00);
TCCR0B &= ~_BV(WGM02);
// Do non-inverting PWM on pin OC0A, arduino digital pin 6
// COM0A = 0b10, clear OC0A pin on compare match,
// set 0C0A pin at BOTTOM (Table 14-3)
TCCR0A = (TCCR0A | _BV(COM0A1)) & ~_BV(COM0A0);
// COM0B = 0b00, OC0B disconnected (Table 14-6)
TCCR0A &= ~(_BV(COM0B1) | _BV(COM0B0));
// No prescaler, CS = 0b001 (Table 14-9)
TCCR0B = (TCCR0B & ~(_BV(CS02) | _BV(CS01))) | _BV(CS00);
// Set initial pulse width to the first sample.
OCR0A = pgm_read_byte(&sinewave_data[0]);
// Set up Timer 1 to send a sample every interrupt.
cli(); // disable interrupts
// Set CTC mode (Section 15.9.2 Clear Timer on Compare Match)
// WGM = 0b0100, TOP = OCR1A, Update 0CR1A Immediate (Table 15-4)
// Have to set OCR1A *after*, otherwise it gets reset to 0!
TCCR1B = (TCCR1B & ~_BV(WGM13)) | _BV(WGM12);
TCCR1A = TCCR1A & ~(_BV(WGM11) | _BV(WGM10));
// No prescaler, CS = 0b001 (Table 15-5)
TCCR1B = (TCCR1B & ~(_BV(CS12) | _BV(CS11))) | _BV(CS10);
// Set the compare register (OCR1A).
// OCR1A is a 16-bit register, so we have to do this with
// interrupts disabled to be safe.
OCR1A = F_CPU / SAMPLE_RATE; // 16e6 / 8000 = 2000
// Enable interrupt when TCNT1 == OCR1A (p.136)
TIMSK1 |= _BV(OCIE1A);
sample = 0;
sei(); // enable interrupts
}
void setup()
{
startPlayback();
}
void loop()
{
while (true);
}
Le signal :
La fréquence de sortie est limitée.
Le signal de sortie PWM (pin 6) est filtré. Le filtre utilisé est fait avec des composants disponibles à la maison (suffisants pour les tests).
Le programme DDS_Sinewave_Generator.ino :
// Sources
// http://web.csulb.edu/~hill/ee470/Lab%202d%20-%20Sine_Wave_Generator.pdf
// http://web.csulb.edu/~hill/ee470/sinewave_pcm.zip
// samj le 12 avril 2015
// Schema du filtre de sortie à brancher sur Pin 6 pwm Arduino UNO (fait avec des composants disponibles à la maison)
//
// Pin6____270ohms__________0.47mH__________0.47mH____________________Tension de sortie sinusoïdale
// | | | |
// | | | |
// 470nF 1000nF 470nF 270ohms
// | | | |
// 0V________________|_______________|_______________|__________|
//
//
// Autre schéma http://interface.khm.de/wp-content/uploads/2009/12/dds_lowpass1251.jpg
/*
* sinewave_pcm
*
* Generates 8-bit PCM sinewave on pin 6 using pulse-width modulation (PWM).
* For Arduino with Atmega368P at 16 MHz.
*
* Uses timers 1 and 0. Timer 1 reads the sinewave table, SAMPLE_RATE times a second.
* The sinewave table has 256 entries. Consequently, the sinewave has a frequency of
* f = SAMPLE_RATE / 256
* Each entry in the sinewave table defines the duty-cycle of Timer 0. Timer 0
* holds pin 6 high from 0 to 255 ticks out of a 256-tick cycle, depending on
* the current duty cycle. Timer 0 repeats 62500 times per second (16000000 / 256),
* much faster than the generated sinewave generated frequency.
*
* References:
* http://www.atmel.com/dyn/resources/prod_documents/doc2542.pdf
* http://www.analog.com/library/analogdialogue/archives/38-08/dds.html
* http://www.evilmadscientist.com/article.php/avrdac
* http://playground.arduino.cc/Code/PCMAudio
* http://www.arduino.cc/playground/Code/R2APCMAudio
* http://www.scienceprog.com/generate-sine-wave-modulated-pwm-with-avrmicrocontroller/
* http://www.scienceprog.com/avr-dds-signal-generator-v10/
* http://documentation.renesas.com/eng/products/region/rtas/mpumcu/apn/sinewave.pdf
* http://ww1.microchip.com/downloads/en/AppNotes/00655a.pdf
*
* By Gary Hill
* Adapted
*/
#include <stdint.h>
#include <avr/interrupt.h>
#include <avr/io.h>
#include <avr/pgmspace.h>
// Varie selon modèle, ici UNO, la fréquence est limitée (BF)
// #define SAMPLE_RATE 10000 // T~26 ms F~38.4 Hz
// #define SAMPLE_RATE 100000 // T~2.6 ms F~384 Hz
// #define SAMPLE_RATE 26000 // F~100 Hz
#define SAMPLE_RATE 26000 // F~100 Hz
/*
* The sinewave data needs to be unsigned, 8-bit
*
* sinewavedata.h should look like this:
* const int sinewave_length=256;
*
* const unsigned char sinewave_data[] PROGMEM = {0x80,0x83, ...
*
*/
/* Sinewave table
* Reference:
* http://www.scienceprog.com/generate-sine-wave-modulated-pwm-with-avr-microcontroller/
*/
const int sinewave_length=256;
const unsigned char sinewave_data[] PROGMEM = {
0x80,0x83,0x86,0x89,0x8c,0x8f,0x92,0x95,0x98,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae,
0xb0,0xb3,0xb6,0xb9,0xbc,0xbf,0xc1,0xc4,0xc7,0xc9,0xcc,0xce,0xd1,0xd3,0xd5,0xd8,
0xda,0xdc,0xde,0xe0,0xe2,0xe4,0xe6,0xe8,0xea,0xec,0xed,0xef,0xf0,0xf2,0xf3,0xf5,
0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfc,0xfd,0xfe,0xfe,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfe,0xfd,0xfc,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,
0xf6,0xf5,0xf3,0xf2,0xf0,0xef,0xed,0xec,0xea,0xe8,0xe6,0xe4,0xe2,0xe0,0xde,0xdc,
0xda,0xd8,0xd5,0xd3,0xd1,0xce,0xcc,0xc9,0xc7,0xc4,0xc1,0xbf,0xbc,0xb9,0xb6,0xb3,
0xb0,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x98,0x95,0x92,0x8f,0x8c,0x89,0x86,0x83,
0x80,0x7c,0x79,0x76,0x73,0x70,0x6d,0x6a,0x67,0x63,0x60,0x5d,0x5a,0x57,0x54,0x51,
0x4f,0x4c,0x49,0x46,0x43,0x40,0x3e,0x3b,0x38,0x36,0x33,0x31,0x2e,0x2c,0x2a,0x27,
0x25,0x23,0x21,0x1f,0x1d,0x1b,0x19,0x17,0x15,0x13,0x12,0x10,0x0f,0x0d,0x0c,0x0a,
0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x05,0x06,0x07,0x08,
0x09,0x0a,0x0c,0x0d,0x0f,0x10,0x12,0x13,0x15,0x17,0x19,0x1b,0x1d,0x1f,0x21,0x23,
0x25,0x27,0x2a,0x2c,0x2e,0x31,0x33,0x36,0x38,0x3b,0x3e,0x40,0x43,0x46,0x49,0x4c,
0x4f,0x51,0x54,0x57,0x5a,0x5d,0x60,0x63,0x67,0x6a,0x6d,0x70,0x73,0x76,0x79,0x7c};
int outputPin = 6; // (PCINT22/OC0A/AIN0)PD6, Arduino Digital Pin 6
volatile uint16_t sample;
// This is called at SAMPLE_RATE kHz to load the next sample.
ISR(TIMER1_COMPA_vect) {
if (sample >= sinewave_length) {
sample = -1;
}
else {
OCR0A = pgm_read_byte(&sinewave_data[sample]);
}
++sample;
}
void startPlayback()
{
pinMode(outputPin, OUTPUT);
// Set Timer 0 Fast PWM Mode (Section 14.7.3)
// WGM = 0b011 = 3 (Table 14-8)
// TOP = 0xFF, update OCR0A register at BOTTOM
TCCR0A |= _BV(WGM01) | _BV(WGM00);
TCCR0B &= ~_BV(WGM02);
// Do non-inverting PWM on pin OC0A, arduino digital pin 6
// COM0A = 0b10, clear OC0A pin on compare match,
// set 0C0A pin at BOTTOM (Table 14-3)
TCCR0A = (TCCR0A | _BV(COM0A1)) & ~_BV(COM0A0);
// COM0B = 0b00, OC0B disconnected (Table 14-6)
TCCR0A &= ~(_BV(COM0B1) | _BV(COM0B0));
// No prescaler, CS = 0b001 (Table 14-9)
TCCR0B = (TCCR0B & ~(_BV(CS02) | _BV(CS01))) | _BV(CS00);
// Set initial pulse width to the first sample.
OCR0A = pgm_read_byte(&sinewave_data[0]);
// Set up Timer 1 to send a sample every interrupt.
cli(); // disable interrupts
// Set CTC mode (Section 15.9.2 Clear Timer on Compare Match)
// WGM = 0b0100, TOP = OCR1A, Update 0CR1A Immediate (Table 15-4)
// Have to set OCR1A *after*, otherwise it gets reset to 0!
TCCR1B = (TCCR1B & ~_BV(WGM13)) | _BV(WGM12);
TCCR1A = TCCR1A & ~(_BV(WGM11) | _BV(WGM10));
// No prescaler, CS = 0b001 (Table 15-5)
TCCR1B = (TCCR1B & ~(_BV(CS12) | _BV(CS11))) | _BV(CS10);
// Set the compare register (OCR1A).
// OCR1A is a 16-bit register, so we have to do this with
// interrupts disabled to be safe.
OCR1A = F_CPU / SAMPLE_RATE; // 16e6 / 8000 = 2000
// Enable interrupt when TCNT1 == OCR1A (p.136)
TIMSK1 |= _BV(OCIE1A);
sample = 0;
sei(); // enable interrupts
}
void setup()
{
startPlayback();
}
void loop()
{
while (true);
}
Le signal :
mercredi 1 avril 2015
Filtre Paint Daub - G'MIC Gimp
Accès sur G'MIC Gimp par :
Voici deux exemples créés avec ce filtre sur ces images :
http://fontplay.com/freephotos/seventeen/fpx110610-02.jpg
http://fontplay.com/freephotos/seventhn/fp121606-03.jpg
Fanart sur une partie de l'image :
http://www.avatarmovie.com/assets/wallpaper/wallpaper_m_1024X768.jpg
Artistic > Paint Daub
Voici deux exemples créés avec ce filtre sur ces images :
http://fontplay.com/freephotos/seventeen/fpx110610-02.jpg
http://fontplay.com/freephotos/seventhn/fp121606-03.jpg
Fanart sur une partie de l'image :
http://www.avatarmovie.com/assets/wallpaper/wallpaper_m_1024X768.jpg
-samj_Barbouillage_Paint_Daub_en 2,2,400,0.5,1,3.3213,1
lundi 30 mars 2015
Mise à jour du script-fu Bokeh Effect
La mise à jour du script Bokeh_Effect_By_Starlight86_V2_Gimp_2_8.scm pour Gimp 2.8.14 par Jontait2 est disponible à partir de ce lien :
Accès par :
Accès par :
Fichier > Créer > Motifs > Bokeh Effect Version 2.3 ...
File > Create > Patterns > Bokeh Effect Version 2.3 ...
Gimp plug-in Wavelet Denoise 0.3.1 jthack Win 32-64
Téléchargement :
Accès par :
Modifications apportées :
http://gimpchat.com/viewtopic.php?f=8&t=12199
149 Ko (152 845 octets)
Accès par :
Filtres > Amélioration > Wavelet Denoise
Filters > Enhance > Wavelet Denoise
Modifications apportées :
http://gimpchat.com/viewtopic.php?f=8&t=12199
dimanche 22 mars 2015
Filtre Colored Engraving - G'MIC Gimp
Accès sur G'MIC Gimp par :
Voici deux exemples créés avec ce filtre sur cette image :
Artistic > Colored Engraving
Voici deux exemples créés avec ce filtre sur cette image :
mercredi 18 mars 2015
Test "Engrave" avec G'MIC-Gimp
Voici le résultat sur cette image réduite disponible sur ce lien :
Origine
Effet
mercredi 7 janvier 2015
Test transfert image sur tissu
Voici le résultat d'un premier test de transfert d'une image sur un morceau de tissu :
Bonne année 2015 :o)
33,6 Mo (35 287 962 octets)
Bonne année 2015 :o)
dimanche 30 novembre 2014
Quelques exemples de G'MIC en ligne de commande
Voici quelques exemples de la commande -apply_video qui peuvent s'appliquer à G'MIC de l'archive proposée sur le message précédent :
Pour obtenir une suite d'images au format PNG :
gmic -apply_video -gimp_do_nothing,video_non_compressee.avi,test.png,1,-1,1
Pour obtenir une suite d'images grises au format JPEG :
gmic -apply_video -to_gray,video_non_compressee.avi,test.jpg,1,-1,1
Pour obtenir une suite d'images floues au format PNG :
gmic filtre="-blur 30" -apply_video $filtre,video_non_compressee.avi,test.png,1,-1,1
Pour obtenir une suite d'images avec des trames au format PNG :
gmic filtre="-halftone 3" -apply_video $filtre,video_non_compressee.avi,test.png,1,-1,1
Pour obtenir une suite d'images au format PNG :
gmic -apply_video -gimp_do_nothing,video_non_compressee.avi,test.png,1,-1,1
Pour obtenir une suite d'images grises au format JPEG :
gmic -apply_video -to_gray,video_non_compressee.avi,test.jpg,1,-1,1
Pour obtenir une suite d'images floues au format PNG :
gmic filtre="-blur 30" -apply_video $filtre,video_non_compressee.avi,test.png,1,-1,1
Pour obtenir une suite d'images avec des trames au format PNG :
gmic filtre="-halftone 3" -apply_video $filtre,video_non_compressee.avi,test.png,1,-1,1
Effet du filtre "-halftone 3" sur une des images png
dimanche 7 septembre 2014
Coolpix L830, RaspberryPi, gPhoto2
Voici un petit résumé des tests d'un Nikon Coolpix L830 activé par Gphoto2 installé sur un RaspberryPi.
Le RaspberryPi est connecté sur un réseau local, son adresse sera nécessaire pour utiliser un client SSH.
Le Nikon Coolpix L830 est connecté au RaspberryPi par USB.
Mise à jour du firmware du Coolpix L830 version 1.1 (si nécessaire).
- https://nikoneurope-fr.custhelp.com/app/answers/detail/a_id/61632
- http://www.nikonsupport.eu/europe/Firmware/L830/v1.1/Fr/ecpx_win_fr.html
Clients SSH pour se connecter avec un terminal sur le RaspberryPi
- Pour Windows : PuTTY
http://www.chiark.greenend.org.uk/~sgtatham/putty/
http://fr.wikipedia.org/wiki/PuTTY
- Pour Android : JuiceSSH
https://play.google.com/store/apps/details?id=com.sonelli.juicessh&hl=fr
gPhoto2
- Accueil
http://www.gphoto.org/
- Documentations
http://www.gphoto.org/doc/manual/ref-gphoto2-cli.html
http://www.gphoto.org/doc/remote/
Installation du RaspberryPi avec Gphoto2
- Une carte microSD de 32 go classe 10 sera utilisée pour le RaspberryPi.
- Téléchargement de O.S. NOOBS sur http://www.raspberrypi.org/downloads/
- Installation de NOOBS sur la carte microSD http://www.framboise314.fr/demarrez-votre-framboise314-au-quart-de-tour-noobs-pour-le-raspberry-pi/
- Installer la distribution Linux Raspbian.
- Utilisateur = pi
- Mot de passe = raspberry
- L'environnement graphique (pas utile dans la phase de configuration) sera accessible par la commande startx
- Voici les commandes utilisées dans la phase de configuration et les tests des commandes gphoto2 (ordre chronologique) :
sudo apt-get update
sudo apt-get install rpi-update
sudo reboot
sudo apt-get upgrade
sudo reboot
sudo apt-get install ntp
ntpq -p
sudo apt-get install gphoto2
(brancher le Coolpix L830 sur un port USB et le démarrer)
gphoto2 --autodetect
- Mise à jour de gphoto2 d'après https://github.com/gonzalo/gphoto2-updater/blob/master/gphoto2-updater.sh
sudo apt-get install gphoto2
sudo apt-get remove -y gphoto2
sudo apt-get install -y libltdl-dev libusb-dev libexif-dev libpopt-dev libudev-dev
wget http://sourceforge.net/projects/gphoto/files/gphoto/2.5.5/gphoto2-2.5.5.tar.bz2
wget http://sourceforge.net/projects/gphoto/files/libgphoto/2.5.5.1/libgphoto2-2.5.5.1.tar.bz2
wget http://ftp.de.debian.org/debian/pool/main/libu/libusbx/libusbx_1.0.17.orig.tar.bz2
tar xvf libusbx_1.0.17.orig.tar.bz2
cd libusbx-1.0.17
./configure
sudo make
sudo make install
cd ..
sudo rm -Rf libusbx-1.0.17
tar xvf libgphoto2-2.5.5.1.tar.bz2
cd libgphoto2-2.5.5.1
./configure
sudo make
sudo make install
cd ..
sudo rm -Rf libgphoto2-2.5.5.1
tar xvf gphoto2-2.5.5.tar.bz2
cd gphoto2-2.5.5
./configure
sudo make
sudo make install
cd ..
sudo rm -Rf gphoto2-2.5.5
sudo ldconfig
- Données de l'appareil par la commande gphoto2 --summary
gphoto2 --summary
Camera summary:
Manufacturer: Nikon Corporation
Model: L830
Version: COOLPIX L830V1.1
Serial Number: 000051003909
Vendor Extension ID: 0xa (1.0)
Vendor Extension Description: microsoft.com: 1.0;
Capture Formats: JPEG
Display Formats: Undefined Type, JPEG, Association/Directory, DPOF, Apple Quickt ime, Defined Type
Device Capabilities:
File Download, File Deletion, File Upload
Generic Image Capture, No Open Capture, No vendor specific capture
Storage Devices Summary:
store_00010001:
StorageDescription: None
VolumeLabel: None
Storage Type: Removable RAM (memory card)
Filesystemtype: Digital Camera Layout (DCIM)
Access Capability: Read-Write
Maximum Capability: 64054362112 (61087 MB)
Free Space (Bytes): 64053575680 (61086 MB)
Free Space (Images): 65000
Device Property Summary:
Battery Level(0x5001):(read only) (type=0x2) Enumeration [2,5,25,50,65,80,100] v alue: 80% (80)
Focal Length(0x5008):(readwrite) (type=0x6) Enumeration [3500] value: 35 mm (350 0)
Focus Mode(0x500a):(readwrite) (type=0x4) Enumeration [2,3] value: Automatic Mac ro (close-up) (3)
Flash Mode(0x500c):(readwrite) (type=0x4) Enumeration [1,2,3,4] value: Flash off (2)
Date & Time(0x5011):(readwrite) (type=0xffff) '20140907T054338'
Property 0xd002:(readwrite) (type=0x6) Enumeration [1,2,3,4,5,6,7,8] value: 3
Property 0xd407:(read only) (type=0x6) 1
Property 0xd303:(read only) (type=0x2) 1
- Liste des configurations par la commande gphoto2 --list-config
gphoto2 --list-config
/main/settings/datetime
/main/settings/fastfs
/main/settings/capturetarget
/main/status/serialnumber
/main/status/manufacturer
/main/status/cameramodel
/main/status/deviceversion
/main/status/vendorextension
/main/capturesettings/flashmode
/main/capturesettings/focallength
/main/capturesettings/focusmode
/main/other/5001
/main/other/5008
/main/other/500a
/main/other/500c
/main/other/5011
/main/other/d002
/main/other/d407
/main/other/d303
- Prendre une photo sauvegardée sur le Coolpix L830 par la commande gphoto2 --trigger-capture
gphoto2 --trigger-capture
(Liste des photos sauvegardées sur le Coolpix L830 par la commande gphoto2 --list-files)
gphoto2 --list-files
There is no file in folder '/'.
There is no file in folder '/store_00010001'.
There is no file in folder '/store_00010001/DCIM'.
There are 2 files in folder '/store_00010001/DCIM/100NIKON'.
#1 DSCN0023.JPG rd 441 KB 1600x1200 image/jpeg
#2 DSCN0024.JPG rd 268 KB 1600x1200 image/jpeg
- Importer les images du Coolpix L830 sur le RaspberryPi
gphoto2 --get-all-raw-data 0
- Script test.sh pour prendre une photo chaque 20 secondes en limitant le nombre par une boucle. Fichier à enregistrer au format Linux.
#!/bin/bash
n=1
while (($n<=5))
do
gphoto2 --trigger-capture
n=$((n+1))
sleep 20
done
Lancer le script par la commande ./test.sh
Les images sont sauvegardée sur le Coolpix L830.
- Changer la longueur focale du Coolpix L830 et prendre une photo.
gphoto2 --set-config /main/capturesettings/focallength=100 --trigger-capture
Autre article avec une autre caméra par Akkana Peck
- Article
http://shallowsky.com/blog/hardware/pi-motion-camera-2.html
- Programmes
https://github.com/akkana/scripts/tree/master/pycamera
Le RaspberryPi est connecté sur un réseau local, son adresse sera nécessaire pour utiliser un client SSH.
Le Nikon Coolpix L830 est connecté au RaspberryPi par USB.
Mise à jour du firmware du Coolpix L830 version 1.1 (si nécessaire).
- https://nikoneurope-fr.custhelp.com/app/answers/detail/a_id/61632
- http://www.nikonsupport.eu/europe/Firmware/L830/v1.1/Fr/ecpx_win_fr.html
Clients SSH pour se connecter avec un terminal sur le RaspberryPi
- Pour Windows : PuTTY
http://www.chiark.greenend.org.uk/~sgtatham/putty/
http://fr.wikipedia.org/wiki/PuTTY
- Pour Android : JuiceSSH
https://play.google.com/store/apps/details?id=com.sonelli.juicessh&hl=fr
gPhoto2
- Accueil
http://www.gphoto.org/
- Documentations
http://www.gphoto.org/doc/manual/ref-gphoto2-cli.html
http://www.gphoto.org/doc/remote/
Installation du RaspberryPi avec Gphoto2
- Une carte microSD de 32 go classe 10 sera utilisée pour le RaspberryPi.
- Téléchargement de O.S. NOOBS sur http://www.raspberrypi.org/downloads/
- Installation de NOOBS sur la carte microSD http://www.framboise314.fr/demarrez-votre-framboise314-au-quart-de-tour-noobs-pour-le-raspberry-pi/
- Installer la distribution Linux Raspbian.
- Utilisateur = pi
- Mot de passe = raspberry
- L'environnement graphique (pas utile dans la phase de configuration) sera accessible par la commande startx
- Voici les commandes utilisées dans la phase de configuration et les tests des commandes gphoto2 (ordre chronologique) :
sudo apt-get update
sudo apt-get install rpi-update
sudo reboot
sudo apt-get upgrade
sudo reboot
sudo apt-get install ntp
ntpq -p
sudo apt-get install gphoto2
(brancher le Coolpix L830 sur un port USB et le démarrer)
gphoto2 --autodetect
- Mise à jour de gphoto2 d'après https://github.com/gonzalo/gphoto2-updater/blob/master/gphoto2-updater.sh
sudo apt-get install gphoto2
sudo apt-get remove -y gphoto2
sudo apt-get install -y libltdl-dev libusb-dev libexif-dev libpopt-dev libudev-dev
wget http://sourceforge.net/projects/gphoto/files/gphoto/2.5.5/gphoto2-2.5.5.tar.bz2
wget http://sourceforge.net/projects/gphoto/files/libgphoto/2.5.5.1/libgphoto2-2.5.5.1.tar.bz2
wget http://ftp.de.debian.org/debian/pool/main/libu/libusbx/libusbx_1.0.17.orig.tar.bz2
tar xvf libusbx_1.0.17.orig.tar.bz2
cd libusbx-1.0.17
./configure
sudo make
sudo make install
cd ..
sudo rm -Rf libusbx-1.0.17
tar xvf libgphoto2-2.5.5.1.tar.bz2
cd libgphoto2-2.5.5.1
./configure
sudo make
sudo make install
cd ..
sudo rm -Rf libgphoto2-2.5.5.1
tar xvf gphoto2-2.5.5.tar.bz2
cd gphoto2-2.5.5
./configure
sudo make
sudo make install
cd ..
sudo rm -Rf gphoto2-2.5.5
sudo ldconfig
- Données de l'appareil par la commande gphoto2 --summary
gphoto2 --summary
Camera summary:
Manufacturer: Nikon Corporation
Model: L830
Version: COOLPIX L830V1.1
Serial Number: 000051003909
Vendor Extension ID: 0xa (1.0)
Vendor Extension Description: microsoft.com: 1.0;
Capture Formats: JPEG
Display Formats: Undefined Type, JPEG, Association/Directory, DPOF, Apple Quickt ime, Defined Type
Device Capabilities:
File Download, File Deletion, File Upload
Generic Image Capture, No Open Capture, No vendor specific capture
Storage Devices Summary:
store_00010001:
StorageDescription: None
VolumeLabel: None
Storage Type: Removable RAM (memory card)
Filesystemtype: Digital Camera Layout (DCIM)
Access Capability: Read-Write
Maximum Capability: 64054362112 (61087 MB)
Free Space (Bytes): 64053575680 (61086 MB)
Free Space (Images): 65000
Device Property Summary:
Battery Level(0x5001):(read only) (type=0x2) Enumeration [2,5,25,50,65,80,100] v alue: 80% (80)
Focal Length(0x5008):(readwrite) (type=0x6) Enumeration [3500] value: 35 mm (350 0)
Focus Mode(0x500a):(readwrite) (type=0x4) Enumeration [2,3] value: Automatic Mac ro (close-up) (3)
Flash Mode(0x500c):(readwrite) (type=0x4) Enumeration [1,2,3,4] value: Flash off (2)
Date & Time(0x5011):(readwrite) (type=0xffff) '20140907T054338'
Property 0xd002:(readwrite) (type=0x6) Enumeration [1,2,3,4,5,6,7,8] value: 3
Property 0xd407:(read only) (type=0x6) 1
Property 0xd303:(read only) (type=0x2) 1
- Liste des configurations par la commande gphoto2 --list-config
gphoto2 --list-config
/main/settings/datetime
/main/settings/fastfs
/main/settings/capturetarget
/main/status/serialnumber
/main/status/manufacturer
/main/status/cameramodel
/main/status/deviceversion
/main/status/vendorextension
/main/capturesettings/flashmode
/main/capturesettings/focallength
/main/capturesettings/focusmode
/main/other/5001
/main/other/5008
/main/other/500a
/main/other/500c
/main/other/5011
/main/other/d002
/main/other/d407
/main/other/d303
- Prendre une photo sauvegardée sur le Coolpix L830 par la commande gphoto2 --trigger-capture
gphoto2 --trigger-capture
(Liste des photos sauvegardées sur le Coolpix L830 par la commande gphoto2 --list-files)
gphoto2 --list-files
There is no file in folder '/'.
There is no file in folder '/store_00010001'.
There is no file in folder '/store_00010001/DCIM'.
There are 2 files in folder '/store_00010001/DCIM/100NIKON'.
#1 DSCN0023.JPG rd 441 KB 1600x1200 image/jpeg
#2 DSCN0024.JPG rd 268 KB 1600x1200 image/jpeg
- Importer les images du Coolpix L830 sur le RaspberryPi
gphoto2 --get-all-raw-data 0
- Script test.sh pour prendre une photo chaque 20 secondes en limitant le nombre par une boucle. Fichier à enregistrer au format Linux.
#!/bin/bash
n=1
while (($n<=5))
do
gphoto2 --trigger-capture
n=$((n+1))
sleep 20
done
Lancer le script par la commande ./test.sh
Les images sont sauvegardée sur le Coolpix L830.
- Changer la longueur focale du Coolpix L830 et prendre une photo.
gphoto2 --set-config /main/capturesettings/focallength=100 --trigger-capture
Autre article avec une autre caméra par Akkana Peck
- Article
http://shallowsky.com/blog/hardware/pi-motion-camera-2.html
- Programmes
https://github.com/akkana/scripts/tree/master/pycamera
dimanche 4 mai 2014
Utiliser G'MIC sur une tablette Android
GMICOL est un moyen d'améliorer, de créer des effets sur une image sans ajouter d'application Android.
Les filtres sont disponibles en ligne à partir de https://gmicol.greyc.fr/
C'est à essayer... :o)
Copie d'écran sur tablette Galaxy Tab 3 8"
Résultat du traitement GMICOL (couleur et cadre gris)
Image utilisée
Auteur
Galerie
Image
Licence
Les filtres sont disponibles en ligne à partir de https://gmicol.greyc.fr/
C'est à essayer... :o)
Copie d'écran sur tablette Galaxy Tab 3 8"
Résultat du traitement GMICOL (couleur et cadre gris)
Image utilisée
Auteur
- Mike's Birds
- Photo prise le 19 octobre 2013 à Esperanza, Californie, États-Unis (Sony DSLR-A580)
Galerie
Image
Licence
S'abonner à :
Messages (Atom)






























