Components and supplies
adafruit 16 channel 12 bit servo driver
Arduino Mega 2560
Project description
Code
Untitled file
arduino
1////*********************************************************** 2//programme d'actionnement de 160 servomoteurs 3// avril 2018 4//Alain Haerri 5//***********************************************************/ 6#include <SPI.h>// librairie de transmission serie 7#include <SD.h>// librairie pour carte SD 8 9#include "LcDef.h"// definition des lettres 10 11#include <Wire.h>// pour le 16 channel servo 12#include <Adafruit_PWMServoDriver.h>// pour le 16 channel servo 13 14#include <LiquidCrystal.h>// pour le LCD afficheur 15//***********************************************************/ 16// initialize the library with the numbers of the interface pins 17LiquidCrystal lcd(4, 6, 9, 11, 12, 13); 18//******************** 19File myFile;// myFile=le fichier qu'on va lire sur la carte SD qui contient les valeurs 20;320;90; etc 20//******************** 21// initialize les 10 cartes 16 chanel servos 22Adafruit_PWMServoDriver pwm1 = Adafruit_PWMServoDriver(0x40); 23Adafruit_PWMServoDriver pwm2 = Adafruit_PWMServoDriver(0x41); 24Adafruit_PWMServoDriver pwm3 = Adafruit_PWMServoDriver(0x42); 25Adafruit_PWMServoDriver pwm4 = Adafruit_PWMServoDriver(0x43); 26Adafruit_PWMServoDriver pwm5 = Adafruit_PWMServoDriver(0x44); 27Adafruit_PWMServoDriver pwm6 = Adafruit_PWMServoDriver(0x45); 28Adafruit_PWMServoDriver pwm7 = Adafruit_PWMServoDriver(0x46); 29Adafruit_PWMServoDriver pwm8 = Adafruit_PWMServoDriver(0x47); 30Adafruit_PWMServoDriver pwm9 = Adafruit_PWMServoDriver(0x48); 31Adafruit_PWMServoDriver pwm10 = Adafruit_PWMServoDriver(0x49); 32 33Adafruit_PWMServoDriver servoligne[10] {pwm10,pwm9,pwm8,pwm7,pwm6,pwm5,pwm4,pwm3,pwm2,pwm1}; //creation d'un tableau servoligne qui contient pwm1,pwm2 etc 34// on a 10 lignes de 16 colonnes = 160 servos mais il faudra 25 amperes !!! 125W 35 36int degremin=40; 37int degremax=120; 38int valeurmax=map(degremax,0,180,150,550);// pour limiter les mouvements de 40 à 130 degrés 150,550 sont les valeurs min et max a donner auxservos pour 0 et 180 degrés 39int valeurmin=map(degremin,0,180,150,550);// pour limiter les mouvements de 40 à 130 degrés 150,550 sont les valeurs min et max a donner auxservos pour 0 et 180 degrés 40// cela donne 238 valeurmin et 483 valeurmax ce sont les valeurs limite de 40 à 130 degré, 41// si on diminue valeurmin ou on augmentvaleuxmax ça rique de casser les parasols 42int tabvaleurmin[10][16];//tableau de réglages de chaque servos de l'angle 0 (+- 150) 43int tabvaleurmax[10][16];//tableau de réglages de chaque servos de l'angle 180(+- 550) 44 45int angleconsigne=degremin; 46// definition de 4 boutons(return,+,-;valider) 47 48#define bouton1on (!digitalRead(24)) 49#define bouton2on (!digitalRead(26)) 50#define bouton3on (!digitalRead(28)) 51#define bouton4on (!digitalRead(30)) 52byte bouton1onprevious=0; 53byte bouton2onprevious=0; 54byte bouton3onprevious=0; 55byte bouton4onprevious=0; 56int valeurbouton1=0; 57int valeurbouton2=0; 58int valeurbouton3=0; 59int valeurbouton4=0; 60byte ausuivant=0; 61 62int prochainecol=0;// utilisé dans lettre 63 int angle[10 ] [ 16];//= {// a garder pour le moment mais sera different après , un fichier apar angle voulu,le fichier contient un tableau de 16x8 angle de servo 64 65 66 67//*********************************************************************************************** 68//******************************* SET UP ******************************************* 69//*********************************************************************************************** 70void setup() 71 72{ 73 74pinMode(24,INPUT_PULLUP); 75pinMode(26,INPUT_PULLUP); 76pinMode(28,INPUT_PULLUP); 77pinMode(30,INPUT_PULLUP); 78 79 80 81for (int x=0;x<=9;x++)// 10 colonnes 82 { 83servoligne[x].begin(); 84servoligne[x].setPWMFreq(60); // This is the maximum PWM frequency 85 } 86 87 lcd.begin(16, 2); // set up the LCD's number of columns and rows: 88 89 Serial.begin(9600); 90 delay(1000);//wait for a second 91 92randomSeed(analogRead(0)); 93 94for(int y=0;y<=9; y++) {// pour toutes les lignes de servos`tableau de réglages de chaque servos 95 for( int x=0;x<=15;x++) {// pour toutes les colonnes de servos 96tabvaleurmin[y][x]=150;//pour au moins avoir ça et pas des 0 97tabvaleurmax[y][x]=550; //pour au moins avoir ça et pas des 0 98 } 99 } 100 101//********************carte sd initilaisation******************** 102 Serial.print("Initializing SD card...");// 103lcdaffiche("Initializing SD card...",""); 104 if (!SD.begin(53)) {// * 105 Serial.println("initialization failed!");// 106 lcdaffiche("carte SD pas OK",""); 107 delay(4000); 108 //return;// * 109 }// 110 else{//* 111 Serial.println("initialization done.");// 112 lcdaffiche("carte SD OK",""); 113 delay(4000); 114//******************** fin initilaisaton carte sd*********************************** 115 116 117 118lecturecartesd("tabmin.txt",tabvaleurmin);// pour toutes les lignes de servos`tableau de réglages de chaque servos memoriser sur la carte SD 119lecturecartesd("tabmax.txt",tabvaleurmax);// pour toutes les lignes de servos`tableau de réglages de chaque servos memoriser sur la carte SD 120 121 } 122 123} 124 125 126 127//************************* LOOP ************************************************************************ 128//********************************************************************************************************************* 129void loop() 130{ 131 132 133reglage(); 134menu(); 135balle(); 136eclosion(); 137propagation(); 138mouvementsynchrone();//image 139mouvementsinusoidal();//sinusoide 140mouvementsinusimage();//image avec sinusoide 141lettre("HELLO[[[");//lettre le [ pour faire un espace code ascii 91 142 143 144 145 146 147if(quelboutonpese()==4){menu();} 148 149 150}
Untitled file
arduino
1////*********************************************************** 2//programme d'actionnement de 160 servomoteurs 3// avril 2018 4//Alain Haerri 5//***********************************************************/ 6#include <SPI.h>// librairie de transmission serie 7#include <SD.h>// librairie pour carte SD 8 9#include "LcDef.h"// definition des lettres 10 11#include <Wire.h>// pour le 16 channel servo 12#include <Adafruit_PWMServoDriver.h>// pour le 16 channel servo 13 14#include <LiquidCrystal.h>// pour le LCD afficheur 15//***********************************************************/ 16// initialize the library with the numbers of the interface pins 17LiquidCrystal lcd(4, 6, 9, 11, 12, 13); 18//******************** 19File myFile;// myFile=le fichier qu'on va lire sur la carte SD qui contient les valeurs 20;320;90; etc 20//******************** 21// initialize les 10 cartes 16 chanel servos 22Adafruit_PWMServoDriver pwm1 = Adafruit_PWMServoDriver(0x40); 23Adafruit_PWMServoDriver pwm2 = Adafruit_PWMServoDriver(0x41); 24Adafruit_PWMServoDriver pwm3 = Adafruit_PWMServoDriver(0x42); 25Adafruit_PWMServoDriver pwm4 = Adafruit_PWMServoDriver(0x43); 26Adafruit_PWMServoDriver pwm5 = Adafruit_PWMServoDriver(0x44); 27Adafruit_PWMServoDriver pwm6 = Adafruit_PWMServoDriver(0x45); 28Adafruit_PWMServoDriver pwm7 = Adafruit_PWMServoDriver(0x46); 29Adafruit_PWMServoDriver pwm8 = Adafruit_PWMServoDriver(0x47); 30Adafruit_PWMServoDriver pwm9 = Adafruit_PWMServoDriver(0x48); 31Adafruit_PWMServoDriver pwm10 = Adafruit_PWMServoDriver(0x49); 32 33Adafruit_PWMServoDriver servoligne[10] {pwm10,pwm9,pwm8,pwm7,pwm6,pwm5,pwm4,pwm3,pwm2,pwm1}; //creation d'un tableau servoligne qui contient pwm1,pwm2 etc 34// on a 10 lignes de 16 colonnes = 160 servos mais il faudra 25 amperes !!! 125W 35 36int degremin=40; 37int degremax=120; 38int valeurmax=map(degremax,0,180,150,550);// pour limiter les mouvements de 40 à 130 degrés 150,550 sont les valeurs min et max a donner auxservos pour 0 et 180 degrés 39int valeurmin=map(degremin,0,180,150,550);// pour limiter les mouvements de 40 à 130 degrés 150,550 sont les valeurs min et max a donner auxservos pour 0 et 180 degrés 40// cela donne 238 valeurmin et 483 valeurmax ce sont les valeurs limite de 40 à 130 degré, 41// si on diminue valeurmin ou on augmentvaleuxmax ça rique de casser les parasols 42int tabvaleurmin[10][16];//tableau de réglages de chaque servos de l'angle 0 (+- 150) 43int tabvaleurmax[10][16];//tableau de réglages de chaque servos de l'angle 180(+- 550) 44 45int angleconsigne=degremin; 46// definition de 4 boutons(return,+,-;valider) 47 48#define bouton1on (!digitalRead(24)) 49#define bouton2on (!digitalRead(26)) 50#define bouton3on (!digitalRead(28)) 51#define bouton4on (!digitalRead(30)) 52byte bouton1onprevious=0; 53byte bouton2onprevious=0; 54byte bouton3onprevious=0; 55byte bouton4onprevious=0; 56int valeurbouton1=0; 57int valeurbouton2=0; 58int valeurbouton3=0; 59int valeurbouton4=0; 60byte ausuivant=0; 61 62int prochainecol=0;// utilisé dans lettre 63 int angle[10 ] [ 16];//= {// a garder pour le moment mais sera different après , un fichier apar angle voulu,le fichier contient un tableau de 16x8 angle de servo 64 65 66 67//*********************************************************************************************** 68//******************************* SET UP ******************************************* 69//*********************************************************************************************** 70void setup() 71 72{ 73 74pinMode(24,INPUT_PULLUP); 75pinMode(26,INPUT_PULLUP); 76pinMode(28,INPUT_PULLUP); 77pinMode(30,INPUT_PULLUP); 78 79 80 81for (int x=0;x<=9;x++)// 10 colonnes 82 { 83servoligne[x].begin(); 84servoligne[x].setPWMFreq(60); // This is the maximum PWM frequency 85 } 86 87 lcd.begin(16, 2); // set up the LCD's number of columns and rows: 88 89 Serial.begin(9600); 90 delay(1000);//wait for a second 91 92randomSeed(analogRead(0)); 93 94for(int y=0;y<=9; y++) {// pour toutes les lignes de servos`tableau de réglages de chaque servos 95 for( int x=0;x<=15;x++) {// pour toutes les colonnes de servos 96tabvaleurmin[y][x]=150;//pour au moins avoir ça et pas des 0 97tabvaleurmax[y][x]=550; //pour au moins avoir ça et pas des 0 98 } 99 } 100 101//********************carte sd initilaisation******************** 102 Serial.print("Initializing SD card...");// 103lcdaffiche("Initializing SD card...",""); 104 if (!SD.begin(53)) {// * 105 Serial.println("initialization failed!");// 106 lcdaffiche("carte SD pas OK",""); 107 delay(4000); 108 //return;// * 109 }// 110 else{//* 111 Serial.println("initialization done.");// 112 lcdaffiche("carte SD OK",""); 113 delay(4000); 114//******************** fin initilaisaton carte sd*********************************** 115 116 117 118lecturecartesd("tabmin.txt",tabvaleurmin);// pour toutes les lignes de servos`tableau de réglages de chaque servos memoriser sur la carte SD 119lecturecartesd("tabmax.txt",tabvaleurmax);// pour toutes les lignes de servos`tableau de réglages de chaque servos memoriser sur la carte SD 120 121 } 122 123} 124 125 126 127//************************* LOOP ************************************************************************ 128//********************************************************************************************************************* 129void loop() 130{ 131 132 133reglage(); 134menu(); 135balle(); 136eclosion(); 137propagation(); 138mouvementsynchrone();//image 139mouvementsinusoidal();//sinusoide 140mouvementsinusimage();//image avec sinusoide 141lettre("HELLO[[[");//lettre le [ pour faire un espace code ascii 91 142 143 144 145 146 147if(quelboutonpese()==4){menu();} 148 149 150}
Downloadable files
img_4128_0wJc1R0lbm.JPG
img_4128_0wJc1R0lbm.JPG
img_4127_KoAqLnwCPF.JPG
img_4127_KoAqLnwCPF.JPG
detail
detail
img_4128_0wJc1R0lbm.JPG
img_4128_0wJc1R0lbm.JPG
detail
detail
img_4127_KoAqLnwCPF.JPG
img_4127_KoAqLnwCPF.JPG
back of the board
back of the board
Comments
Only logged in users can leave comments
alain_haerri
0 Followers
•0 Projects
Table of contents
Intro
11
0