Masquer les derniers auteurs
Jean-Yves Dupertuis 1.1 1 = Commutation d'antenne via raspberry - py =
2
3 Ce commutateur va permettre via internet de modifier l' antenne reliée au TX de la station EM.
Jean-Yves Dupertuis 6.1 4
Jean-Yves Dupertuis 6.2 5 Ce travail a été confié à un apprenant de 4ème année (M// Loris Gilliand//) .
Jean-Yves Dupertuis 6.1 6
Jean-Yves Dupertuis 6.2 7
Jean-Yves Dupertuis 11.5 8 = [[Fabrication>>doc:fabricationSwitch]] =
Jean-Yves Dupertuis 11.4 9
10
Jean-Yves Dupertuis 11.6 11 = Interface Homme - Machine =
Jean-Yves Dupertuis 6.1 12
Jean-Yves Dupertuis 6.3 13 Pour commuter le TX sur une autre antenne, il suffit de taper la lettre (//canal désiré) au clavier.//
14
15 L'image se modifie selon votre choix pour valider sa commutation.
16
17 Vous pouvez via la "souris" obtenir le même résultat !
18
19
20
Jean-Yves Dupertuis 6.1 21 [[image:PremFenetre.jpg]]
22
23
24
25 [[image:ZoneAide.jpg]]
26
27
28
29 [[image:BoutonIndication.jpg]]
30
31
32 [[image:ClassGpio.jpg]]
Jean-Yves Dupertuis 8.2 33
34
35 On a ajouté un LCD fournit par //HB9FOX //qui permet de commuter directement sur le module la bonne Antenne.
36
37 **IMPORTANT !!** Pour ce faire le raspberry - py doit fonctionné et le programme lancé !
38
39
40 Voici le détail :
41
42
43 [[image:lcdVue.jpg]]
44
45
46 [[image:lcdCommande.jpg]]
47
48
Jean-Yves Dupertuis 10.2 49 == Câblage du module ==
Jean-Yves Dupertuis 8.2 50
Jean-Yves Dupertuis 10.2 51 Le raspberry - py travaille avec 8 GPIO qui pour des raisons de protection transit via des opto - coupleurs.
52
53 Une carte dédiée à cette protection a été développée.
54
55 Le rasbberry - py est directement relié aux entrée de ces optos et la photo montre comment relié les sorties
56
57 des optos à la carte relais. Une carte relais possède 4 relais de commutation. C'est pourquoi le module
58
59 possède 2 cartes relais.
60
61
62
63 [[image:OptoRelais.jpg]]
64
65
66
67 Depuis les sorties relais on installe le câble de la boite de commutation.
68
69
70 [[image:RelaiCommutateur.jpg]]
71
72
73 Les fils rouge sont l'arrivée du 12 Vdc depuis l'autre côté de la carte relais.
74
75 **Ne pas oublier de les relier au 12Vdc !**
Jean-Yves Dupertuis 11.2 76
77
78 == Câble ==
79
80
81 [[image:cableCommAnt.jpg]]
82
83
Jean-Yves Dupertuis 11.6 84
85 = Programmation Python =
86
87 Voici le code source, vous pouvez le copier directement dans un IDLE Python 2.7.
88
Jean-Yves Dupertuis 12.2 89 Si vous ne l'avez pas, vous pouvez le télécharger sur le site Python [[https:~~/~~/www.python.org/downloads/>>url:https://www.python.org/downloads/]].
Jean-Yves Dupertuis 11.6 90
Jean-Yves Dupertuis 12.2 91 Pour linux c'est plus simple il suffit d' ouvrir l'IDLE 2.7 déjà présent
92
Jean-Yves Dupertuis 11.6 93 sur votre carte raspberry - py.
94
Jean-Yves Dupertuis 14.3 95 **Important !! **je suis parti du principe que le port **//I2C//** est fonctionnel sur votre raspberry - py.
Jean-Yves Dupertuis 12.2 96
Jean-Yves Dupertuis 14.3 97 **Si ce n'est pas le cas, seul la distribution sans le LCD fonctionnera !**
98
99
100
Jean-Yves Dupertuis 12.3 101 == Source : ==
Jean-Yves Dupertuis 12.2 102
103
104
105 {{{# auteur : Gilliand Loris
Jean-Yves Dupertuis 11.6 106 # date : 02.06.14
107 # version 0.8
108 #
109 # amelioration depuis 0.7 : integre un lcd qui peut commander les changements
110
111 # importation bibilotheques
112 import pygame, sys, time
113 from pygame.locals import *
114 import RPi.GPIO as GPIO
115 from Adafruit_CharLCDPlate import *
116
117 # initialisation fenetre et gpio
118 pygame.init()
119 GPIO.setmode(GPIO.BCM)
120
121 # fonction qui change LA sortie active
122 def change_sortie(ligne):
123 BP1.etat = 0
124 BP2.etat = 0
125 BP3.etat = 0
126 BP4.etat = 0
127 BP1.affiche_etat(inactif)
128 BP2.affiche_etat(inactif)
129 BP3.affiche_etat(inactif)
130 BP4.affiche_etat(inactif)
131 time.sleep(0.25)
132 if ligne == 'a':
133 BP1.etat = 1
134 BP1.affiche_etat(actif)
135 elif ligne == 'b':
136 BP2.etat = 1
137 BP2.affiche_etat(actif)
138 elif ligne == 'c':
139 BP3.etat = 1
140 BP3.affiche_etat(actif)
141 elif ligne == 'd':
142 BP4.etat = 1
143 BP4.affiche_etat(actif)
144
145 # classe de creation de cases
146 class Cases:
Jean-Yves Dupertuis 11.7 147 def init(self,image,pos,port,init):
Jean-Yves Dupertuis 11.6 148 self.image = pygame.image.load(image).convert()
149 self.pos = pos
150 self.port = port
151 self.etat = init
152 self.rect = self.image.get_rect().move(self.pos)
153 GPIO.setup(self.port,GPIO.OUT)
154 GPIO.output(self.port,GPIO.LOW)
155
156 def affiche_etat(self,indicateur):
157 indicateur = pygame.image.load(indicateur).convert()
158 indi_rect = indicateur.get_rect()
159 indi_rect.centerx = self.rect.centerx - self.pos[0]
160 indi_rect.centery = self.rect.centery - self.pos[1]
161 if self.etat == 0:
162 GPIO.output(self.port,GPIO.LOW)
163 elif self.etat == 1:
164 GPIO.output(self.port,GPIO.HIGH)
165 self.image.blit(indicateur,indi_rect)
166
167 # initialisation de la fenetre
168 screen = pygame.display.set_mode((600,600))
169 clock = pygame.time.Clock()
170 # initialisation des couleurs
171 rouge = (255,0,0)
172 noir = (0,0,0)
173 blanc = (255,255,255)
174 vert = (0,255,0)
175 bleu = (0,0,255)
176
177 # initialisation des variables
178 startline = (183,149)
179 endline = (293,75)
180
181 flag_canal = 0
182
183 canal = [4,17,18,22,23,24,25,27]
184
185 # definitions des zones
186 zone1 = pygame.Surface((600,150))
187 zone1.fill(bleu)
188
189 zone2 = pygame.Surface((400,300))
190 zone2.fill(bleu)
191
192 zone3 = pygame.Surface((600,150))
193 zone3.fill(bleu)
194
195 zone4 = pygame.Surface((200,300))
196 zone4.fill(bleu)
197
198 # definitions des objets a afficher dans les zones
199 # zone 1
200 font = pygame.font.Font(None,60)
201 titre1 = font.render("HB9EM",1,noir)
202 titre2 = font.render("Commutateur d'antennes",1,noir)
203 zone1.blit(titre1,(230,30))
204 zone1.blit(titre2,(50,70))
205
206 # zone 2
207 commu = pygame.image.load("commu_antenne.bmp").convert()
208 zone2.blit(commu,(50,50))
209
210 # zone 3
211 actif = "actif_commu.bmp"
212 inactif = "inactif_commu.bmp"
213
214 BP1 = Cases("bouton_commu.bmp",(125,50),canal[1],1)
215 BP2 = Cases("bouton_commu.bmp",(225,50),canal[2],0)
216 BP3 = Cases("bouton_commu.bmp",(325,50),canal[3],0)
217 BP4 = Cases("bouton_commu.bmp",(425,50),canal[4],0)
218 grp_cases = [BP1,BP2,BP3,BP4]
219 BP1.affiche_etat(actif)
220 BP2.affiche_etat(inactif)
221 BP3.affiche_etat(inactif)
222 BP4.affiche_etat(inactif)
223
224 zone3.blit(BP1.image,BP1.rect)
225 zone3.blit(BP2.image,BP2.rect)
226 zone3.blit(BP3.image,BP3.rect)
227 zone3.blit(BP4.image,BP4.rect)
228
229 font = pygame.font.Font(None,20)
230 canal_a = font.render("canal A",1,noir)
231 canal_b = font.render("canal B",1,noir)
232 canal_c = font.render("canal C",1,noir)
233 canal_d = font.render("canal D",1,noir)
234 zone3.blit(canal_a,(125,35))
235 zone3.blit(canal_b,(225,35))
236 zone3.blit(canal_c,(325,35))
237 zone3.blit(canal_d,(425,35))
238
239 # zone 4
240 commande = font.render("Commandes :",1,noir)
241 touche_a = font.render("Selection canal A : touche a",1,noir)
242 touche_b = font.render("Selection canal B : touche b",1,noir)
243 touche_c = font.render("Selection canal C : touche c",1,noir)
244 touche_d = font.render("Selection canal D : touche d",1,noir)
245 quitter = font.render("Quitter : touche q",1,noir)
246 zone4.blit(commande,(10,20))
247 zone4.blit(touche_a,(10,60))
248 zone4.blit(touche_b,(10,80))
249 zone4.blit(touche_c,(10,100))
250 zone4.blit(touche_d,(10,120))
251 zone4.blit(quitter,(10,200))
252
253 # affichage des zones
254 screen.blit(zone1,(0,0))
255 screen.blit(zone2,(0,150))
256 screen.blit(zone3,(0,450))
257 screen.blit(zone4,(400,150))
258
259 lcd = Adafruit_CharLCDPlate()
260 lcd.begin(16,2)
261 btn = ((lcd.SELECT, '', lcd.ON),
262 (lcd.LEFT , 'Antenne 1' , lcd.ON),
263 (lcd.UP , 'Antenne 2' , lcd.ON),
264 (lcd.DOWN , 'Antenne 4' , lcd.ON),
265 (lcd.RIGHT , 'Antenne 3' , lcd.ON))
266 prev = -1
267 temp = ''
268 active = 'Antenne 1'
269 act = ' active'
270 lcd.message((active + act))
271 while 1:
272 clock.tick(30)
273 for b in btn:
274 if lcd.buttonPressed(lcd.SELECT):
275 lcd.clear()
276 lcd.message((active + act))
277 time.sleep(0.25)
278 if temp != '':
279 active = temp
280 temp = ''
281 if active == 'Antenne 1':
282 change_sortie('a')
283 endline = (293,75)
284 if active == 'Antenne 2':
285 change_sortie('b')
286 endline = (293,125)
287 if active == 'Antenne 3':
288 change_sortie('c')
289 endline = (293,175)
290 if active == 'Antenne 4':
291 change_sortie('d')
292 endline = (293,225)
293 lcd.setCursor(0,0)
294 lcd.message((active + act))
295 lcd.setCursor(0,1)
296 lcd.message(' ')
297 if lcd.buttonPressed(lcd.RIGHT):
298 temp = 'Antenne 3'
299 lcd.setCursor(0,1)
300 lcd.message(temp)
301 if lcd.buttonPressed(lcd.DOWN):
302 temp = 'Antenne 4'
303 lcd.setCursor(0,1)
304 lcd.message(temp)
305 if lcd.buttonPressed(lcd.UP):
306 temp = 'Antenne 2'
307 lcd.setCursor(0,1)
308 lcd.message(temp)
309 if lcd.buttonPressed(lcd.LEFT):
310 temp = 'Antenne 1'
311 lcd.setCursor(0,1)
312 lcd.message(temp)
313
314 for event in pygame.event.get():
315 lcd.setCursor(0,0)
316 if event.type == pygame.QUIT:
317 GPIO.cleanup()
318 sys.exit()
319 if event.type == pygame.KEYDOWN:
320 if event.key == pygame.K_q:
321 GPIO.cleanup()
322 sys.exit()
323 if event.key == pygame.K_a:
324 active = 'Antenne 1'
325 lcd.message((active + act))
326 change_sortie('a')
327 endline = (293,75)
328 if event.key == pygame.K_b:
329 active = 'Antenne 2'
330 lcd.message((active + act))
331 change_sortie('b')
332 endline = (293,125)
333 if event.key == pygame.K_c:
334 active = 'Antenne 3'
335 lcd.message((active + act))
336 change_sortie('c')
337 endline = (293,175)
338 if event.key == pygame.K_d:
339 active = 'Antenne 4'
340 lcd.message((active + act))
341 change_sortie('d')
342 endline = (293,225)
343
344 souris = pygame.mouse.get_pos()
Jean-Yves Dupertuis 11.7 345 souris_rect = souris[0],souris[1,[5,5]]
Jean-Yves Dupertuis 11.6 346 souris_rect = pygame.Rect(souris_rect)
347
348 for i in grp_cases:
349 lcd.setCursor(0,0)
350 if souris_rect.colliderect(i.rect.move((0,450))):
351 if pygame.mouse.get_pressed() == (1,0,0):
352 if i.port == canal[1]:
353 active = 'Antenne 1'
354 lcd.message((active + act))
355 change_sortie('a')
356 endline = (293,75)
357 if i.port == canal[2]:
358 active = 'Antenne 2'
359 lcd.message((active + act))
360 change_sortie('b')
361 endline = (293,125)
362 if i.port == canal[3]:
363 active = 'Antenne 3'
364 lcd.message((active + act))
365 change_sortie('c')
366 endline = (293,175)
367 if i.port == canal[4]:
368 active = 'Antenne 4'
369 lcd.message((active + act))
370 change_sortie('d')
371 endline = (293,225)
372
373 zone3.blit(BP1.image,BP1.rect)
374 zone3.blit(BP2.image,BP2.rect)
375 zone3.blit(BP3.image,BP3.rect)
376 zone3.blit(BP4.image,BP4.rect)
377 screen.blit(zone3,(0,450))
378 zone2.blit(commu,(50,50))
379 pygame.draw.line(zone2,noir,startline,endline,2)
380 screen.blit(zone2,(0,150))
381 pygame.display.update()
Jean-Yves Dupertuis 11.7 382 }}}
Jean-Yves Dupertuis 11.6 383
Jean-Yves Dupertuis 11.7 384
Jean-Yves Dupertuis 12.2 385 [[Fichier Py>>attach:commu08.py]]
386
Jean-Yves Dupertuis 14.2 387
388 === Distributions sans et avec LCD ===
389
390 [[Distribution_sans_LCD.rar>>attach:Distribution.rar]]
391
392
393 [[Distribution_lcd.rar>>attach:Distribution_lcd.rar]]
394
395
396