Jeff06 a écrit:Bonjour.
C'est passionnant, mais ... quand on n'y connait rien en électronique ?
Prévoyez-vous un petit guide "pas à pas", avec liste du matériel, schémas, et programmes ?
Ce serait une vraie aide !
Jeff.
alpaph a écrit:Pour ma part, j'envisage de le faire avec un accès à des menus via un joystick. As-tu aussi ce projet ?
A+
Je ne me rends pas compte de l'épaisseur de ce type de matériel. Voici celui que je vise (http://www.lextronic.fr/P19782-platine-4display-shield-96.html). Je n'ai pas l'impression qu'il soit très épais. Il est vraiment plus cher que celui que tu envisages, mais bon, il a la couleur et il consomme plusdeldude a écrit:Par contre le soucis des joystick c'est que c'est assez imposant donc ça implique une télécommande assez épaisse..
alpaph a écrit:PS: Je compte utiliser mon servo 360 (pas modifié!) comme ça je n'ai pas besoin de mesurer l'angle 'pan'
alpaph a écrit:alpaph a écrit:PS: Je compte utiliser mon servo 360 (pas modifié!) comme ça je n'ai pas besoin de mesurer l'angle 'pan'
Il y a un sujet là dessus car ça m'intéresse ? c'est quand même plus facile à piloter !
alpaph a écrit:Coté servo, je trouve ta librairie très bien et très complète : je vais certainement l'utiliser (ce sera plus propre pour mon code). Par contre, le contrôle d'un servo 360 est plus délicat, notamment pour le caler sur une position 0. De plus, on ne peut plus le manoeuvrer via "une commande angulaire" mais en contrôlant sa vitesse et sa durée de rotation. As-tu une idée sur la question ?
if(Type == CONTINIOUS)
{
Angle = Center + move;
}
myservo.write(Angle);
delay(15);
if(Type == CONTINIOUS)
{
reset();
}
myservo.writeMicroseconds(1500);
alpaph a écrit:Voici celui que je vise (http://www.lextronic.fr/P19782-platine-4display-shield-96.html). Je n'ai pas l'impression qu'il soit très épais. Il est vraiment plus cher que celui que tu envisages, mais bon, il a la couleur et il consomme plus
Ce qui m'embête le plus, c'est le développement du menu : j'ai repéré quelques librairies ... à voir.
hansel a écrit:alpaph a écrit:alpaph a écrit:Le servo que j'utilise est un GWS S125 1T
EDIT: C'est un servo 'normal', donc pas 'rotation continue', donc positionnement exact!
André a écrit:hansel a écrit:Le servo que j'utilise est un GWS S125 1T
EDIT: C'est un servo 'normal', donc pas 'rotation continue', donc positionnement exact!
Et tu arrives à le faire tourner sur 360° ?
Parce que j'en ai un mais je n'arrive pas à lui faire faire un tour complet.
Du coup, j'en ai un qui devrait faire 3 tours, réduit à 1.5 tour par pignons et encore un peu avec la radio.
deldude a écrit:c'est que il se commande par le port série et le port série on en a besoin si on veut utiliser des modules sans fil simples et peu onéreux.
J-C a écrit:(à cause du Timer1 il me semble me souvenir)
hansel a écrit:Oui, mais ça dépend peut-être de la radio... J'arrive aussi a faire tourner mon servo tilt (un servo normal) sur 180°
André a écrit:hansel a écrit:Oui, mais ça dépend peut-être de la radio... J'arrive aussi a faire tourner mon servo tilt (un servo normal) sur 180°
Qu'est-ce que tu utilises comme radio Hans ?
Jeff06 a écrit:Bonjour.
C'est passionnant, mais ... quand on n'y connait rien en électronique ?
Prévoyez-vous un petit guide "pas à pas", avec liste du matériel, schémas, et programmes ?
Ce serait une vraie aide !
Jeff.
deldude a écrit:Bonjour à tous,
Il y a quelques temps, j'avais lancé l'idée d'utiliser arduino pour l'électronique de nos nacelles.
Certains d'entre vous sont d'ailleurs passés à l'acte avec visiblement un certain succès.
deldude a écrit:
PS : quelqu'un peut me confirmer comment sont cablés les servo : je suis parti du principe (signal,vcc,gnd) mais je me suis peut être trompé..
Jeff06 a écrit:Bonjour.
C'est passionnant, mais ... quand on n'y connait rien en électronique ?
Prévoyez-vous un petit guide "pas à pas", avec liste du matériel, schémas, et programmes ?
Ce serait une vraie aide !
Jeff.
// Nacelle
#include <Servo.h>
#include <NewSoftSerial.h>
NewSoftSerial mySerial(3, 2);
#define PHOTOS_PAR_HEURE 600 // nb photos en 1h
#define POS_PER_TURN 10
#define NB_TILT_INCLIN 5 //nb inclinaisons
#define TILT_PIN 9
#define PAN_PIN 10
#define APN_PIN 13
#define TILT_INCLIN_1 0 //1ère inclinaison en degrés
#define TILT_INCLIN_2 22 //2ère inclinaison en degrés
#define TILT_INCLIN_3 45 //3ère inclinaison en degrés
#define TILT_INCLIN_4 67 //4ère inclinaison en degrés
#define TILT_INCLIN_5 90 //5ère inclinaison en degrés
#define TILT_HORIZON 131 // l'apn regarde l'horizon
#define TILT_BAS 43 // l'apn regarde en bas
#define PAN_IDLE 1517
#define PAN_SPEED 20
#define AUTOKAP_PAN_SPEED 1470
#define TURN_TIME 4035
const int SetAPCPin = 4; //pin4 de l'arduino reliée à la pin7 de l'APC (setting de l'APC)
int attente = 4000;
int tilt_position = 0;
Servo tilt_servo;
Servo pan_servo;
int firstSensor = 0; // first analog sensor
int secondSensor = 0; // second analog sensor
int thirdSensor = 0; // digital sensor
int inByte = 0; // incoming serial byte
byte trame[20];
int compteur=0;
boolean shoot_done=false;
byte rx_byte;
byte result_byte;
long timer=millis();
boolean autokap = true;
int angle_moy=0;
int angle=0;
void myDelay(long mytime=0) {
long mystart = millis();
while (millis()-mystart < mytime) {
check_signal();
if (!autokap) mytime=0;
}
}
void shoot(){
digitalWrite(APN_PIN, HIGH);
delay(100);
digitalWrite(APN_PIN, LOW);
if (!autokap) delay(100);
if (!autokap) shoot_done = true;
}
void tilt_angle(int angle = 0){
tilt_servo.attach(TILT_PIN);
angle = map(angle, 0, 90, TILT_HORIZON, TILT_BAS);
tilt_servo.write(angle);
myDelay(900); // mouvement (>700 ?)
shoot(); // 100ms + 900ms soit 1s
tilt_servo.detach();
myDelay(attente-1000);
}
void turn(int rotation=1){
pan_servo.write(AUTOKAP_PAN_SPEED);
pan_servo.attach(PAN_PIN);
myDelay(TURN_TIME/POS_PER_TURN);
pan_servo.detach();
}
void check_signal() {
if (mySerial.available()) {
inByte = mySerial.read();
rx_byte = (inByte>>6);
result_byte = inByte & B00111111;
if (rx_byte>0) autokap=false;
timer=millis();
} else {
if (!autokap) {
inByte = 0; rx_byte =0;
if (millis()-timer > 500) {tilt_servo.detach();}
if (millis()-timer > 5000) {pan_servo.detach();}
if (millis()-timer > 100) {shoot_done=false;}
if (millis()-timer > 60000) {autokap=true;}
}
}
}
void setup()
{
Serial.begin(9600);
mySerial.begin(9600);
attente = (3600000 / (PHOTOS_PAR_HEURE / NB_TILT_INCLIN / POS_PER_TURN ) - TURN_TIME) / NB_TILT_INCLIN / POS_PER_TURN ;
if ((attente-1000)<=0) attente = 1001;
pinMode(SetAPCPin, OUTPUT);
digitalWrite(SetAPCPin, HIGH);
}
void loop()
{
if (autokap) {
for(int n=1;n<=NB_TILT_INCLIN;n++){
//check_signal();
if (autokap)tilt_angle((n-1)*90/(NB_TILT_INCLIN-1));
}
if (autokap) turn();
}else{
check_signal();
if (rx_byte == 0) {
} else if (rx_byte == 1) {//byte1 - tilt
int angle = map(result_byte, 63, 0, TILT_HORIZON+10, TILT_BAS-10);
angle_moy = angle;//(2*angle_moy+angle)/3;
tilt_servo.attach(TILT_PIN);
tilt_servo.write(angle_moy);
} else if (rx_byte == 2) {
if (result_byte==0) {
pan_servo.detach();
}else if ((result_byte&B00000011)>0) {
pan_servo.attach(PAN_PIN);
if ((result_byte&B00000100)>>2) pan_servo.write(PAN_IDLE - PAN_SPEED*(result_byte&B00000011)^2);
else pan_servo.write(PAN_IDLE + PAN_SPEED*(result_byte&B00000011)^2);
}
} else if (rx_byte == 3) {
if (result_byte==B00001000 && !shoot_done) {
shoot();
shoot_done = true;
}
}
}
}
// Radiocommande
#include <EEPROM.h>
#include <NewSoftSerial.h>
NewSoftSerial mySerial(3, 2);
const int analogInPinRV = A2; // Analog input pin that the potentiometer is attached to
const int analogInPinRH = A1;
const int buttonPin = 5; // the number of the pushbutton pin
const int ledPin = 9; // the number of the LED pin
const int SetAPCPin = 4;
//(....)
int sensorValueRV = 0; // value read from the pot
int outputValueRV = 0;
int mRV=0;
int sensorMinRV = 1023; // minimum sensor value
int sensorMaxRV = 0; // maximum sensor value
int sensorValueRH = 0; // value read from the pot
int outputValueRH = 0;
int mRH=0;
int sensorMinRH = 1023; // minimum sensor value
int sensorMaxRH = 0; // maximum sensor value
int envoiRV = 0;
int envoiRH = 0;
int pan=0;
byte shoot=0;
byte inByte;
byte byte1;
byte byte2;
byte byte3;
byte send1;
byte send2;
byte send3;
boolean ShootDone = false;
byte autokap=0;
int ledState = HIGH; // the current state of the output pin
int buttonState; // the current reading from the input pin
int lastButtonState = LOW; // the previous reading from the input pin
long lastDebounceTime = 0; // the last time the output pin was toggled
long debounceDelay = 50; // the debounce time; increase if the output flickers
void button(){
int reading = digitalRead(buttonPin);
if (reading != lastButtonState) {
// reset the debouncing timer
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > debounceDelay) {
// whatever the reading is at, it's been there for longer
// than the debounce delay, so take it as the actual current state:
buttonState = reading;
}
// set the LED using the state of the button:
digitalWrite(ledPin, buttonState);
lastButtonState = reading;
}
void setup() {
Serial.begin(9600);
mySerial.begin(9600);
pinMode(buttonPin, OUTPUT);
digitalWrite(buttonPin, HIGH);
pinMode(buttonPin, INPUT);
pinMode(ledPin, OUTPUT);
pinMode(SetAPCPin, OUTPUT);
digitalWrite(SetAPCPin, HIGH);
if (!digitalRead(buttonPin)) calib();
//(....)
sensorMaxRV = EEPROMReadInt(8);//672;--------647
sensorMinRV = EEPROMReadInt(10);//438;-------373
sensorMaxRH = EEPROMReadInt(12);//973;
sensorMinRH = EEPROMReadInt(14);//732;
}
void loop() {
button();
//(....)
sensorValueRV = analogRead(analogInPinRV);
outputValueRV = map(sensorValueRV, sensorMaxRV, sensorMinRV, 0, 63);
outputValueRV = constrain(outputValueRV, 0, 63);
mRV=(2*mRV+outputValueRV)/3;
outputValueRV = mRV;
sensorValueRH = analogRead(analogInPinRH);
mRH=(2*mRH+sensorValueRH)/3;
sensorValueRH = mRH;
outputValueRH = map(sensorValueRH, sensorMaxRH, sensorMinRH, 0, 255);
outputValueRH = constrain(outputValueRH, 0, 255);
//Panoramique
if (outputValueRH<128-90) pan=B00000011;//3
else if (outputValueRH<128-60) pan=B00000010;//2
else if (outputValueRH<128-30) pan=B00000001;//1
else if (outputValueRH>128+90) pan=B00000111;//7
else if (outputValueRH>128+60) pan=B00000110;//6
else if (outputValueRH>128+30) pan=B00000101;//5
else pan=B00000000;
if (!buttonState) shoot=B00001000;//8
else shoot=0;
//codage
byte1 = B01000000 + outputValueRV; //tilt
byte2 = B10000000 + pan;
byte3 = B11000000 + shoot;// + autokap;
if (byte1 != send1) {
send1=byte1;
mySerial.print(byte1,BYTE);
delay(20);
}
if (byte2 != send2) {
send2=byte2;
mySerial.print(byte2,BYTE);
delay(20);
}
if (byte3 != send3) {
send3=byte3;
mySerial.print(byte3,BYTE);
delay(20);
}
}
void calib() {
for (int n=0;n<10;n++){
digitalWrite(ledPin, LOW);
delay(50);
digitalWrite(ledPin, HIGH);
delay(50);
}
// calibrate during the first 15 seconds
while (millis() < 15000) {
//(....)
sensorValueRV = analogRead(analogInPinRV);
sensorValueRH = analogRead(analogInPinRH);
// record the maximum sensor value
//(....)
if (sensorValueRV >= sensorMaxRV) sensorMaxRV = sensorValueRV;
if (sensorValueRH >= sensorMaxRH) sensorMaxRH = sensorValueRH;
// record the minimum sensor value
//(....)
if (sensorValueRV <= sensorMinRV) sensorMinRV = sensorValueRV;
if (sensorValueRH <= sensorMinRH) sensorMinRH = sensorValueRH;
}
// signal the end of the calibration period
digitalWrite(ledPin, LOW);
}
//(....)
plesage a écrit:Là, les mecs je dis chapeau bas, je suis un peu hermétique aux lignes de codes... j'ai pas tout compris(et je ne pense pas être le seul) mais ça fait des sujets de discussions sympa dans les conviviales....non sans déconner, je salue vos recherches et le fait que vous les partagiez...
J-C a écrit:En tous les cas, pas c.. de changer les pins serial de l'APC, car c'est vraiment ch... euh ... pénible en phase de test. En plus tu peux monitorer au fur et à mesure.
#include <NewSoftSerial.h>
NewSoftSerial mySerial(3, 2);
const int SetAPCPin = 4;
void setup()
{
Serial.begin(9600);
mySerial.begin(9600);
pinMode(SetAPCPin, OUTPUT);
digitalWrite(SetAPCPin, LOW); //set parameters
}
void loop()
{
//mySerial.println("RD"); // lecture config
mySerial.println("WR 475000 1 9 3 0"); //écriture config
while (mySerial.available())
{
char cmdChar = mySerial.read ();
Serial.print(cmdChar);
}
delay(20000);
}
Alankap a écrit:Petite question comment débuter facilement avec l'arduino, j'ai vu qu'il existait des kits...mais lequel choisir pour débuter ?
André a écrit:...mais de ce à quoi ça va servir exactement ?
Retourner vers L'électronique embarquée et au sol
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 50 invités